Merge "Merge Android Pie into master"
diff --git a/.travis.yml b/.travis.yml
index 6720289..da48143 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,12 +10,12 @@
     # Try to emulate a C89 compiler on a POSIX system by disabling as many
     # GNU extensions as possible.
     - compiler: gcc
-      env: CFLAGS="-O2 -std=c89 -D_POSIX_C_SOURCE=200809L"
+      env: CFLAGS="-O2 -std=c89 -D_XOPEN_SOURCE=700 -Werror -Wno-error=unused-function"
     # clang with AddressSanitizer and UndefinedBehaviorSanitizer.
     - compiler: clang
       dist: trusty
       env: CONFIG="--without-python"
-           CFLAGS="-O2 -g -fno-omit-frame-pointer -fsanitize=address,undefined -fno-sanitize-recover=all"
+           CFLAGS="-O2 -g -fno-omit-frame-pointer -fsanitize=address,undefined -fno-sanitize=float-divide-by-zero,pointer-overflow -fno-sanitize-recover=all -Werror -Wno-error=unused-function -Wno-error=cast-align"
            UBSAN_OPTIONS=print_stacktrace=1
 script: sh autogen.sh $CONFIG && make -j2 V=1 && make check
 git:
diff --git a/CONTRIBUTING b/CONTRIBUTING
new file mode 100644
index 0000000..6f7a988
--- /dev/null
+++ b/CONTRIBUTING
@@ -0,0 +1,24 @@
+The current version of the code can be found in the GNOME Git Repository:
+
+    https://git.gnome.org/browse/libxml2/
+
+There's mirror on GitHub:
+
+    https://github.com/GNOME/libxml2
+
+Start discussions and send patches to the mailing list, or file a bug and
+add a patch as attachment.
+
+    https://mail.gnome.org/mailman/listinfo/xml
+    https://bugzilla.gnome.org/enter_bug.cgi?product=libxml2
+
+Format patches with git-format-patch and use plain text attachments
+if possible.
+
+All code must conform to C89 and pass the "make check" tests. Avoid
+compiler warnings and add regression tests if possible.
+
+The .travis.yml file can be used to thoroughly check the build with strict
+compiler flags, ASan and UBSan. Fork the libxml2 mirror on GitHub and set
+up Travis to test the commits you make on your fork.
+
diff --git a/HACKING b/HACKING
deleted file mode 100644
index 5d28294..0000000
--- a/HACKING
+++ /dev/null
@@ -1,37 +0,0 @@
-NOTE: 
-  - the head of this module is package libxml-2 . There is incompatibilities
-    with the old libxml-1 headers. I posted on gnome-hackers a recipe to
-    change your code to compile with both, check it out ! Also read
-    http://xmlsoft.org/upgrade.html
-  - in the meantime the old 1.x code has been tagged with LIB_XML_1_BRANCH
-    extract this version and drop me a mail if you want me to take care of
-    the update of your module to libxml-2 <daniel@veillard.com>
-  - the 1.x branch has a separate commit policy, please check the HACKING
-    file for this branch
-
-     Rules for commits on the gnome-xml module
-     =========================================
-
-  BEFORE READING FURTHER: DO NOT COMMIT DIRECTLY !
-
- In the exceptional case where a serious breakage in this module
-prevents other core projects from making progress, then feel free
-to patch first and send mail afterward as long as the changes are limited.
-Please keep in mind that a large part of my user base is on Windows, so
-be careful with potential portability problems there.
-
-Otherwise, send me (veillard@redhat.com) a mail and if it's a bug
-issue, register it at bugzilla.gnome.org (module libxml). I check both
-my mail and the bug database on a regular basis. If you don't get an
-answer within a week (which is highly unprobable) then commit your changes.
-This simply mean that I'm on holliday or on the road.
-
-  thanks in advance for following the rule,
-
-Daniel
-
-P.S.: Bjorn Reese, William Brack, Thomas Broyer, Igor Zlatkovic and
-      Aleksey Sanin get an exception for the send before commit rule
-      as well as John Fleck for the doc maintenance Send them mail if
-      I don't answer to request in a timely fashion
-
diff --git a/Makefile.am b/Makefile.am
index 15f78e1..9c630be 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -8,7 +8,7 @@
 
 AM_CPPFLAGS = -I$(top_builddir)/include -I$(srcdir)/include
 
-AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS) $(LZMA_CFLAGS)
+AM_CFLAGS = $(EXTRA_CFLAGS) $(THREAD_CFLAGS) $(Z_CFLAGS) $(LZMA_CFLAGS)
 
 check_PROGRAMS=testSchemas testRelax testSAX testHTML testXPath testURI \
                testThreads testC14N testAutomata testRegexp \
@@ -191,7 +191,6 @@
 testapi_LDFLAGS = 
 testapi_DEPENDENCIES = $(DEPS)
 testapi_LDADD= $(LDADDS)
-testapi_CFLAGS = -Wno-unused-function
 
 runxmlconf_SOURCES=runxmlconf.c
 runxmlconf_LDFLAGS = 
diff --git a/README.cvs-commits b/README.cvs-commits
index a4bd841..9c7bdd0 100644
--- a/README.cvs-commits
+++ b/README.cvs-commits
@@ -1,4 +1,4 @@
- Please read the HACKING file for instructions
+ Please read the CONTRIBUTING file for instructions
 
 Daniel
 
diff --git a/bakefile/libxml2.bkl b/bakefile/libxml2.bkl
index f314465..dd6ce2c 100644
--- a/bakefile/libxml2.bkl
+++ b/bakefile/libxml2.bkl
@@ -406,7 +406,6 @@
 	

 	

 	<!-- some other conditional defines -->

-	<set var="ZLIB_DEF"><if cond="WITH_ZLIB=='1'">HAVE_ZLIB_H</if></set>

 	<set var="DEBUG_DEF"><if cond="BUILD=='debug'">_DEBUG</if></set>

 	<set var="DEBUG_DEF"><if cond="BUILD=='release'">NDEBUG</if></set>

 	

diff --git a/c14n.c b/c14n.c
index a0f2c19..c04ce66 100644
--- a/c14n.c
+++ b/c14n.c
@@ -2089,7 +2089,7 @@
         xmlC14NErrParam("saving doc");
         return (-1);
     }
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     if (compression < 0)
         compression = xmlGetCompressMode();
 #endif
diff --git a/configure.ac b/configure.ac
index 8dbc56c..370e2de 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,7 +9,7 @@
 
 LIBXML_MAJOR_VERSION=2
 LIBXML_MINOR_VERSION=9
-LIBXML_MICRO_VERSION=7
+LIBXML_MICRO_VERSION=8
 LIBXML_MICRO_VERSION_SUFFIX=
 LIBXML_VERSION=$LIBXML_MAJOR_VERSION.$LIBXML_MINOR_VERSION.$LIBXML_MICRO_VERSION$LIBXML_MICRO_VERSION_SUFFIX
 LIBXML_VERSION_INFO=`expr $LIBXML_MAJOR_VERSION + $LIBXML_MINOR_VERSION`:$LIBXML_MICRO_VERSION:$LIBXML_MINOR_VERSION
@@ -389,18 +389,20 @@
 
 WITH_ZLIB=0
 if test "$with_zlib" = "no"; then
-    echo "Disabling compression support"
+    echo "Disabling zlib compression support"
 else
-    # Try pkg-config first so that static linking works.
-    # If this succeeeds, we ignore the WITH_ZLIB directory.
-    PKG_CHECK_MODULES([Z],[zlib],
-        [have_libz=yes],
-        [have_libz=no])
+    # Don't run pkg-config if with_zlib contains a path.
+    if test "x$Z_DIR" = "x"; then
+        # Try pkg-config first so that static linking works.
+        PKG_CHECK_MODULES([Z],[zlib],
+            [WITH_ZLIB=1],
+            [ ])
+    fi
 
-     if test "x$have_libz" = "xno"; then
+    if test "$WITH_ZLIB" = "0"; then
         AC_CHECK_HEADERS(zlib.h,
             AC_CHECK_LIB(z, gzread,[
-                have_libz=yes
+                WITH_ZLIB=1
                 if test "x${Z_DIR}" != "x"; then
                     Z_CFLAGS="-I${Z_DIR}/include"
                     Z_LIBS="-L${Z_DIR}/lib -lz"
@@ -411,18 +413,8 @@
                     esac]
                 else
                     Z_LIBS="-lz"
-                fi],
-                [have_libz=no])
-             )
-    else
-	# we still need to check for zlib.h header
-	AC_CHECK_HEADERS([zlib.h])
-    fi
-
-    # Found the library via either method?
-    if test "x$have_libz" = "xyes"; then
-        AC_DEFINE([HAVE_LIBZ], [1], [Have compression library])
-        WITH_ZLIB=1
+                fi])
+            )
     fi
 fi
 
@@ -436,38 +428,30 @@
 
 WITH_LZMA=0
 if test "$with_lzma" = "no"; then
-    echo "Disabling compression support"
+    echo "Disabling lzma compression support"
 else
-    # Try pkg-config first so that static linking works.
-    # If this succeeeds, we ignore the WITH_LZMA directory.
-    PKG_CHECK_MODULES([LZMA],[liblzma],
-        [have_liblzma=yes],
-        [have_liblzma=no])
+    # Don't run pkg-config if with_lzma contains a path.
+    if test "x$LZMA_DIR" = "x"; then
+        # Try pkg-config first so that static linking works.
+        PKG_CHECK_MODULES([LZMA],[liblzma],
+            [WITH_LZMA=1],
+            [ ])
+    fi
 
-     # If pkg-config failed, fall back to AC_CHECK_LIB. This
-     # will not pick up the necessary LIBS flags for liblzma's
-     # private dependencies, though, so static linking may fail.
-     if test "x$have_liblzma" = "xno"; then
-         AC_CHECK_HEADERS(lzma.h,
+    # If pkg-config failed, fall back to AC_CHECK_LIB. This
+    # will not pick up the necessary LIBS flags for liblzma's
+    # private dependencies, though, so static linking may fail.
+    if test "$WITH_LZMA" = "0"; then
+        AC_CHECK_HEADERS(lzma.h,
             AC_CHECK_LIB(lzma, lzma_code,[
-                have_liblzma=yes
+                WITH_LZMA=1
                 if test "x${LZMA_DIR}" != "x"; then
                     LZMA_CFLAGS="-I${LZMA_DIR}/include"
                     LZMA_LIBS="-L${LZMA_DIR}/lib -llzma"
                 else
                     LZMA_LIBS="-llzma"
-                fi],
-                [have_liblzma=no])
-	     )
-    else
-	# we still need to check for lzma,h header
-	AC_CHECK_HEADERS([lzma.h])
-    fi
-
-    # Found the library via either method?
-    if test "x$have_liblzma" = "xyes"; then
-        AC_DEFINE([HAVE_LIBLZMA], [1], [Have compression library])
-        WITH_LZMA=1
+                fi])
+            )
     fi
 fi
 
@@ -495,12 +479,8 @@
 AC_CHECK_HEADERS([stdint.h])
 AC_CHECK_HEADERS([inttypes.h])
 AC_CHECK_HEADERS([time.h])
-AC_CHECK_HEADERS([ansidecl.h])
-AC_CHECK_HEADERS([ieeefp.h])
-AC_CHECK_HEADERS([nan.h])
 AC_CHECK_HEADERS([math.h])
 AC_CHECK_HEADERS([limits.h])
-AC_CHECK_HEADERS([fp_class.h])
 AC_CHECK_HEADERS([float.h])
 AC_CHECK_HEADERS([stdlib.h])
 AC_CHECK_HEADERS([sys/socket.h], [], [],
@@ -557,10 +537,8 @@
 
 dnl Checks for library functions.
 AC_FUNC_STRFTIME
-AC_CHECK_FUNCS(strdup strndup strerror)
-AC_CHECK_FUNCS(finite isnand fp_class class fpclass)
 AC_CHECK_FUNCS(strftime localtime gettimeofday ftime)
-AC_CHECK_FUNCS(stat _stat signal)
+AC_CHECK_FUNCS(stat signal)
 AC_CHECK_FUNCS(rand rand_r srand time)
 AC_CHECK_FUNCS(isascii mmap munmap putenv)
 
@@ -771,13 +749,13 @@
 if test "${GCC}" != "yes" ; then
     case "${host}" in
           hppa*-*-hpux* )
-	       CFLAGS="${CFLAGS} -Wp,-H30000"
+	       EXTRA_CFLAGS="${EXTRA_CFLAGS} -Wp,-H30000"
 	       ;;
           *-dec-osf* )
-               CFLAGS="${CFLAGS} -ieee"
+               EXTRA_CFLAGS="${EXTRA_CFLAGS} -ieee"
                ;;
 	  alpha*-*-linux* )
-	       CFLAGS="${CFLAGS} -ieee"
+	       EXTRA_CFLAGS="${EXTRA_CFLAGS} -ieee"
 	       ;;
     esac
 else
@@ -787,19 +765,19 @@
 	# Not activated by default because this inflates the code size
 	# Used to allow propagation of C++ exceptions through the library
 	#
-	CFLAGS="${CFLAGS} -fexceptions"
+	EXTRA_CFLAGS="${EXTRA_CFLAGS} -fexceptions"
     fi
 
     # warnings we'd like to see
-    CFLAGS="${CFLAGS} -pedantic -W -Wformat -Wno-format-extra-args -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls"
+    EXTRA_CFLAGS="${EXTRA_CFLAGS} -pedantic -Wall -Wextra -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls"
     # warnings we'd like to supress
-    CFLAGS="${CFLAGS} -Wno-long-long"
+    EXTRA_CFLAGS="${EXTRA_CFLAGS} -Wno-long-long -Wno-format-extra-args -Wno-array-bounds"
     case "${host}" in
           alpha*-*-linux* )
-	       CFLAGS="${CFLAGS} -mieee"
+	       EXTRA_CFLAGS="${EXTRA_CFLAGS} -mieee"
 	       ;;
 	  alpha*-*-osf* )
-	       CFLAGS="${CFLAGS} -mieee"
+	       EXTRA_CFLAGS="${EXTRA_CFLAGS} -mieee"
 	       ;;
     esac
 fi
@@ -812,13 +790,13 @@
 	;;
     *-*-mingw* | *-*-cygwin* | *-*-msvc* )
         # If the host is Windows, and shared libraries are disabled, we
-        # need to add -DLIBXML_STATIC to CFLAGS in order for linking to
+        # need to add -DLIBXML_STATIC to EXTRA_CFLAGS in order for linking to
         # work properly (without it, xmlexports.h would force the use of
         # DLL imports, which obviously aren't present in a static
         # library).
         if test "x$enable_shared" = "xno"; then
             XML_CFLAGS="$XML_CFLAGS -DLIBXML_STATIC"
-            CFLAGS="$CFLAGS -DLIBXML_STATIC"
+            EXTRA_CFLAGS="$EXTRA_CFLAGS -DLIBXML_STATIC"
         fi
         ;;
 esac
@@ -1010,7 +988,7 @@
 	fi
     fi
     if test "${GCC}" = "yes" ; then
-    CFLAGS="-g -O -pedantic -W -Wformat -Wno-format-extra-args -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls -Wall"
+    EXTRA_CFLAGS="-g -O -pedantic -W -Wformat -Wno-format-extra-args -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls -Wall"
     fi
     STATIC_BINARIES="-static"
 dnl -Wcast-qual -ansi
@@ -1680,14 +1658,14 @@
 if test "$with_coverage" = "yes" -a "${GCC}" = "yes"
 then
     echo Enabling code coverage for GCC
-    CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
+    EXTRA_CFLAGS="$EXTRA_CFLAGS -fprofile-arcs -ftest-coverage"
     LDFLAGS="$LDFLAGS -fprofile-arcs -ftest-coverage"
 else
     echo Disabling code coverage for GCC
 fi
 
 AC_SUBST(CPPFLAGS)
-AC_SUBST(CFLAGS)
+AC_SUBST(EXTRA_CFLAGS)
 AC_SUBST(LDFLAGS)
 AC_SUBST(XML_CFLAGS)
 
diff --git a/doc/APIchunk0.html b/doc/APIchunk0.html
index 75378fc..f778327 100644
--- a/doc/APIchunk0.html
+++ b/doc/APIchunk0.html
@@ -223,8 +223,6 @@
 <a href="html/libxml-parserInternals.html#IS_LETTER">IS_LETTER</a><br />
 <a href="html/libxml-parserInternals.html#xmlIsLetter">xmlIsLetter</a><br />
 </dd><dt>Based</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>BasicLatin</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsBasicLatin">xmlUCSIsBasicLatin</a><br />
 </dd><dt>Basically</dt><dd><a href="html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd</a><br />
 </dd><dt>Before</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
diff --git a/doc/APIchunk12.html b/doc/APIchunk12.html
index de376f7..d7404f8 100644
--- a/doc/APIchunk12.html
+++ b/doc/APIchunk12.html
@@ -865,8 +865,6 @@
 </dd><dt>crossed</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
 <a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
 </dd><dt>cshema</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FINAL_DEFAULT_LIST">XML_SCHEMAS_FINAL_DEFAULT_LIST</a><br />
-</dd><dt>ctrio</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>ctxt</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
diff --git a/doc/APIchunk13.html b/doc/APIchunk13.html
index a87a2b4..5889ebf 100644
--- a/doc/APIchunk13.html
+++ b/doc/APIchunk13.html
@@ -341,8 +341,6 @@
 <a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
 <a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>detected</dt><dd><a href="html/libxml-xpathInternals.html#CHECK_ERROR">CHECK_ERROR</a><br />
 <a href="html/libxml-xpathInternals.html#CHECK_ERROR0">CHECK_ERROR0</a><br />
 <a href="html/libxml-SAX.html#endDocument">endDocument</a><br />
diff --git a/doc/APIchunk14.html b/doc/APIchunk14.html
index 90b8249..835465a 100644
--- a/doc/APIchunk14.html
+++ b/doc/APIchunk14.html
@@ -210,6 +210,7 @@
 <a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogAddLocal">xmlCatalogAddLocal</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
+<a href="html/libxml-hash.html#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a><br />
 <a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
 <a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
 <a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
diff --git a/doc/APIchunk16.html b/doc/APIchunk16.html
index df2307d..e7e236d 100644
--- a/doc/APIchunk16.html
+++ b/doc/APIchunk16.html
@@ -340,8 +340,6 @@
 <a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>human-readable</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
 </dd></dl><h2 align="center"><a href="APIchunk0.html">A-B</a>
 <a href="APIchunk1.html">C-C</a>
diff --git a/doc/APIchunk17.html b/doc/APIchunk17.html
index 9978330..e6647e2 100644
--- a/doc/APIchunk17.html
+++ b/doc/APIchunk17.html
@@ -513,9 +513,7 @@
 <a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
 <a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
 </dd><dt>invited</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
-</dd><dt>isinf</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
 </dd><dt>isn</dt><dd><a href="html/libxml-encoding.html#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a><br />
-</dd><dt>isnan</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>issue</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
 </dd><dt>issued</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
 </dd><dt>issues</dt><dd><a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
diff --git a/doc/APIchunk18.html b/doc/APIchunk18.html
index fea13d2..91566f7 100644
--- a/doc/APIchunk18.html
+++ b/doc/APIchunk18.html
@@ -76,6 +76,7 @@
 <a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
 <a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
 <a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-xpath.html#xmlXPathInit">xmlXPathInit</a><br />
 <a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
 </dd><dt>keyword</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
 </dd><dt>kill</dt><dd><a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
diff --git a/doc/APIchunk2.html b/doc/APIchunk2.html
index 8a7d8f7..bb6c141 100644
--- a/doc/APIchunk2.html
+++ b/doc/APIchunk2.html
@@ -163,6 +163,7 @@
 <a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
 <a href="html/libxml-valid.html#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a><br />
 <a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+<a href="html/libxml-xpath.html#xmlXPathInit">xmlXPathInit</a><br />
 </dd><dt>Douglas</dt><dd><a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
 </dd><dt>Draft</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
 </dd><dt>DtD</dt><dd><a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
diff --git a/doc/APIchunk20.html b/doc/APIchunk20.html
index d16bfcf..3559b08 100644
--- a/doc/APIchunk20.html
+++ b/doc/APIchunk20.html
@@ -146,8 +146,6 @@
 <a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
 </dd><dt>nested</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
-</dd><dt>net</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>network</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtReadFile">htmlCtxtReadFile</a><br />
 <a href="html/libxml-HTMLparser.html#htmlReadFile">htmlReadFile</a><br />
 <a href="html/libxml-parser.html#xmlCtxtReadFile">xmlCtxtReadFile</a><br />
@@ -254,6 +252,7 @@
 <a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
 </dd><dt>note</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
 <a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
+</dd><dt>nothing</dt><dd><a href="html/libxml-xpath.html#xmlXPathInit">xmlXPathInit</a><br />
 </dd><dt>notice</dt><dd><a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
 <a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
 </dd><dt>now</dt><dd><a href="html/libxml-hash.html#XML_CAST_FPTR">XML_CAST_FPTR</a><br />
diff --git a/doc/APIchunk22.html b/doc/APIchunk22.html
index 2f20018..ec9547b 100644
--- a/doc/APIchunk22.html
+++ b/doc/APIchunk22.html
@@ -210,8 +210,6 @@
 <a href="html/libxml-nanoftp.html#SOCKET">SOCKET</a><br />
 <a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
 <a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
-</dd><dt>portable</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>pos</dt><dd><a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
 </dd><dt>position:</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
 </dd><dt>positioned</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
@@ -471,8 +469,6 @@
 <a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
 <a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
 </dd><dt>prohibited</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ATTR_USE_PROHIBITED">XML_SCHEMAS_ATTR_USE_PROHIBITED</a><br />
-</dd><dt>projects</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>prolog</dt><dd><a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
 </dd><dt>prompt</dt><dd><a href="html/libxml-debugXML.html#xmlShellReadlineFunc">xmlShellReadlineFunc</a><br />
 </dd><dt>proper</dt><dd><a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
diff --git a/doc/APIchunk24.html b/doc/APIchunk24.html
index 5b17955..64aac67 100644
--- a/doc/APIchunk24.html
+++ b/doc/APIchunk24.html
@@ -493,8 +493,6 @@
 <a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
 </dd><dt>sourceDoc</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
 <a href="html/libxml-tree.html#xmlDOMWrapCloneNode">xmlDOMWrapCloneNode</a><br />
-</dd><dt>sourceforge</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>spaces</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
 <a href="html/libxml-HTMLtree.html#htmlDocContentDumpFormatOutput">htmlDocContentDumpFormatOutput</a><br />
 <a href="html/libxml-HTMLtree.html#htmlDocContentDumpOutput">htmlDocContentDumpOutput</a><br />
diff --git a/doc/APIchunk25.html b/doc/APIchunk25.html
index dec65ba..71ba3bd 100644
--- a/doc/APIchunk25.html
+++ b/doc/APIchunk25.html
@@ -343,8 +343,6 @@
 <a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
 </dd><dt>trio</dt><dd><a href="html/libxml-xmlversion.html#WITHOUT_TRIO">WITHOUT_TRIO</a><br />
 <a href="html/libxml-xmlversion.html#WITH_TRIO">WITH_TRIO</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>troubles</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
 <a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
 </dd><dt>try</dt><dd><a href="html/libxml-xpathInternals.html#CAST_TO_BOOLEAN">CAST_TO_BOOLEAN</a><br />
diff --git a/doc/APIchunk28.html b/doc/APIchunk28.html
index 3018456..c3f49b2 100644
--- a/doc/APIchunk28.html
+++ b/doc/APIchunk28.html
@@ -198,6 +198,7 @@
 <a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
 <a href="html/libxml-tree.html#xmlGetNsProp">xmlGetNsProp</a><br />
 <a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+<a href="html/libxml-hash.html#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
diff --git a/doc/APIchunk4.html b/doc/APIchunk4.html
index d26883b..6fe8261 100644
--- a/doc/APIchunk4.html
+++ b/doc/APIchunk4.html
@@ -295,7 +295,6 @@
 </dd><dt>Normalization</dt><dd><a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
 </dd><dt>Normalization:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
 </dd><dt>Not</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaElement">_xmlSchemaElement</a><br />
-</dd><dt>NotaNumber</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>Notation</dt><dd><a href="html/libxml-tree.html#_xmlNotation">_xmlNotation</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
diff --git a/doc/APIchunk5.html b/doc/APIchunk5.html
index 44f5d02..98da499 100644
--- a/doc/APIchunk5.html
+++ b/doc/APIchunk5.html
@@ -225,8 +225,6 @@
 <a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNo">xmlTextReaderGetAttributeNo</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNs">xmlTextReaderGetAttributeNs</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderValue">xmlTextReaderValue</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
-<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>Proxy</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
 </dd><dt>Proxy-Authenticate</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a><br />
diff --git a/doc/APIfiles.html b/doc/APIfiles.html
index 2252a6b..8c29c06 100644
--- a/doc/APIfiles.html
+++ b/doc/APIfiles.html
@@ -340,7 +340,8 @@
 <a href="html/libxml-dict.html#xmlDictSetLimit">xmlDictSetLimit</a><br />
 <a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</a><br />
 <a href="html/libxml-dict.html#xmlInitializeDict">xmlInitializeDict</a><br />
-</p><h2><a name="encoding" id="encoding">Module encoding</a>:</h2><p><a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
+</p><h2><a name="encoding" id="encoding">Module encoding</a>:</h2><p><a href="html/libxml-encoding.html#ICU_PIVOT_BUF_SIZE">ICU_PIVOT_BUF_SIZE</a><br />
+<a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
 <a href="html/libxml-encoding.html#XML_CHAR_ENCODING_2022_JP">XML_CHAR_ENCODING_2022_JP</a><br />
 <a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_1">XML_CHAR_ENCODING_8859_1</a><br />
 <a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_2">XML_CHAR_ENCODING_8859_2</a><br />
@@ -493,6 +494,7 @@
 <a href="html/libxml-hash.html#xmlHashCreate">xmlHashCreate</a><br />
 <a href="html/libxml-hash.html#xmlHashCreateDict">xmlHashCreateDict</a><br />
 <a href="html/libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a><br />
+<a href="html/libxml-hash.html#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a><br />
 <a href="html/libxml-hash.html#xmlHashFree">xmlHashFree</a><br />
 <a href="html/libxml-hash.html#xmlHashLookup">xmlHashLookup</a><br />
 <a href="html/libxml-hash.html#xmlHashLookup2">xmlHashLookup2</a><br />
diff --git a/doc/APIfunctions.html b/doc/APIfunctions.html
index caa0a87..c1d172d 100644
--- a/doc/APIfunctions.html
+++ b/doc/APIfunctions.html
@@ -97,8 +97,6 @@
 <a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
 <a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
 </p><h2>Type const void *:</h2><p><a href="html/libxml-list.html#xmlListDataCompare">xmlListDataCompare</a><br />
-<a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
-<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
 <a href="html/libxml-list.html#xmlListWalker">xmlListWalker</a><br />
 </p><h2>Type const xlinkHRef:</h2><p><a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
 </p><h2>Type const xlinkHRef *:</h2><p><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
@@ -249,6 +247,9 @@
 <a href="html/libxml-hash.html#xmlHashAddEntry">xmlHashAddEntry</a><br />
 <a href="html/libxml-hash.html#xmlHashAddEntry2">xmlHashAddEntry2</a><br />
 <a href="html/libxml-hash.html#xmlHashAddEntry3">xmlHashAddEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashCopier">xmlHashCopier</a><br />
+<a href="html/libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a><br />
+<a href="html/libxml-hash.html#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a><br />
 <a href="html/libxml-hash.html#xmlHashLookup">xmlHashLookup</a><br />
 <a href="html/libxml-hash.html#xmlHashLookup2">xmlHashLookup2</a><br />
 <a href="html/libxml-hash.html#xmlHashLookup3">xmlHashLookup3</a><br />
@@ -260,6 +261,7 @@
 <a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
 <a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
 <a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanner">xmlHashScanner</a><br />
 <a href="html/libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a><br />
 <a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
 <a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
@@ -772,6 +774,7 @@
 <a href="html/libxml-hash.html#xmlHashAddEntry3">xmlHashAddEntry3</a><br />
 <a href="html/libxml-hash.html#xmlHashCopier">xmlHashCopier</a><br />
 <a href="html/libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a><br />
+<a href="html/libxml-hash.html#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a><br />
 <a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
 <a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
 <a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
@@ -795,7 +798,10 @@
 <a href="html/libxml-list.html#xmlListRemoveFirst">xmlListRemoveFirst</a><br />
 <a href="html/libxml-list.html#xmlListRemoveLast">xmlListRemoveLast</a><br />
 <a href="html/libxml-list.html#xmlListReverseSearch">xmlListReverseSearch</a><br />
+<a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
 <a href="html/libxml-list.html#xmlListSearch">xmlListSearch</a><br />
+<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
+<a href="html/libxml-list.html#xmlListWalker">xmlListWalker</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMemFree">xmlMemFree</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
 <a href="html/libxml-nanoftp.html#xmlNanoFTPCheckResponse">xmlNanoFTPCheckResponse</a><br />
@@ -1044,9 +1050,6 @@
 <a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
 <a href="html/libxml-parserInternals.html#xmlCopyChar">xmlCopyChar</a><br />
 <a href="html/libxml-parserInternals.html#xmlCopyCharMultiByte">xmlCopyCharMultiByte</a><br />
-<a href="html/libxml-hash.html#xmlHashCopier">xmlHashCopier</a><br />
-<a href="html/libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a><br />
-<a href="html/libxml-hash.html#xmlHashScanner">xmlHashScanner</a><br />
 <a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
 <a href="html/libxml-tree.html#xmlNewNodeEatName">xmlNewNodeEatName</a><br />
 <a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
diff --git a/doc/APIsymbols.html b/doc/APIsymbols.html
index cdde358..a77be6d 100644
--- a/doc/APIsymbols.html
+++ b/doc/APIsymbols.html
@@ -40,7 +40,8 @@
 <a href="html/libxml-HTMLparser.html#HTML_REQUIRED">HTML_REQUIRED</a><br />
 <a href="html/libxml-HTMLtree.html#HTML_TEXT_NODE">HTML_TEXT_NODE</a><br />
 <a href="html/libxml-HTMLparser.html#HTML_VALID">HTML_VALID</a><br />
-</p><h2>Letter I:</h2><p><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
+</p><h2>Letter I:</h2><p><a href="html/libxml-encoding.html#ICU_PIVOT_BUF_SIZE">ICU_PIVOT_BUF_SIZE</a><br />
+<a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
 <a href="html/libxml-nanoftp.html#INVALID_SOCKET">INVALID_SOCKET</a><br />
 <a href="html/libxml-parserInternals.html#IS_ASCII_DIGIT">IS_ASCII_DIGIT</a><br />
 <a href="html/libxml-parserInternals.html#IS_ASCII_LETTER">IS_ASCII_LETTER</a><br />
@@ -2130,6 +2131,7 @@
 <a href="html/libxml-hash.html#xmlHashCreate">xmlHashCreate</a><br />
 <a href="html/libxml-hash.html#xmlHashCreateDict">xmlHashCreateDict</a><br />
 <a href="html/libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a><br />
+<a href="html/libxml-hash.html#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a><br />
 <a href="html/libxml-hash.html#xmlHashFree">xmlHashFree</a><br />
 <a href="html/libxml-hash.html#xmlHashLookup">xmlHashLookup</a><br />
 <a href="html/libxml-hash.html#xmlHashLookup2">xmlHashLookup2</a><br />
diff --git a/doc/devhelp/libxml2-encoding.html b/doc/devhelp/libxml2-encoding.html
index 261e50a..b11fbfb 100644
--- a/doc/devhelp/libxml2-encoding.html
+++ b/doc/devhelp/libxml2-encoding.html
@@ -43,7 +43,8 @@
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">typedef struct _uconv_t <a href="#uconv_t">uconv_t</a>;
+      <pre class="synopsis">#define <a href="#ICU_PIVOT_BUF_SIZE">ICU_PIVOT_BUF_SIZE</a>;
+typedef struct _uconv_t <a href="#uconv_t">uconv_t</a>;
 typedef enum <a href="#xmlCharEncoding">xmlCharEncoding</a>;
 typedef struct _xmlCharEncodingHandler <a href="#xmlCharEncodingHandler">xmlCharEncodingHandler</a>;
 typedef <a href="libxml2-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * <a href="#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a>;
@@ -76,9 +77,16 @@
     <div class="refsect1" lang="en">
       <h2>Details</h2>
       <div class="refsect2" lang="en">
+        <div class="refsect2" lang="en"><h3><a name="ICU_PIVOT_BUF_SIZE">Macro </a>ICU_PIVOT_BUF_SIZE</h3><pre class="programlisting">#define <a href="#ICU_PIVOT_BUF_SIZE">ICU_PIVOT_BUF_SIZE</a>;
+</pre><p/>
+</div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="uconv_t">Structure </a>uconv_t</h3><pre class="programlisting">struct _uconv_t {
     UConverter *	uconv	: for conversion between an encoding and UTF-16
     UConverter *	utf8	: for conversion between UTF-8 and UTF-16
+    UCharpivot_buf[ICU_PIVOT_BUF_SIZE]	pivot_buf
+    UChar *	pivot_source
+    UChar *	pivot_target
 } uconv_t;
 </pre><p/>
 </div>
diff --git a/doc/devhelp/libxml2-hash.html b/doc/devhelp/libxml2-hash.html
index b0de53d..e2dd7ab 100644
--- a/doc/devhelp/libxml2-hash.html
+++ b/doc/devhelp/libxml2-hash.html
@@ -55,8 +55,8 @@
 void *	<a href="#xmlHashQLookup3">xmlHashQLookup3</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix3, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3);
 void *	<a href="#xmlHashQLookup2">xmlHashQLookup2</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2);
 void	<a href="#xmlHashScan3">xmlHashScan3</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br/>					 <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br/>					 void * data);
-typedef void <a href="#xmlHashScanner">xmlHashScanner</a>			(void * payload, <br/>					 void * data, <br/>					 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
-typedef void <a href="#xmlHashDeallocator">xmlHashDeallocator</a>		(void * payload, <br/>					 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
+typedef void <a href="#xmlHashScanner">xmlHashScanner</a>			(void * payload, <br/>					 void * data, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
+typedef void <a href="#xmlHashDeallocator">xmlHashDeallocator</a>		(void * payload, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 <a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	<a href="#xmlHashCreate">xmlHashCreate</a>		(int size);
 void	<a href="#xmlHashFree">xmlHashFree</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f);
 void *	<a href="#xmlHashLookup">xmlHashLookup</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
@@ -67,10 +67,11 @@
 <a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	<a href="#xmlHashCopy">xmlHashCopy</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 <a href="libxml2-hash.html#xmlHashCopier">xmlHashCopier</a> f);
 void	<a href="#xmlHashScanFull3">xmlHashScanFull3</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br/>					 <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br/>					 void * data);
 int	<a href="#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br/>					 void * userdata, <br/>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f);
+void	<a href="#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a>	(void * entry, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 void *	<a href="#xmlHashLookup3">xmlHashLookup3</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3);
 void *	<a href="#xmlHashLookup2">xmlHashLookup2</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2);
 int	<a href="#xmlHashRemoveEntry">xmlHashRemoveEntry</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f);
-typedef void * <a href="#xmlHashCopier">xmlHashCopier</a>			(void * payload, <br/>					 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
+typedef void * <a href="#xmlHashCopier">xmlHashCopier</a>			(void * payload, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 int	<a href="#xmlHashAddEntry2">xmlHashAddEntry2</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br/>					 void * userdata);
 int	<a href="#xmlHashAddEntry3">xmlHashAddEntry3</a>		(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br/>					 void * userdata);
 int	<a href="#xmlHashSize">xmlHashSize</a>			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table);
@@ -96,15 +97,15 @@
 </pre><p/>
 </div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlHashCopier"/>Function type xmlHashCopier</h3><pre class="programlisting">void *	xmlHashCopier			(void * payload, <br/>					 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlHashCopier"/>Function type xmlHashCopier</h3><pre class="programlisting">void *	xmlHashCopier			(void * payload, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
 </pre><p>Callback to copy data from a hash.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>payload</tt></i>:</span></td><td>the data in the hash</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name associated</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a copy of the data or NULL in case of error.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlHashDeallocator"/>Function type xmlHashDeallocator</h3><pre class="programlisting">void	xmlHashDeallocator		(void * payload, <br/>					 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlHashDeallocator"/>Function type xmlHashDeallocator</h3><pre class="programlisting">void	xmlHashDeallocator		(void * payload, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
 </pre><p>Callback to free data from a hash.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>payload</tt></i>:</span></td><td>the data in the hash</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name associated</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlHashScanner"/>Function type xmlHashScanner</h3><pre class="programlisting">void	xmlHashScanner			(void * payload, <br/>					 void * data, <br/>					 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlHashScanner"/>Function type xmlHashScanner</h3><pre class="programlisting">void	xmlHashScanner			(void * payload, <br/>					 void * data, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
 </pre><p>Callback when scanning data in a hash with the simple scanner.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>payload</tt></i>:</span></td><td>the data in the hash</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>extra scannner data</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name associated</td></tr></tbody></table></div></div>
         <hr/>
@@ -136,6 +137,10 @@
 </pre><p>Create a new <a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> which will use @dict as the internal dictionary</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the size of the hash table</td></tr><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>a dictionary to use for the hash</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object, or NULL if an error occurred.</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlHashDefaultDeallocator"/>xmlHashDefaultDeallocator ()</h3><pre class="programlisting">void	xmlHashDefaultDeallocator	(void * entry, <br/>					 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
+</pre><p>Free a hash table entry with xmlFree.</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>entry</tt></i>:</span></td><td>the hash table entry</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entry's name</td></tr></tbody></table></div></div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlHashFree"/>xmlHashFree ()</h3><pre class="programlisting">void	xmlHashFree			(<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br/>					 <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br/>
 </pre><p>Free the hash @table and its contents. The userdata is deallocated with @f if provided.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the deallocator function for items in the hash</td></tr></tbody></table></div></div>
diff --git a/doc/devhelp/libxml2-list.html b/doc/devhelp/libxml2-list.html
index 8019c23..0ae2f11 100644
--- a/doc/devhelp/libxml2-list.html
+++ b/doc/devhelp/libxml2-list.html
@@ -55,14 +55,14 @@
 <a href="libxml2-list.html#xmlListPtr">xmlListPtr</a>	<a href="#xmlListCreate">xmlListCreate</a>		(<a href="libxml2-list.html#xmlListDeallocator">xmlListDeallocator</a> deallocator, <br/>					 <a href="libxml2-list.html#xmlListDataCompare">xmlListDataCompare</a> compare);
 <a href="libxml2-list.html#xmlListPtr">xmlListPtr</a>	<a href="#xmlListDup">xmlListDup</a>		(const <a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> old);
 int	<a href="#xmlListRemoveLast">xmlListRemoveLast</a>		(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 void * data);
-void	<a href="#xmlListWalk">xmlListWalk</a>			(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 <a href="libxml2-list.html#xmlListWalker">xmlListWalker</a> walker, <br/>					 const void * user);
+void	<a href="#xmlListWalk">xmlListWalk</a>			(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 <a href="libxml2-list.html#xmlListWalker">xmlListWalker</a> walker, <br/>					 void * user);
 int	<a href="#xmlListRemoveAll">xmlListRemoveAll</a>		(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 void * data);
 int	<a href="#xmlListCopy">xmlListCopy</a>			(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> cur, <br/>					 const <a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> old);
 void	<a href="#xmlListPopFront">xmlListPopFront</a>			(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l);
 void *	<a href="#xmlListSearch">xmlListSearch</a>			(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 void * data);
-typedef int <a href="#xmlListWalker">xmlListWalker</a>			(const void * data, <br/>					 const void * user);
+typedef int <a href="#xmlListWalker">xmlListWalker</a>			(const void * data, <br/>					 void * user);
 int	<a href="#xmlListRemoveFirst">xmlListRemoveFirst</a>		(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 void * data);
-void	<a href="#xmlListReverseWalk">xmlListReverseWalk</a>		(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 <a href="libxml2-list.html#xmlListWalker">xmlListWalker</a> walker, <br/>					 const void * user);
+void	<a href="#xmlListReverseWalk">xmlListReverseWalk</a>		(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 <a href="libxml2-list.html#xmlListWalker">xmlListWalker</a> walker, <br/>					 void * user);
 void *	<a href="#xmlLinkGetData">xmlLinkGetData</a>			(<a href="libxml2-list.html#xmlLinkPtr">xmlLinkPtr</a> lk);
 void	<a href="#xmlListClear">xmlListClear</a>			(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l);
 int	<a href="#xmlListAppend">xmlListAppend</a>			(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 void * data);
@@ -112,7 +112,7 @@
 </pre><p>Callback function used to free data from a list.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>lk</tt></i>:</span></td><td>the data to deallocate</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlListWalker"/>Function type xmlListWalker</h3><pre class="programlisting">int	xmlListWalker			(const void * data, <br/>					 const void * user)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlListWalker"/>Function type xmlListWalker</h3><pre class="programlisting">int	xmlListWalker			(const void * data, <br/>					 void * user)<br/>
 </pre><p>Callback function used when walking a list with xmlListWalk().</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the data found in the list</td></tr><tr><td><span class="term"><i><tt>user</tt></i>:</span></td><td>extra user provided data to the walker</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 to stop walking the list, 1 otherwise.</td></tr></tbody></table></div></div>
         <hr/>
@@ -200,7 +200,7 @@
 </pre><p>Search the list in reverse order for an existing value of @data</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>a search value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the value associated to @data or NULL in case of error</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlListReverseWalk"/>xmlListReverseWalk ()</h3><pre class="programlisting">void	xmlListReverseWalk		(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 <a href="libxml2-list.html#xmlListWalker">xmlListWalker</a> walker, <br/>					 const void * user)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlListReverseWalk"/>xmlListReverseWalk ()</h3><pre class="programlisting">void	xmlListReverseWalk		(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 <a href="libxml2-list.html#xmlListWalker">xmlListWalker</a> walker, <br/>					 void * user)<br/>
 </pre><p>Walk all the element of the list in reverse order and apply the walker function to it</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>walker</tt></i>:</span></td><td>a processing function</td></tr><tr><td><span class="term"><i><tt>user</tt></i>:</span></td><td>a user parameter passed to the walker function</td></tr></tbody></table></div></div>
         <hr/>
@@ -216,7 +216,7 @@
 </pre><p>Sort all the elements in the list</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlListWalk"/>xmlListWalk ()</h3><pre class="programlisting">void	xmlListWalk			(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 <a href="libxml2-list.html#xmlListWalker">xmlListWalker</a> walker, <br/>					 const void * user)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlListWalk"/>xmlListWalk ()</h3><pre class="programlisting">void	xmlListWalk			(<a href="libxml2-list.html#xmlListPtr">xmlListPtr</a> l, <br/>					 <a href="libxml2-list.html#xmlListWalker">xmlListWalker</a> walker, <br/>					 void * user)<br/>
 </pre><p>Walk all the element of the first from first to last and apply the walker function to it</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>walker</tt></i>:</span></td><td>a processing function</td></tr><tr><td><span class="term"><i><tt>user</tt></i>:</span></td><td>a user parameter passed to the walker function</td></tr></tbody></table></div></div>
         <hr/>
diff --git a/doc/devhelp/libxml2-xpath.html b/doc/devhelp/libxml2-xpath.html
index 6a40682..edf7643 100644
--- a/doc/devhelp/libxml2-xpath.html
+++ b/doc/devhelp/libxml2-xpath.html
@@ -501,15 +501,15 @@
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>obj</tt></i>:</span></td><td>the object to free</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlXPathInit"/>xmlXPathInit ()</h3><pre class="programlisting">void	xmlXPathInit			(void)<br/>
-</pre><p>Initialize the XPath environment</p>
+</pre><p>Initialize the XPath environment Does nothing but must be kept as public function.</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlXPathIsInf"/>xmlXPathIsInf ()</h3><pre class="programlisting">int	xmlXPathIsInf			(double val)<br/>
-</pre><p>Provides a portable isinf() function to detect whether a double is a +Infinite or -Infinite. Based on trio code http://sourceforge.net/projects/ctrio/</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a double value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise</td></tr></tbody></table></div></div>
+</pre><p/>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a double value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the value is +Infinite, -1 if -Infinite, 0 otherwise</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlXPathIsNaN"/>xmlXPathIsNaN ()</h3><pre class="programlisting">int	xmlXPathIsNaN			(double val)<br/>
-</pre><p>Provides a portable isnan() function to detect whether a double is a NotaNumber. Based on trio code http://sourceforge.net/projects/ctrio/</p>
+</pre><p/>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a double value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the value is a NaN, 0 otherwise</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlXPathNewContext"/>xmlXPathNewContext ()</h3><pre class="programlisting"><a href="libxml2-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a>	xmlXPathNewContext	(<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br/>
diff --git a/doc/devhelp/libxml2.devhelp b/doc/devhelp/libxml2.devhelp
index fbd3ad4..575b222 100644
--- a/doc/devhelp/libxml2.devhelp
+++ b/doc/devhelp/libxml2.devhelp
@@ -70,6 +70,7 @@
     <function name="HTML_PI_NODE" link="libxml2-HTMLtree.html#HTML_PI_NODE"/>
     <function name="HTML_PRESERVE_NODE" link="libxml2-HTMLtree.html#HTML_PRESERVE_NODE"/>
     <function name="HTML_TEXT_NODE" link="libxml2-HTMLtree.html#HTML_TEXT_NODE"/>
+    <function name="ICU_PIVOT_BUF_SIZE" link="libxml2-encoding.html#ICU_PIVOT_BUF_SIZE"/>
     <function name="INPUT_CHUNK" link="libxml2-parserInternals.html#INPUT_CHUNK"/>
     <function name="INVALID_SOCKET" link="libxml2-nanoftp.html#INVALID_SOCKET"/>
     <function name="IS_ASCII_DIGIT" link="libxml2-parserInternals.html#IS_ASCII_DIGIT"/>
@@ -2389,6 +2390,7 @@
     <function name="xmlHashCopy ()" link="libxml2-hash.html#xmlHashCopy"/>
     <function name="xmlHashCreate ()" link="libxml2-hash.html#xmlHashCreate"/>
     <function name="xmlHashCreateDict ()" link="libxml2-hash.html#xmlHashCreateDict"/>
+    <function name="xmlHashDefaultDeallocator ()" link="libxml2-hash.html#xmlHashDefaultDeallocator"/>
     <function name="xmlHashFree ()" link="libxml2-hash.html#xmlHashFree"/>
     <function name="xmlHashLookup ()" link="libxml2-hash.html#xmlHashLookup"/>
     <function name="xmlHashLookup2 ()" link="libxml2-hash.html#xmlHashLookup2"/>
diff --git a/doc/html/libxml-encoding.html b/doc/html/libxml-encoding.html
index 70f56f8..0ebfb14 100644
--- a/doc/html/libxml-encoding.html
+++ b/doc/html/libxml-encoding.html
@@ -10,7 +10,7 @@
 </style><style type="text/css">
       div.deprecated pre.programlisting {border-style: double;border-color:red}
       pre.programlisting {border-style: double;background: #EECFA1}
-    </style><title>Module encoding from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module encoding from libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="libxml-dict.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-dict.html">dict</a></th><td><a accesskey="u" href="index.html"><img src="up.png" width="24" height="24" border="0" alt="Up" /></a></td><th align="left"><a href="index.html">API documentation</a></th><td><a accesskey="h" href="../index.html"><img src="home.png" width="24" height="24" border="0" alt="Home" /></a></td><th align="center"><a href="../index.html">The XML C parser and toolkit of Gnome</a></th><th align="right"><a href="libxml-entities.html">entities</a></th><td><a accesskey="n" href="libxml-entities.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>interface for the encoding conversion functions needed for XML basic encoding and iconv() support.  Related specs are rfc2044        (UTF-8 and UTF-16) F. Yergeau Alis Technologies [ISO-10646]    UTF-8 and UTF-16 in Annexes [ISO-8859-1]   ISO Latin-1 characters codes. [UNICODE]      The Unicode Consortium, "The Unicode Standard -- Worldwide Character Encoding -- Version 1.0", Addison- Wesley, Volume 1, 1991, Volume 2, 1992.  UTF-8 is described in Unicode Technical Report #4. [US-ASCII]     Coded Character Set--7-bit American Standard Code for Information Interchange, ANSI X3.4-1986. </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#uconv_t">uconv_t</a><br />struct _uconv_t
+    </style><title>Module encoding from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module encoding from libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="libxml-dict.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-dict.html">dict</a></th><td><a accesskey="u" href="index.html"><img src="up.png" width="24" height="24" border="0" alt="Up" /></a></td><th align="left"><a href="index.html">API documentation</a></th><td><a accesskey="h" href="../index.html"><img src="home.png" width="24" height="24" border="0" alt="Home" /></a></td><th align="center"><a href="../index.html">The XML C parser and toolkit of Gnome</a></th><th align="right"><a href="libxml-entities.html">entities</a></th><td><a accesskey="n" href="libxml-entities.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>interface for the encoding conversion functions needed for XML basic encoding and iconv() support.  Related specs are rfc2044        (UTF-8 and UTF-16) F. Yergeau Alis Technologies [ISO-10646]    UTF-8 and UTF-16 in Annexes [ISO-8859-1]   ISO Latin-1 characters codes. [UNICODE]      The Unicode Consortium, "The Unicode Standard -- Worldwide Character Encoding -- Version 1.0", Addison- Wesley, Volume 1, 1991, Volume 2, 1992.  UTF-8 is described in Unicode Technical Report #4. [US-ASCII]     Coded Character Set--7-bit American Standard Code for Information Interchange, ANSI X3.4-1986. </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#ICU_PIVOT_BUF_SIZE">ICU_PIVOT_BUF_SIZE</a></pre><pre class="programlisting">Structure <a href="#uconv_t">uconv_t</a><br />struct _uconv_t
 </pre><pre class="programlisting">Enum <a href="#xmlCharEncoding">xmlCharEncoding</a>
 </pre><pre class="programlisting">Structure <a href="#xmlCharEncodingHandler">xmlCharEncodingHandler</a><br />struct _xmlCharEncodingHandler
 </pre><pre class="programlisting">Typedef <a href="libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * <a name="xmlCharEncodingHandlerPtr" id="xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a>
@@ -40,9 +40,13 @@
 <pre class="programlisting"><a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a>	<a href="#xmlParseCharEncoding">xmlParseCharEncoding</a>	(const char * name)</pre>
 <pre class="programlisting">void	<a href="#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a>	(<a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> handler)</pre>
 <h2>Description</h2>
+<h3><a name="ICU_PIVOT_BUF_SIZE" id="ICU_PIVOT_BUF_SIZE"></a>Macro: ICU_PIVOT_BUF_SIZE</h3><pre>#define ICU_PIVOT_BUF_SIZE</pre><p></p>
 <h3><a name="uconv_t" id="uconv_t">Structure uconv_t</a></h3><pre class="programlisting">Structure uconv_t<br />struct _uconv_t {
     UConverter *	uconv	: for conversion between an encoding and
     UConverter *	utf8	: for conversion between UTF-8 and UTF-16
+    UCharpivot_buf[ICU_PIVOT_BUF_SIZE]	pivot_buf
+    UChar *	pivot_source
+    UChar *	pivot_target
 }</pre><h3>Enum <a name="xmlCharEncoding" id="xmlCharEncoding">xmlCharEncoding</a></h3><pre class="programlisting">Enum xmlCharEncoding {
     <a name="XML_CHAR_ENCODING_ERROR" id="XML_CHAR_ENCODING_ERROR">XML_CHAR_ENCODING_ERROR</a> = -1 : No char encoding detected
     <a name="XML_CHAR_ENCODING_NONE" id="XML_CHAR_ENCODING_NONE">XML_CHAR_ENCODING_NONE</a> = 0 : No char encoding detected
diff --git a/doc/html/libxml-hash.html b/doc/html/libxml-hash.html
index f3e4a4a..021adb8 100644
--- a/doc/html/libxml-hash.html
+++ b/doc/html/libxml-hash.html
@@ -17,14 +17,15 @@
 <pre class="programlisting">int	<a href="#xmlHashAddEntry2">xmlHashAddEntry2</a>		(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br />					 void * userdata)</pre>
 <pre class="programlisting">int	<a href="#xmlHashAddEntry3">xmlHashAddEntry3</a>		(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br />					 void * userdata)</pre>
 <pre class="programlisting">Function type: <a href="#xmlHashCopier">xmlHashCopier</a>
-void *	<a href="#xmlHashCopier">xmlHashCopier</a>			(void * payload, <br />					 <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+void *	<a href="#xmlHashCopier">xmlHashCopier</a>			(void * payload, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
 </pre>
 <pre class="programlisting"><a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	<a href="#xmlHashCopy">xmlHashCopy</a>		(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 <a href="libxml-hash.html#xmlHashCopier">xmlHashCopier</a> f)</pre>
 <pre class="programlisting"><a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	<a href="#xmlHashCreate">xmlHashCreate</a>		(int size)</pre>
 <pre class="programlisting"><a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	<a href="#xmlHashCreateDict">xmlHashCreateDict</a>	(int size, <br />					 <a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)</pre>
 <pre class="programlisting">Function type: <a href="#xmlHashDeallocator">xmlHashDeallocator</a>
-void	<a href="#xmlHashDeallocator">xmlHashDeallocator</a>		(void * payload, <br />					 <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+void	<a href="#xmlHashDeallocator">xmlHashDeallocator</a>		(void * payload, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
 </pre>
+<pre class="programlisting">void	<a href="#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a>	(void * entry, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
 <pre class="programlisting">void	<a href="#xmlHashFree">xmlHashFree</a>			(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)</pre>
 <pre class="programlisting">void *	<a href="#xmlHashLookup">xmlHashLookup</a>			(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
 <pre class="programlisting">void *	<a href="#xmlHashLookup2">xmlHashLookup2</a>			(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2)</pre>
@@ -40,7 +41,7 @@
 <pre class="programlisting">void	<a href="#xmlHashScanFull">xmlHashScanFull</a>			(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 <a href="libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br />					 void * data)</pre>
 <pre class="programlisting">void	<a href="#xmlHashScanFull3">xmlHashScanFull3</a>		(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br />					 <a href="libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br />					 void * data)</pre>
 <pre class="programlisting">Function type: <a href="#xmlHashScanner">xmlHashScanner</a>
-void	<a href="#xmlHashScanner">xmlHashScanner</a>			(void * payload, <br />					 void * data, <br />					 <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+void	<a href="#xmlHashScanner">xmlHashScanner</a>			(void * payload, <br />					 void * data, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
 </pre>
 <pre class="programlisting">Function type: <a href="#xmlHashScannerFull">xmlHashScannerFull</a>
 void	<a href="#xmlHashScannerFull">xmlHashScannerFull</a>		(void * payload, <br />					 void * data, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3)
@@ -60,7 +61,7 @@
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>userdata</tt></i>:</span></td><td>a pointer to the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 the addition succeeded and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlHashAddEntry3" id="xmlHashAddEntry3"></a>Function: xmlHashAddEntry3</h3><pre class="programlisting">int	xmlHashAddEntry3		(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br />					 void * userdata)<br />
 </pre><p>Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Duplicate entries generate errors.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>name3</tt></i>:</span></td><td>a third name of the userdata</td></tr><tr><td><span class="term"><i><tt>userdata</tt></i>:</span></td><td>a pointer to the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 the addition succeeded and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlHashCopier" id="xmlHashCopier"></a>Function type: xmlHashCopier</h3><pre class="programlisting">Function type: xmlHashCopier
-void *	xmlHashCopier			(void * payload, <br />					 <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+void *	xmlHashCopier			(void * payload, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
 </pre><p>Callback to copy data from a hash.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>payload</tt></i>:</span></td><td>the data in the hash</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name associated</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a copy of the data or NULL in case of error.</td></tr></tbody></table></div><br />
 <h3><a name="xmlHashCopy" id="xmlHashCopy"></a>Function: xmlHashCopy</h3><pre class="programlisting"><a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	xmlHashCopy		(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 <a href="libxml-hash.html#xmlHashCopier">xmlHashCopier</a> f)<br />
 </pre><p>Scan the hash @table and applied @f to each value.</p>
@@ -69,9 +70,11 @@
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the size of the hash table</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object, or NULL if an error occurred.</td></tr></tbody></table></div><h3><a name="xmlHashCreateDict" id="xmlHashCreateDict"></a>Function: xmlHashCreateDict</h3><pre class="programlisting"><a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>	xmlHashCreateDict	(int size, <br />					 <a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
 </pre><p>Create a new <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> which will use @dict as the internal dictionary</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the size of the hash table</td></tr><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>a dictionary to use for the hash</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object, or NULL if an error occurred.</td></tr></tbody></table></div><h3><a name="xmlHashDeallocator" id="xmlHashDeallocator"></a>Function type: xmlHashDeallocator</h3><pre class="programlisting">Function type: xmlHashDeallocator
-void	xmlHashDeallocator		(void * payload, <br />					 <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+void	xmlHashDeallocator		(void * payload, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
 </pre><p>Callback to free data from a hash.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>payload</tt></i>:</span></td><td>the data in the hash</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name associated</td></tr></tbody></table></div><br />
-<h3><a name="xmlHashFree" id="xmlHashFree"></a>Function: xmlHashFree</h3><pre class="programlisting">void	xmlHashFree			(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br />
+<h3><a name="xmlHashDefaultDeallocator" id="xmlHashDefaultDeallocator"></a>Function: xmlHashDefaultDeallocator</h3><pre class="programlisting">void	xmlHashDefaultDeallocator	(void * entry, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Free a hash table entry with xmlFree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>entry</tt></i>:</span></td><td>the hash table entry</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entry's name</td></tr></tbody></table></div><h3><a name="xmlHashFree" id="xmlHashFree"></a>Function: xmlHashFree</h3><pre class="programlisting">void	xmlHashFree			(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br />
 </pre><p>Free the hash @table and its contents. The userdata is deallocated with @f if provided.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the deallocator function for items in the hash</td></tr></tbody></table></div><h3><a name="xmlHashLookup" id="xmlHashLookup"></a>Function: xmlHashLookup</h3><pre class="programlisting">void *	xmlHashLookup			(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
 </pre><p>Find the userdata specified by the @name.</p>
@@ -100,7 +103,7 @@
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the scanner function for items in the hash</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>extra data passed to f</td></tr></tbody></table></div><h3><a name="xmlHashScanFull3" id="xmlHashScanFull3"></a>Function: xmlHashScanFull3</h3><pre class="programlisting">void	xmlHashScanFull3		(<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br />					 <a href="libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br />					 void * data)<br />
 </pre><p>Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata or NULL</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata or NULL</td></tr><tr><td><span class="term"><i><tt>name3</tt></i>:</span></td><td>a third name of the userdata or NULL</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the scanner function for items in the hash</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>extra data passed to f</td></tr></tbody></table></div><h3><a name="xmlHashScanner" id="xmlHashScanner"></a>Function type: xmlHashScanner</h3><pre class="programlisting">Function type: xmlHashScanner
-void	xmlHashScanner			(void * payload, <br />					 void * data, <br />					 <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+void	xmlHashScanner			(void * payload, <br />					 void * data, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
 </pre><p>Callback when scanning data in a hash with the simple scanner.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>payload</tt></i>:</span></td><td>the data in the hash</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>extra scannner data</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name associated</td></tr></tbody></table></div><br />
 <h3><a name="xmlHashScannerFull" id="xmlHashScannerFull"></a>Function type: xmlHashScannerFull</h3><pre class="programlisting">Function type: xmlHashScannerFull
 void	xmlHashScannerFull		(void * payload, <br />					 void * data, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3)
diff --git a/doc/html/libxml-list.html b/doc/html/libxml-list.html
index f6b6c5b..1738afc 100644
--- a/doc/html/libxml-list.html
+++ b/doc/html/libxml-list.html
@@ -43,13 +43,13 @@
 <pre class="programlisting">int	<a href="#xmlListRemoveLast">xmlListRemoveLast</a>		(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 void * data)</pre>
 <pre class="programlisting">void	<a href="#xmlListReverse">xmlListReverse</a>			(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
 <pre class="programlisting">void *	<a href="#xmlListReverseSearch">xmlListReverseSearch</a>		(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 void * data)</pre>
-<pre class="programlisting">void	<a href="#xmlListReverseWalk">xmlListReverseWalk</a>		(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br />					 const void * user)</pre>
+<pre class="programlisting">void	<a href="#xmlListReverseWalk">xmlListReverseWalk</a>		(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br />					 void * user)</pre>
 <pre class="programlisting">void *	<a href="#xmlListSearch">xmlListSearch</a>			(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 void * data)</pre>
 <pre class="programlisting">int	<a href="#xmlListSize">xmlListSize</a>			(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
 <pre class="programlisting">void	<a href="#xmlListSort">xmlListSort</a>			(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
-<pre class="programlisting">void	<a href="#xmlListWalk">xmlListWalk</a>			(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br />					 const void * user)</pre>
+<pre class="programlisting">void	<a href="#xmlListWalk">xmlListWalk</a>			(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br />					 void * user)</pre>
 <pre class="programlisting">Function type: <a href="#xmlListWalker">xmlListWalker</a>
-int	<a href="#xmlListWalker">xmlListWalker</a>			(const void * data, <br />					 const void * user)
+int	<a href="#xmlListWalker">xmlListWalker</a>			(const void * data, <br />					 void * user)
 </pre>
 <h2>Description</h2>
 <h3><a name="xmlLink" id="xmlLink">Structure xmlLink</a></h3><pre class="programlisting">Structure xmlLink<br />struct _xmlLink {
@@ -104,7 +104,7 @@
 </pre><p>Reverse the order of the elements in the list</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr></tbody></table></div><h3><a name="xmlListReverseSearch" id="xmlListReverseSearch"></a>Function: xmlListReverseSearch</h3><pre class="programlisting">void *	xmlListReverseSearch		(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 void * data)<br />
 </pre><p>Search the list in reverse order for an existing value of @data</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>a search value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the value associated to @data or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlListReverseWalk" id="xmlListReverseWalk"></a>Function: xmlListReverseWalk</h3><pre class="programlisting">void	xmlListReverseWalk		(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br />					 const void * user)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>a search value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the value associated to @data or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlListReverseWalk" id="xmlListReverseWalk"></a>Function: xmlListReverseWalk</h3><pre class="programlisting">void	xmlListReverseWalk		(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br />					 void * user)<br />
 </pre><p>Walk all the element of the list in reverse order and apply the walker function to it</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>walker</tt></i>:</span></td><td>a processing function</td></tr><tr><td><span class="term"><i><tt>user</tt></i>:</span></td><td>a user parameter passed to the walker function</td></tr></tbody></table></div><h3><a name="xmlListSearch" id="xmlListSearch"></a>Function: xmlListSearch</h3><pre class="programlisting">void *	xmlListSearch			(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 void * data)<br />
 </pre><p>Search the list for an existing value of @data</p>
@@ -112,9 +112,9 @@
 </pre><p>Get the number of elements in the list</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements in the list or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlListSort" id="xmlListSort"></a>Function: xmlListSort</h3><pre class="programlisting">void	xmlListSort			(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
 </pre><p>Sort all the elements in the list</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr></tbody></table></div><h3><a name="xmlListWalk" id="xmlListWalk"></a>Function: xmlListWalk</h3><pre class="programlisting">void	xmlListWalk			(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br />					 const void * user)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr></tbody></table></div><h3><a name="xmlListWalk" id="xmlListWalk"></a>Function: xmlListWalk</h3><pre class="programlisting">void	xmlListWalk			(<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br />					 <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br />					 void * user)<br />
 </pre><p>Walk all the element of the first from first to last and apply the walker function to it</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>walker</tt></i>:</span></td><td>a processing function</td></tr><tr><td><span class="term"><i><tt>user</tt></i>:</span></td><td>a user parameter passed to the walker function</td></tr></tbody></table></div><h3><a name="xmlListWalker" id="xmlListWalker"></a>Function type: xmlListWalker</h3><pre class="programlisting">Function type: xmlListWalker
-int	xmlListWalker			(const void * data, <br />					 const void * user)
+int	xmlListWalker			(const void * data, <br />					 void * user)
 </pre><p>Callback function used when walking a list with xmlListWalk().</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the data found in the list</td></tr><tr><td><span class="term"><i><tt>user</tt></i>:</span></td><td>extra user provided data to the walker</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 to stop walking the list, 1 otherwise.</td></tr></tbody></table></div><br />
 <p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-xpath.html b/doc/html/libxml-xpath.html
index d22ab9f..482a983 100644
--- a/doc/html/libxml-xpath.html
+++ b/doc/html/libxml-xpath.html
@@ -293,11 +293,11 @@
 void	xmlXPathFunction		(<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br />					 int nargs)
 </pre><p>An XPath function. The arguments (if any) are popped out from the context stack and the result is pushed on the stack.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the XPath interprestation context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><br />
 <h3><a name="xmlXPathInit" id="xmlXPathInit"></a>Function: xmlXPathInit</h3><pre class="programlisting">void	xmlXPathInit			(void)<br />
-</pre><p>Initialize the XPath environment</p>
+</pre><p>Initialize the XPath environment Does nothing but must be kept as public function.</p>
 <h3><a name="xmlXPathIsInf" id="xmlXPathIsInf"></a>Function: xmlXPathIsInf</h3><pre class="programlisting">int	xmlXPathIsInf			(double val)<br />
-</pre><p>Provides a portable isinf() function to detect whether a double is a +Infinite or -Infinite. Based on trio code http://sourceforge.net/projects/ctrio/</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a double value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathIsNaN" id="xmlXPathIsNaN"></a>Function: xmlXPathIsNaN</h3><pre class="programlisting">int	xmlXPathIsNaN			(double val)<br />
-</pre><p>Provides a portable isnan() function to detect whether a double is a NotaNumber. Based on trio code http://sourceforge.net/projects/ctrio/</p>
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a double value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the value is +Infinite, -1 if -Infinite, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathIsNaN" id="xmlXPathIsNaN"></a>Function: xmlXPathIsNaN</h3><pre class="programlisting">int	xmlXPathIsNaN			(double val)<br />
+</pre><p></p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a double value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the value is a NaN, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathNewContext" id="xmlXPathNewContext"></a>Function: xmlXPathNewContext</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a>	xmlXPathNewContext	(<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
 </pre><p>Create a new <a href="libxml-xpath.html#xmlXPathContext">xmlXPathContext</a></p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the XML document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathContext">xmlXPathContext</a> just allocated. The caller will need to free it.</td></tr></tbody></table></div><h3><a name="xmlXPathNodeEval" id="xmlXPathNodeEval"></a>Function: xmlXPathNodeEval</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>	xmlXPathNodeEval	(<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />						 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br />						 <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)<br />
diff --git a/doc/libxml2-api.xml b/doc/libxml2-api.xml
index ab74ee0..9cf6c72 100644
--- a/doc/libxml2-api.xml
+++ b/doc/libxml2-api.xml
@@ -390,6 +390,7 @@
      <summary>interface for the encoding conversion functions</summary>
      <description>interface for the encoding conversion functions needed for XML basic encoding and iconv() support.  Related specs are rfc2044        (UTF-8 and UTF-16) F. Yergeau Alis Technologies [ISO-10646]    UTF-8 and UTF-16 in Annexes [ISO-8859-1]   ISO Latin-1 characters codes. [UNICODE]      The Unicode Consortium, &quot;The Unicode Standard -- Worldwide Character Encoding -- Version 1.0&quot;, Addison- Wesley, Volume 1, 1991, Volume 2, 1992.  UTF-8 is described in Unicode Technical Report #4. [US-ASCII]     Coded Character Set--7-bit American Standard Code for Information Interchange, ANSI X3.4-1986. </description>
      <author>Daniel Veillard </author>
+     <exports symbol='ICU_PIVOT_BUF_SIZE' type='macro'/>
      <exports symbol='XML_CHAR_ENCODING_UCS4LE' type='enum'/>
      <exports symbol='XML_CHAR_ENCODING_ERROR' type='enum'/>
      <exports symbol='XML_CHAR_ENCODING_8859_5' type='enum'/>
@@ -573,6 +574,7 @@
      <exports symbol='xmlHashCopy' type='function'/>
      <exports symbol='xmlHashScanFull3' type='function'/>
      <exports symbol='xmlHashUpdateEntry3' type='function'/>
+     <exports symbol='xmlHashDefaultDeallocator' type='function'/>
      <exports symbol='xmlHashLookup3' type='function'/>
      <exports symbol='xmlHashLookup2' type='function'/>
      <exports symbol='xmlHashRemoveEntry' type='function'/>
@@ -3878,6 +3880,8 @@
     <macro name='HTML_TEXT_NODE' file='HTMLtree'>
       <info>Macro. A text node in a HTML document is really implemented the same way as a text node in an XML document.</info>
     </macro>
+    <macro name='ICU_PIVOT_BUF_SIZE' file='encoding'>
+    </macro>
     <macro name='INPUT_CHUNK' file='parserInternals'>
       <info>The parser tries to always have that amount of input ready. One of the point is providing context when reporting errors.</info>
     </macro>
@@ -5961,6 +5965,9 @@
     <struct name='uconv_t' file='encoding' type='struct _uconv_t'>
       <field name='uconv' type='UConverter *' info=' for conversion between an encoding and UTF-16'/>
       <field name='utf8' type='UConverter *' info=' for conversion between UTF-8 and UTF-16'/>
+      <field name='pivot_buf' type='UCharpivot_buf[ICU_PIVOT_BUF_SIZE]' info=''/>
+      <field name='pivot_source' type='UChar *' info=''/>
+      <field name='pivot_target' type='UChar *' info=''/>
     </struct>
     <typedef name='xlinkActuate' file='xlink' type='enum'/>
     <typedef name='xlinkHRef' file='xlink' type='xmlChar *'/>
@@ -10352,7 +10359,7 @@
       <info>Callback to copy data from a hash.</info>
       <return type='void *' info='a copy of the data or NULL in case of error.'/>
       <arg name='payload' type='void *' info='the data in the hash'/>
-      <arg name='name' type='xmlChar *' info='the name associated'/>
+      <arg name='name' type='const xmlChar *' info='the name associated'/>
     </functype>
     <function name='xmlHashCopy' file='hash' module='hash'>
       <info>Scan the hash @table and applied @f to each value.</info>
@@ -10375,8 +10382,14 @@
       <info>Callback to free data from a hash.</info>
       <return type='void'/>
       <arg name='payload' type='void *' info='the data in the hash'/>
-      <arg name='name' type='xmlChar *' info='the name associated'/>
+      <arg name='name' type='const xmlChar *' info='the name associated'/>
     </functype>
+    <function name='xmlHashDefaultDeallocator' file='hash' module='hash'>
+      <info>Free a hash table entry with xmlFree.</info>
+      <return type='void'/>
+      <arg name='entry' type='void *' info='the hash table entry'/>
+      <arg name='name' type='const xmlChar *' info='the entry&apos;s name'/>
+    </function>
     <function name='xmlHashFree' file='hash' module='hash'>
       <info>Free the hash @table and its contents. The userdata is deallocated with @f if provided.</info>
       <return type='void'/>
@@ -10494,7 +10507,7 @@
       <return type='void'/>
       <arg name='payload' type='void *' info='the data in the hash'/>
       <arg name='data' type='void *' info='extra scannner data'/>
-      <arg name='name' type='xmlChar *' info='the name associated'/>
+      <arg name='name' type='const xmlChar *' info='the name associated'/>
     </functype>
     <functype name='xmlHashScannerFull' file='hash' module='hash'>
       <info>Callback when scanning data in a hash with the full scanner.</info>
@@ -10903,7 +10916,7 @@
       <return type='void'/>
       <arg name='l' type='xmlListPtr' info='a list'/>
       <arg name='walker' type='xmlListWalker' info='a processing function'/>
-      <arg name='user' type='const void *' info='a user parameter passed to the walker function'/>
+      <arg name='user' type='void *' info='a user parameter passed to the walker function'/>
     </function>
     <function name='xmlListSearch' file='list' module='list'>
       <info>Search the list for an existing value of @data</info>
@@ -10926,13 +10939,13 @@
       <return type='void'/>
       <arg name='l' type='xmlListPtr' info='a list'/>
       <arg name='walker' type='xmlListWalker' info='a processing function'/>
-      <arg name='user' type='const void *' info='a user parameter passed to the walker function'/>
+      <arg name='user' type='void *' info='a user parameter passed to the walker function'/>
     </function>
     <functype name='xmlListWalker' file='list' module='list'>
       <info>Callback function used when walking a list with xmlListWalk().</info>
       <return type='int' info='0 to stop walking the list, 1 otherwise.'/>
       <arg name='data' type='const void *' info='the data found in the list'/>
-      <arg name='user' type='const void *' info='extra user provided data to the walker'/>
+      <arg name='user' type='void *' info='extra user provided data to the walker'/>
     </functype>
     <function name='xmlLoadACatalog' file='catalog' module='catalog'>
       <cond>defined(LIBXML_CATALOG_ENABLED)</cond>
@@ -17683,7 +17696,7 @@
     </function>
     <function name='xmlXPathInit' file='xpath' module='xpath'>
       <cond>defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)</cond>
-      <info>Initialize the XPath environment</info>
+      <info>Initialize the XPath environment  Does nothing but must be kept as public function.</info>
       <return type='void'/>
     </function>
     <function name='xmlXPathIntersection' file='xpathInternals' module='xpath'>
@@ -17695,13 +17708,13 @@
     </function>
     <function name='xmlXPathIsInf' file='xpath' module='xpath'>
       <cond>defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)</cond>
-      <info>Provides a portable isinf() function to detect whether a double is a +Infinite or -Infinite. Based on trio code http://sourceforge.net/projects/ctrio/</info>
-      <return type='int' info='1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise'/>
+      <info></info>
+      <return type='int' info='1 if the value is +Infinite, -1 if -Infinite, 0 otherwise'/>
       <arg name='val' type='double' info='a double value'/>
     </function>
     <function name='xmlXPathIsNaN' file='xpath' module='xpath'>
       <cond>defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)</cond>
-      <info>Provides a portable isnan() function to detect whether a double is a NotaNumber. Based on trio code http://sourceforge.net/projects/ctrio/</info>
+      <info></info>
       <return type='int' info='1 if the value is a NaN, 0 otherwise'/>
       <arg name='val' type='double' info='a double value'/>
     </function>
diff --git a/doc/libxml2-refs.xml b/doc/libxml2-refs.xml
index 935d4f7..3fe0876 100644
--- a/doc/libxml2-refs.xml
+++ b/doc/libxml2-refs.xml
@@ -34,6 +34,7 @@
     <reference name='HTML_REQUIRED' href='html/libxml-HTMLparser.html#HTML_REQUIRED'/>
     <reference name='HTML_TEXT_NODE' href='html/libxml-HTMLtree.html#HTML_TEXT_NODE'/>
     <reference name='HTML_VALID' href='html/libxml-HTMLparser.html#HTML_VALID'/>
+    <reference name='ICU_PIVOT_BUF_SIZE' href='html/libxml-encoding.html#ICU_PIVOT_BUF_SIZE'/>
     <reference name='INPUT_CHUNK' href='html/libxml-parserInternals.html#INPUT_CHUNK'/>
     <reference name='INVALID_SOCKET' href='html/libxml-nanoftp.html#INVALID_SOCKET'/>
     <reference name='IS_ASCII_DIGIT' href='html/libxml-parserInternals.html#IS_ASCII_DIGIT'/>
@@ -2124,6 +2125,7 @@
     <reference name='xmlHashCreate' href='html/libxml-hash.html#xmlHashCreate'/>
     <reference name='xmlHashCreateDict' href='html/libxml-hash.html#xmlHashCreateDict'/>
     <reference name='xmlHashDeallocator' href='html/libxml-hash.html#xmlHashDeallocator'/>
+    <reference name='xmlHashDefaultDeallocator' href='html/libxml-hash.html#xmlHashDefaultDeallocator'/>
     <reference name='xmlHashFree' href='html/libxml-hash.html#xmlHashFree'/>
     <reference name='xmlHashLookup' href='html/libxml-hash.html#xmlHashLookup'/>
     <reference name='xmlHashLookup2' href='html/libxml-hash.html#xmlHashLookup2'/>
@@ -3624,6 +3626,7 @@
       <ref name='HTML_VALID'/>
     </letter>
     <letter name='I'>
+      <ref name='ICU_PIVOT_BUF_SIZE'/>
       <ref name='INPUT_CHUNK'/>
       <ref name='INVALID_SOCKET'/>
       <ref name='IS_ASCII_DIGIT'/>
@@ -5762,6 +5765,7 @@
       <ref name='xmlHashCreate'/>
       <ref name='xmlHashCreateDict'/>
       <ref name='xmlHashDeallocator'/>
+      <ref name='xmlHashDefaultDeallocator'/>
       <ref name='xmlHashFree'/>
       <ref name='xmlHashLookup'/>
       <ref name='xmlHashLookup2'/>
@@ -8113,8 +8117,6 @@
     </type>
     <type name='const void *'>
       <ref name='xmlListDataCompare'/>
-      <ref name='xmlListReverseWalk'/>
-      <ref name='xmlListWalk'/>
       <ref name='xmlListWalker'/>
     </type>
     <type name='const xlinkHRef'>
@@ -8287,6 +8289,9 @@
       <ref name='xmlHashAddEntry'/>
       <ref name='xmlHashAddEntry2'/>
       <ref name='xmlHashAddEntry3'/>
+      <ref name='xmlHashCopier'/>
+      <ref name='xmlHashDeallocator'/>
+      <ref name='xmlHashDefaultDeallocator'/>
       <ref name='xmlHashLookup'/>
       <ref name='xmlHashLookup2'/>
       <ref name='xmlHashLookup3'/>
@@ -8298,6 +8303,7 @@
       <ref name='xmlHashRemoveEntry3'/>
       <ref name='xmlHashScan3'/>
       <ref name='xmlHashScanFull3'/>
+      <ref name='xmlHashScanner'/>
       <ref name='xmlHashScannerFull'/>
       <ref name='xmlHashUpdateEntry'/>
       <ref name='xmlHashUpdateEntry2'/>
@@ -8862,6 +8868,7 @@
       <ref name='xmlHashAddEntry3'/>
       <ref name='xmlHashCopier'/>
       <ref name='xmlHashDeallocator'/>
+      <ref name='xmlHashDefaultDeallocator'/>
       <ref name='xmlHashScan'/>
       <ref name='xmlHashScan3'/>
       <ref name='xmlHashScanFull'/>
@@ -8885,7 +8892,10 @@
       <ref name='xmlListRemoveFirst'/>
       <ref name='xmlListRemoveLast'/>
       <ref name='xmlListReverseSearch'/>
+      <ref name='xmlListReverseWalk'/>
       <ref name='xmlListSearch'/>
+      <ref name='xmlListWalk'/>
+      <ref name='xmlListWalker'/>
       <ref name='xmlMemFree'/>
       <ref name='xmlMemRealloc'/>
       <ref name='xmlNanoFTPCheckResponse'/>
@@ -9176,9 +9186,6 @@
       <ref name='xmlBuildQName'/>
       <ref name='xmlCopyChar'/>
       <ref name='xmlCopyCharMultiByte'/>
-      <ref name='xmlHashCopier'/>
-      <ref name='xmlHashDeallocator'/>
-      <ref name='xmlHashScanner'/>
       <ref name='xmlNewDocNodeEatName'/>
       <ref name='xmlNewNodeEatName'/>
       <ref name='xmlNewNsPropEatName'/>
@@ -11103,6 +11110,7 @@
       <ref name='xmlInitializeDict'/>
     </file>
     <file name='encoding'>
+      <ref name='ICU_PIVOT_BUF_SIZE'/>
       <ref name='UTF8Toisolat1'/>
       <ref name='XML_CHAR_ENCODING_2022_JP'/>
       <ref name='XML_CHAR_ENCODING_8859_1'/>
@@ -11262,6 +11270,7 @@
       <ref name='xmlHashCreate'/>
       <ref name='xmlHashCreateDict'/>
       <ref name='xmlHashDeallocator'/>
+      <ref name='xmlHashDefaultDeallocator'/>
       <ref name='xmlHashFree'/>
       <ref name='xmlHashLookup'/>
       <ref name='xmlHashLookup2'/>
@@ -14729,8 +14738,6 @@
         </word>
         <word name='Based'>
           <ref name='xmlExpExpDerive'/>
-          <ref name='xmlXPathIsInf'/>
-          <ref name='xmlXPathIsNaN'/>
         </word>
         <word name='BasicLatin'>
           <ref name='xmlUCSIsBasicLatin'/>
@@ -15506,6 +15513,7 @@
           <ref name='xmlValidNormalizeAttributeValue'/>
           <ref name='xmlValidateDocumentFinal'/>
           <ref name='xmlValidateDtdFinal'/>
+          <ref name='xmlXPathInit'/>
         </word>
         <word name='Douglas'>
           <ref name='xmlURIEscape'/>
@@ -16868,9 +16876,6 @@
         <word name='Not'>
           <ref name='_xmlSchemaElement'/>
         </word>
-        <word name='NotaNumber'>
-          <ref name='xmlXPathIsNaN'/>
-        </word>
         <word name='Notation'>
           <ref name='_xmlNotation'/>
           <ref name='xmlParseEntityDecl'/>
@@ -17234,8 +17239,6 @@
           <ref name='xmlTextReaderGetAttributeNo'/>
           <ref name='xmlTextReaderGetAttributeNs'/>
           <ref name='xmlTextReaderValue'/>
-          <ref name='xmlXPathIsInf'/>
-          <ref name='xmlXPathIsNaN'/>
         </word>
         <word name='Proxy'>
           <ref name='xmlNanoFTPScanProxy'/>
@@ -21304,10 +21307,6 @@
         <word name='cshema'>
           <ref name='XML_SCHEMAS_FINAL_DEFAULT_LIST'/>
         </word>
-        <word name='ctrio'>
-          <ref name='xmlXPathIsInf'/>
-          <ref name='xmlXPathIsNaN'/>
-        </word>
         <word name='ctxt'>
           <ref name='xmlExpNewOr'/>
           <ref name='xmlExpNewRange'/>
@@ -21768,8 +21767,6 @@
           <ref name='xmlInputMatchCallback'/>
           <ref name='xmlKeepBlanksDefault'/>
           <ref name='xmlOutputMatchCallback'/>
-          <ref name='xmlXPathIsInf'/>
-          <ref name='xmlXPathIsNaN'/>
         </word>
         <word name='detected'>
           <ref name='CHECK_ERROR'/>
@@ -22461,6 +22458,7 @@
           <ref name='xmlCatalogAdd'/>
           <ref name='xmlCatalogAddLocal'/>
           <ref name='xmlCatalogRemove'/>
+          <ref name='xmlHashDefaultDeallocator'/>
           <ref name='xmlHashUpdateEntry'/>
           <ref name='xmlHashUpdateEntry2'/>
           <ref name='xmlHashUpdateEntry3'/>
@@ -23848,8 +23846,6 @@
           <ref name='xmlSAX2GetSystemId'/>
           <ref name='xmlSchemaGetPredefinedType'/>
           <ref name='xmlTextReaderNodeType'/>
-          <ref name='xmlXPathIsInf'/>
-          <ref name='xmlXPathIsNaN'/>
         </word>
         <word name='human-readable'>
           <ref name='_xmlError'/>
@@ -24542,15 +24538,9 @@
         <word name='invited'>
           <ref name='xmlValidGetValidElements'/>
         </word>
-        <word name='isinf'>
-          <ref name='xmlXPathIsInf'/>
-        </word>
         <word name='isn'>
           <ref name='xmlRegisterCharEncodingHandler'/>
         </word>
-        <word name='isnan'>
-          <ref name='xmlXPathIsNaN'/>
-        </word>
         <word name='issue'>
           <ref name='xmlEncodeEntities'/>
         </word>
@@ -24647,6 +24637,7 @@
           <ref name='htmlIsAutoClosed'/>
           <ref name='htmlParseElement'/>
           <ref name='xmlKeepBlanksDefault'/>
+          <ref name='xmlXPathInit'/>
           <ref name='xmlXPathOrderDocElems'/>
         </word>
         <word name='keyword'>
@@ -25795,10 +25786,6 @@
           <ref name='xmlParseElementChildrenContentDecl'/>
           <ref name='xmlParseMarkupDecl'/>
         </word>
-        <word name='net'>
-          <ref name='xmlXPathIsInf'/>
-          <ref name='xmlXPathIsNaN'/>
-        </word>
         <word name='network'>
           <ref name='htmlCtxtReadFile'/>
           <ref name='htmlReadFile'/>
@@ -25985,6 +25972,9 @@
           <ref name='xmlCheckUTF8'/>
           <ref name='xmlLoadExternalEntity'/>
         </word>
+        <word name='nothing'>
+          <ref name='xmlXPathInit'/>
+        </word>
         <word name='notice'>
           <ref name='xmlCleanupParser'/>
           <ref name='xmlCleanupThreads'/>
@@ -26786,10 +26776,6 @@
           <ref name='xmlModuleOpen'/>
           <ref name='xmlModuleSymbol'/>
         </word>
-        <word name='portable'>
-          <ref name='xmlXPathIsInf'/>
-          <ref name='xmlXPathIsNaN'/>
-        </word>
         <word name='pos'>
           <ref name='xmlUTF8Strsub'/>
         </word>
@@ -27173,10 +27159,6 @@
         <word name='prohibited'>
           <ref name='XML_SCHEMAS_ATTR_USE_PROHIBITED'/>
         </word>
-        <word name='projects'>
-          <ref name='xmlXPathIsInf'/>
-          <ref name='xmlXPathIsNaN'/>
-        </word>
         <word name='prolog'>
           <ref name='xmlParseDocument'/>
         </word>
@@ -28910,10 +28892,6 @@
           <ref name='xmlDOMWrapAdoptNode'/>
           <ref name='xmlDOMWrapCloneNode'/>
         </word>
-        <word name='sourceforge'>
-          <ref name='xmlXPathIsInf'/>
-          <ref name='xmlXPathIsNaN'/>
-        </word>
         <word name='spaces'>
           <ref name='_xmlParserCtxt'/>
           <ref name='htmlDocContentDumpFormatOutput'/>
@@ -30080,8 +30058,6 @@
         <word name='trio'>
           <ref name='WITHOUT_TRIO'/>
           <ref name='WITH_TRIO'/>
-          <ref name='xmlXPathIsInf'/>
-          <ref name='xmlXPathIsNaN'/>
         </word>
         <word name='troubles'>
           <ref name='_xmlParserInput'/>
@@ -31320,6 +31296,7 @@
           <ref name='xmlGetNoNsProp'/>
           <ref name='xmlGetNsProp'/>
           <ref name='xmlGetProp'/>
+          <ref name='xmlHashDefaultDeallocator'/>
           <ref name='xmlNodeGetBase'/>
           <ref name='xmlNodeGetContent'/>
           <ref name='xmlNodeGetLang'/>
diff --git a/doc/libxml2.xsa b/doc/libxml2.xsa
index f575ff0..33f3848 100644
--- a/doc/libxml2.xsa
+++ b/doc/libxml2.xsa
@@ -8,24 +8,45 @@
   </vendor>
   <product id="libxml2">
     <name>libxml2</name>
-    <version>v2.9.6</version>
-    <last-release> Oct 06 2017</last-release>
+    <version>2.9.7</version>
+    <last-release> Nov 02 2017</last-release>
     <info-url>http://xmlsoft.org/</info-url>
-    <changes>   - Portability:
-  Change preprocessor OS tests to __linux__ (Nick Wellnhofer)
+    <changes>   - Documentation:
+  xmlcatalog: refresh man page wrt. quering system catalog easily (Jan Pokorný)
+  
+   - Portability:
+  Fix deprecated Travis compiler flag (Nick Wellnhofer),
+  Add declaration for DllMain (J. Peter Mugaas),
+  Fix preprocessor conditional in threads.h (J. Peter Mugaas),
+  Fix pointer comparison warnings on 64-bit Windows (J. Peter Mugaas),
+  Fix macro redefinition warning (J. Peter Mugaas),
+  Default to native threads on MinGW-w64 (Nick Wellnhofer),
+  Simplify Windows IO functions (Nick Wellnhofer),
+  Fix runtest on Windows (Nick Wellnhofer),
+  socklen_t is always int on Windows (Nick Wellnhofer),
+  Don't redefine socket error codes on Windows (Nick Wellnhofer),
+  Fix pointer/int cast warnings on 64-bit Windows (Nick Wellnhofer),
+  Fix Windows compiler warnings in xmlCanonicPath (Nick Wellnhofer)
   
    - Bug Fixes:
-  Fix XPath stack frame logic (Nick Wellnhofer),
-  Report undefined XPath variable error message (Nick Wellnhofer),
-  Fix regression with librsvg (Nick Wellnhofer),
-  Handle more invalid entity values in recovery mode (Nick Wellnhofer),
-  Fix structured validation errors (Nick Wellnhofer),
-  Fix memory leak in LZMA decompressor (Nick Wellnhofer),
-  Set memory limit for LZMA decompression (Nick Wellnhofer),
-  Handle illegal entity values in recovery mode (Nick Wellnhofer),
-  Fix debug dump of streaming XPath expressions (Nick Wellnhofer),
-  Fix memory leak in nanoftp (Nick Wellnhofer),
-  Fix memory leaks in SAX1 parser (Nick Wellnhofer)
+  xmlcatalog: restore ability to query system catalog easily (Jan Pokorný),
+  Fix comparison of nodesets to strings (Nick Wellnhofer)
+  
+   - Improvements:
+  Add Makefile rules to rebuild HTML man pages (Nick Wellnhofer),
+  Fix mixed decls and code in timsort.h (Nick Wellnhofer),
+  Rework handling of return values in thread tests (Nick Wellnhofer),
+  Fix unused variable warnings in testrecurse (Nick Wellnhofer),
+  Fix -Wimplicit-fallthrough warnings (J. Peter Mugaas),
+  Upgrade timsort.h to latest revision (Nick Wellnhofer),
+  Increase warning level to /W3 under MSVC (Nick Wellnhofer),
+  Fix a couple of warnings in dict.c and threads.c (Nick Wellnhofer),
+  Update .gitignore for Windows (Nick Wellnhofer),
+  Fix unused variable warnings in nanohttp.c (Nick Wellnhofer),
+  Fix the Windows header mess (Nick Wellnhofer),
+  Don't include winsock2.h in xmllint.c (Nick Wellnhofer),
+  Remove generated file python/setup.py from version control (Nick Wellnhofer),
+  Use __linux__ macro in generated code (Nick Wellnhofer)
   
 
 </changes>
diff --git a/doc/news.html b/doc/news.html
index 5346d32..65839ad 100644
--- a/doc/news.html
+++ b/doc/news.html
@@ -8,7 +8,53 @@
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
 </style><title>Releases</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Releases</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>The <a href="ChangeLog.html">change log</a> describes the recents commits
-to the <a href="http://git.gnome.org/browse/libxml2/">GIT</a> code base.</p><p>Here is the list of public releases:</p><h3>2.9.7: Nov 02 2017</h3><ul>
+to the <a href="http://git.gnome.org/browse/libxml2/">GIT</a> code base.</p><p>Here is the list of public releases:</p><h3>v2.9.8: Mar 05 2018</h3><ul>
+  <li>Portability:<br />
+  python: remove single use of _PyVerify_fd (Patrick Welche),<br />
+  Build more test executables on Windows/MSVC (Nick Wellnhofer),<br />
+  Stop including ansidecl.h (Nick Wellnhofer),<br />
+  Fix libz and liblzma detection (Nick Wellnhofer),<br />
+  Revert "Compile testapi with -Wno-unused-function" (Nick Wellnhofer)<br />
+  </li>
+
+  <li>Bug Fixes:<br />
+  Fix xmlParserEntityCheck (Nick Wellnhofer),<br />
+  Halt parser in case of encoding error (Nick Wellnhofer),<br />
+  Clear entity content in case of errors (Nick Wellnhofer),<br />
+  Change calls to xmlCharEncInput to set flush false when not final call. Having flush incorrectly set to true causes errors for ICU. (Joel Hockey),<br />
+  Fix buffer over-read in xmlParseNCNameComplex (Nick Wellnhofer),<br />
+  Fix ICU library filenames on Windows/MSVC (Nick Wellnhofer),<br />
+  Fix xmlXPathIsNaN broken by recent commit (Nick Wellnhofer),<br />
+  Fix -Wenum-compare warnings (Nick Wellnhofer),<br />
+  Fix callback signature in testapi.c (Nick Wellnhofer),<br />
+  Fix unused parameter warning without ICU (Nick Wellnhofer),<br />
+  Fix IO callback signatures (Nick Wellnhofer),<br />
+  Fix misc callback signatures (Nick Wellnhofer),<br />
+  Fix list callback signatures (Nick Wellnhofer),<br />
+  Fix hash callback signatures (Nick Wellnhofer),<br />
+  Refactor name and type signature for xmlNop (Vlad Tsyrklevich),<br />
+  Fixed ICU to set flush correctly and provide pivot buffer. (Joel Hockey),<br />
+  Skip EBCDIC tests if EBCDIC isn't supported (Nick Wellnhofer)<br />
+  </li>
+
+  <li>Improvements:<br />
+  Disable pointer-overflow UBSan checks under Travis (Nick Wellnhofer),<br />
+  Improve handling of context input_id (Daniel Veillard),<br />
+  Add resource file to Windows DLL (ccpaging),<br />
+  Run Travis tests with -Werror (Nick Wellnhofer),<br />
+  Build with "-Wall -Wextra" (Nick Wellnhofer),<br />
+  Fix -Wtautological-pointer-compare warnings (Nick Wellnhofer),<br />
+  Remove unused AC_CHECKs (Nick Wellnhofer),<br />
+  Update information about contributing (Nick Wellnhofer),<br />
+  Fix -Wmisleading-indentation warnings (Nick Wellnhofer),<br />
+  Don't touch CFLAGS in configure.ac (Nick Wellnhofer),<br />
+  Ignore function pointer cast warnings (Nick Wellnhofer),<br />
+  Simplify XPath NaN, inf and -0 handling (Nick Wellnhofer),<br />
+  Introduce xmlPosixStrdup and update xmlMemStrdup (Nick Wellnhofer),<br />
+  Add test for ICU flush and pivot buffer (Nick Wellnhofer),<br />
+  Compile testapi with -Wno-unused-function (Nick Wellnhofer)<br />
+  </li>
+</ul><h3>2.9.7: Nov 02 2017</h3><ul>
   <li>Documentation:<br />
   xmlcatalog: refresh man page wrt. quering system catalog easily (Jan Pokorný)<br />
   </li>
diff --git a/doc/xml.html b/doc/xml.html
index b902869..4059fb7 100644
--- a/doc/xml.html
+++ b/doc/xml.html
@@ -709,6 +709,54 @@
 
 <p>Here is the list of public releases:</p>
 
+<h3>v2.9.8: Mar 05 2018</h3>
+<ul>
+  <li>Portability:<br/>
+  python: remove single use of _PyVerify_fd (Patrick Welche),<br/>
+  Build more test executables on Windows/MSVC (Nick Wellnhofer),<br/>
+  Stop including ansidecl.h (Nick Wellnhofer),<br/>
+  Fix libz and liblzma detection (Nick Wellnhofer),<br/>
+  Revert "Compile testapi with -Wno-unused-function" (Nick Wellnhofer)<br/>
+  </li>
+
+  <li>Bug Fixes:<br/>
+  Fix xmlParserEntityCheck (Nick Wellnhofer),<br/>
+  Halt parser in case of encoding error (Nick Wellnhofer),<br/>
+  Clear entity content in case of errors (Nick Wellnhofer),<br/>
+  Change calls to xmlCharEncInput to set flush false when not final call. Having flush incorrectly set to true causes errors for ICU. (Joel Hockey),<br/>
+  Fix buffer over-read in xmlParseNCNameComplex (Nick Wellnhofer),<br/>
+  Fix ICU library filenames on Windows/MSVC (Nick Wellnhofer),<br/>
+  Fix xmlXPathIsNaN broken by recent commit (Nick Wellnhofer),<br/>
+  Fix -Wenum-compare warnings (Nick Wellnhofer),<br/>
+  Fix callback signature in testapi.c (Nick Wellnhofer),<br/>
+  Fix unused parameter warning without ICU (Nick Wellnhofer),<br/>
+  Fix IO callback signatures (Nick Wellnhofer),<br/>
+  Fix misc callback signatures (Nick Wellnhofer),<br/>
+  Fix list callback signatures (Nick Wellnhofer),<br/>
+  Fix hash callback signatures (Nick Wellnhofer),<br/>
+  Refactor name and type signature for xmlNop (Vlad Tsyrklevich),<br/>
+  Fixed ICU to set flush correctly and provide pivot buffer. (Joel Hockey),<br/>
+  Skip EBCDIC tests if EBCDIC isn't supported (Nick Wellnhofer)<br/>
+  </li>
+
+  <li>Improvements:<br/>
+  Disable pointer-overflow UBSan checks under Travis (Nick Wellnhofer),<br/>
+  Improve handling of context input_id (Daniel Veillard),<br/>
+  Add resource file to Windows DLL (ccpaging),<br/>
+  Run Travis tests with -Werror (Nick Wellnhofer),<br/>
+  Build with "-Wall -Wextra" (Nick Wellnhofer),<br/>
+  Fix -Wtautological-pointer-compare warnings (Nick Wellnhofer),<br/>
+  Remove unused AC_CHECKs (Nick Wellnhofer),<br/>
+  Update information about contributing (Nick Wellnhofer),<br/>
+  Fix -Wmisleading-indentation warnings (Nick Wellnhofer),<br/>
+  Don't touch CFLAGS in configure.ac (Nick Wellnhofer),<br/>
+  Ignore function pointer cast warnings (Nick Wellnhofer),<br/>
+  Simplify XPath NaN, inf and -0 handling (Nick Wellnhofer),<br/>
+  Introduce xmlPosixStrdup and update xmlMemStrdup (Nick Wellnhofer),<br/>
+  Add test for ICU flush and pivot buffer (Nick Wellnhofer),<br/>
+  Compile testapi with -Wno-unused-function (Nick Wellnhofer)<br/>
+  </li>
+</ul>
 <h3>2.9.7: Nov 02 2017</h3>
 <ul>
   <li>Documentation:<br/>
diff --git a/include/libxml/xmlversion.h.in b/include/libxml/xmlversion.h.in
index b173be9..d10f975 100644
--- a/include/libxml/xmlversion.h.in
+++ b/include/libxml/xmlversion.h.in
@@ -410,9 +410,6 @@
 #endif
 
 #ifdef __GNUC__
-#ifdef HAVE_ANSIDECL_H
-#include <ansidecl.h>
-#endif
 
 /**
  * ATTRIBUTE_UNUSED:
diff --git a/include/libxml/xmlwin32version.h b/include/libxml/xmlwin32version.h
index 9641241..e0f2b38 100644
--- a/include/libxml/xmlwin32version.h
+++ b/include/libxml/xmlwin32version.h
@@ -214,9 +214,6 @@
  * Macro used to signal to GCC unused function parameters
  */
 #ifdef __GNUC__
-#ifdef HAVE_ANSIDECL_H
-#include <ansidecl.h>
-#endif
 #ifndef ATTRIBUTE_UNUSED
 #define ATTRIBUTE_UNUSED
 #endif
diff --git a/include/libxml/xmlwin32version.h.in b/include/libxml/xmlwin32version.h.in
index 375f3a4..2176ad1 100644
--- a/include/libxml/xmlwin32version.h.in
+++ b/include/libxml/xmlwin32version.h.in
@@ -243,9 +243,6 @@
 #endif
 
 #ifdef __GNUC__
-#ifdef HAVE_ANSIDECL_H
-#include <ansidecl.h>
-#endif
 
 /**
  * ATTRIBUTE_UNUSED:
diff --git a/include/win32config.h b/include/win32config.h
index 8596755..7fc7403 100644
--- a/include/win32config.h
+++ b/include/win32config.h
@@ -13,7 +13,6 @@
 #include "wincecompat.h"
 #else
 #define HAVE_SYS_STAT_H
-#define HAVE__STAT
 #define HAVE_STAT
 #define HAVE_STDLIB_H
 #define HAVE_TIME_H
diff --git a/libxml.h b/libxml.h
index 2efa704..64e30f7 100644
--- a/libxml.h
+++ b/libxml.h
@@ -60,6 +60,18 @@
 #include "trio.h"
 #endif
 
+#if defined(__clang__) || \
+    (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406))
+#define XML_IGNORE_PEDANTIC_WARNINGS \
+    _Pragma("GCC diagnostic push") \
+    _Pragma("GCC diagnostic ignored \"-Wpedantic\"")
+#define XML_POP_WARNINGS \
+    _Pragma("GCC diagnostic pop")
+#else
+#define XML_IGNORE_PEDANTIC_WARNINGS
+#define XML_POP_WARNINGS
+#endif
+
 /*
  * Internal variable indicating if a callback has been registered for
  * node creation/destruction. It avoids spending a lot of time in locking
diff --git a/libxml2.syms b/libxml2.syms
index 370dcf1..9889cb2 100644
--- a/libxml2.syms
+++ b/libxml2.syms
@@ -2279,3 +2279,10 @@
   xmlXPathSetContextNode;
 } LIBXML2_2.9.0;
 
+LIBXML2_2.9.8 {
+    global:
+
+# hash
+  xmlHashDefaultDeallocator;
+} LIBXML2_2.9.1;
+
diff --git a/macos/src/config-mac.h b/macos/src/config-mac.h
index e9a8f9d..ca6f993 100644
--- a/macos/src/config-mac.h
+++ b/macos/src/config-mac.h
@@ -21,27 +21,9 @@
 #define HAVE_PTHREAD_H
 #define LIBXML_THREAD_ENABLED
 
-/* Define if you have the _stat function.  */
-#define HAVE__STAT
-
-/* Define if you have the class function.  */
-#undef HAVE_CLASS
-
-/* Define if you have the finite function.  */
-#undef HAVE_FINITE
-
-/* Define if you have the fp_class function.  */
-#undef HAVE_FP_CLASS
-
-/* Define if you have the fpclass function.  */
-#undef HAVE_FPCLASS
-
 /* Define if you have the fprintf function.  */
 #define HAVE_FPRINTF
 
-/* Define if you have the isnand function.  */
-#undef HAVE_ISNAND
-
 /* Define if you have the localtime function.  */
 #define HAVE_LOCALTIME
 
@@ -63,18 +45,9 @@
 /* Define if you have the stat function.  */
 #define HAVE_STAT
 
-/* Define if you have the strdup function.  */
-#define HAVE_STRDUP
-
-/* Define if you have the strerror function.  */
-#define HAVE_STRERROR
-
 /* Define if you have the strftime function.  */
 #define HAVE_STRFTIME
 
-/* Define if you have the strndup function.  */
-#define HAVE_STRNDUP
-
 /* Define if you have the vfprintf function.  */
 #define HAVE_VFPRINTF
 
@@ -84,9 +57,6 @@
 /* Define if you have the vsprintf function.  */
 #define HAVE_VSPRINTF
 
-/* Define if you have the <ansidecl.h> header file.  */
-#define HAVE_ANSIDECL_H
-
 /* Define if you have the <arpa/inet.h> header file.  */
 #define HAVE_ARPA_INET_H
 
@@ -108,21 +78,12 @@
 /* Define if you have the <float.h> header file.  */
 #define HAVE_FLOAT_H
 
-/* Define if you have the <fp_class.h> header file.  */
-#define HAVE_FP_CLASS_H
-
-/* Define if you have the <ieeefp.h> header file.  */
-#define HAVE_IEEEFP_H
-
 /* Define if you have the <malloc.h> header file.  */
 #undef HAVE_MALLOC_H
 
 /* Define if you have the <math.h> header file.  */
 #define HAVE_MATH_H
 
-/* Define if you have the <nan.h> header file.  */
-#define HAVE_NAN_H
-
 /* Define if you have the <ndir.h> header file.  */
 #define HAVE_NDIR_H
 
@@ -174,9 +135,6 @@
 /* Define if you have the <unistd.h> header file.  */
 #define HAVE_UNISTD_H
 
-/* Define if you have the <zlib.h> header file.  */
-#undef HAVE_ZLIB_H
-
 /* Name of package */
 #define PACKAGE
 
diff --git a/nanohttp.c b/nanohttp.c
index 9cd2292..2143718 100644
--- a/nanohttp.c
+++ b/nanohttp.c
@@ -63,7 +63,7 @@
 #ifdef HAVE_STRINGS_H
 #include <strings.h>
 #endif
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 #include <zlib.h>
 #endif
 
@@ -145,7 +145,7 @@
     char *authHeader;	/* contents of {WWW,Proxy}-Authenticate header */
     char *encoding;	/* encoding extracted from the contentType */
     char *mimeType;	/* Mime-Type extracted from the contentType */
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     z_stream *strm;	/* Zlib stream object */
     int usesGzip;	/* "Content-Encoding: gzip" was detected */
 #endif
@@ -434,7 +434,7 @@
     if (ctxt->mimeType != NULL) xmlFree(ctxt->mimeType);
     if (ctxt->location != NULL) xmlFree(ctxt->location);
     if (ctxt->authHeader != NULL) xmlFree(ctxt->authHeader);
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     if (ctxt->strm != NULL) {
 	inflateEnd(ctxt->strm);
 	xmlFree(ctxt->strm);
@@ -817,7 +817,7 @@
 	if (ctxt->authHeader != NULL)
 	    xmlFree(ctxt->authHeader);
 	ctxt->authHeader = xmlMemStrdup(cur);
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     } else if ( !xmlStrncasecmp( BAD_CAST line, BAD_CAST"Content-Encoding:", 17) ) {
 	cur += 17;
 	while ((*cur == ' ') || (*cur == '\t')) cur++;
@@ -1273,7 +1273,7 @@
 int
 xmlNanoHTTPRead(void *ctx, void *dest, int len) {
     xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr) ctx;
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     int bytes_read = 0;
     int orig_avail_in;
     int z_ret;
@@ -1283,7 +1283,7 @@
     if (dest == NULL) return(-1);
     if (len <= 0) return(0);
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     if (ctxt->usesGzip == 1) {
         if (ctxt->strm == NULL) return(0);
 
@@ -1424,7 +1424,7 @@
 	/* 1 for '?' */
 	blen += strlen(ctxt->query) + 1;
     blen += strlen(method) + strlen(ctxt->path) + 24;
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     /* reserve for possible 'Accept-Encoding: gzip' string */
     blen += 23;
 #endif
@@ -1468,7 +1468,7 @@
 		    ctxt->hostname, ctxt->port);
     }
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     p += snprintf(p, blen - (p - bp), "Accept-Encoding: gzip\r\n");
 #endif
 
diff --git a/os400/make.sh b/os400/make.sh
index 95a35a2..860365e 100644
--- a/os400/make.sh
+++ b/os400/make.sh
@@ -34,7 +34,7 @@
 #       Copy some documentation files if needed.
 
 for TEXT in "${TOPDIR}/AUTHORS" "${TOPDIR}/ChangeLog"                   \
-    "${TOPDIR}/Copyright" "${TOPDIR}/HACKING" "${TOPDIR}/README"        \
+    "${TOPDIR}/Copyright" "${TOPDIR}/CONTRIBUTING" "${TOPDIR}/README"        \
     "${TOPDIR}/MAINTAINERS" "${TOPDIR}/NEWS" "${TOPDIR}/TODO"           \
     "${TOPDIR}/TODO_SCHEMAS" "${TOPDIR}/os400/README400"
 do      if [ -f "${TEXT}" ]
diff --git a/os400/os400config.h.in b/os400/os400config.h.in
index ad5abb7..1840c17 100644
--- a/os400/os400config.h.in
+++ b/os400/os400config.h.in
@@ -6,9 +6,6 @@
 ***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
 **/
 
-/* Define to 1 if you have the <ansidecl.h> header file. */
-#undef HAVE_ANSIDECL_H
-
 /* Define to 1 if you have the <arpa/inet.h> header file. */
 #define HAVE_ARPA_INET_H        1
 
@@ -18,9 +15,6 @@
 /* Whether struct sockaddr::__ss_family exists */
 #undef HAVE_BROKEN_SS_FAMILY
 
-/* Define to 1 if you have the `class' function. */
-#undef HAVE_CLASS
-
 /* Define to 1 if you have the <ctype.h> header file. */
 #define HAVE_CTYPE_H            1
 
@@ -42,24 +36,12 @@
 /* Define to 1 if you have the <fcntl.h> header file. */
 #define HAVE_FCNTL_H            1
 
-/* Define to 1 if you have the `finite' function. */
-#undef HAVE_FINITE
-
 /* Define to 1 if you have the <float.h> header file. */
 #define HAVE_FLOAT_H            1
 
-/* Define to 1 if you have the `fpclass' function. */
-#undef HAVE_FPCLASS
-
 /* Define to 1 if you have the `fprintf' function. */
 #undef HAVE_FPRINTF                     /* Use trio. */
 
-/* Define to 1 if you have the `fp_class' function. */
-#undef HAVE_FP_CLASS
-
-/* Define to 1 if you have the <fp_class.h> header file. */
-#undef HAVE_FP_CLASS_H
-
 /* Define to 1 if you have the `ftime' function. */
 #undef HAVE_FTIME
 
@@ -69,9 +51,6 @@
 /* Define to 1 if you have the `gettimeofday' function. */
 #undef HAVE_GETTIMEOFDAY
 
-/* Define to 1 if you have the <ieeefp.h> header file. */
-#undef HAVE_IEEEFP_H
-
 /* Define to 1 if you have the <inttypes.h> header file. */
 #define HAVE_INTTYPES_H         1
 
@@ -84,15 +63,9 @@
 /* Define if isnan is there */
 #undef HAVE_ISNAN
 
-/* Define to 1 if you have the `isnand' function. */
-#undef HAVE_ISNAND
-
 /* Define if history library is there (-lhistory) */
 #undef HAVE_LIBHISTORY
 
-/* Have compression library */
-#undef HAVE_LIBLZMA
-
 /* Define if pthread library is there (-lpthread) */
 #undef HAVE_LIBPTHREAD
 
@@ -108,9 +81,6 @@
 /* Define to 1 if you have the `localtime' function. */
 #define HAVE_LOCALTIME          1
 
-/* Define to 1 if you have the <lzma.h> header file. */
-#undef HAVE_LZMA_H
-
 /* Define to 1 if you have the <malloc.h> header file. */
 #undef HAVE_MALLOC_H
 
@@ -131,9 +101,6 @@
 #  undef /**/ HAVE_MMAP
 #endif
 
-/* Define to 1 if you have the <nan.h> header file. */
-#undef HAVE_NAN_H
-
 /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
 #undef HAVE_NDIR_H
 
@@ -206,12 +173,6 @@
 /* Define to 1 if you have the <stdlib.h> header file. */
 #define HAVE_STDLIB_H           1
 
-/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP             1
-
-/* Define to 1 if you have the `strerror' function. */
-#define HAVE_STRERROR           1
-
 /* Define to 1 if you have the `strftime' function. */
 #define HAVE_STRFTIME           1
 
@@ -221,9 +182,6 @@
 /* Define to 1 if you have the <string.h> header file. */
 #define HAVE_STRING_H           1
 
-/* Define to 1 if you have the `strndup' function. */
-#undef HAVE_STRNDUP
-
 /* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
    */
 #undef HAVE_SYS_DIR_H
@@ -274,17 +232,6 @@
 /* Define to 1 if you have the `vsprintf' function. */
 #undef HAVE_VSPRINTF                    /* Use trio. */
 
-/* Define to 1 if you have the <zlib.h> header file. */
-/* Actually dependent on the compilation script. */
-#if @WITH_ZLIB@
-#define HAVE_ZLIB_H             1
-#else
-#undef HAVE_ZLIB_H
-#endif
-
-/* Define to 1 if you have the `_stat' function. */
-#undef HAVE__STAT
-
 /* Whether __va_copy() is available */
 #undef HAVE___VA_COPY
 
diff --git a/os400/wrappers.c b/os400/wrappers.c
index 9f592b7..06f6c26 100644
--- a/os400/wrappers.c
+++ b/os400/wrappers.c
@@ -110,7 +110,7 @@
 }
 
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 #include <zlib.h>
 
 gzFile
diff --git a/os400/wrappers.h b/os400/wrappers.h
index 388ec8c..6f3e6c9 100644
--- a/os400/wrappers.h
+++ b/os400/wrappers.h
@@ -43,7 +43,7 @@
 extern char *   _lx_dlerror(void);
 
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 
 #include <zlib.h>
 
diff --git a/parser.c b/parser.c
index 04aa717..ca9fde2 100644
--- a/parser.c
+++ b/parser.c
@@ -83,12 +83,6 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-#ifdef HAVE_LZMA_H
-#include <lzma.h>
-#endif
 
 #include "buf.h"
 #include "enc.h"
@@ -155,7 +149,7 @@
 	rep = xmlStringDecodeEntities(ctxt, ent->content,
 				  XML_SUBSTITUTE_REF, 0, 0, 0);
         --ctxt->depth;
-	if (ctxt->errNo == XML_ERR_ENTITY_LOOP) {
+	if ((rep == NULL) || (ctxt->errNo == XML_ERR_ENTITY_LOOP)) {
 	    ent->content[0] = 0;
 	}
 
@@ -3376,9 +3370,9 @@
 	     */
 	    ctxt->input->cur -= l;
 	    GROW;
-	    ctxt->input->cur += l;
             if (ctxt->instate == XML_PARSER_EOF)
                 return(NULL);
+	    ctxt->input->cur += l;
 	    c = CUR_CHAR(l);
 	}
     }
@@ -7195,6 +7189,8 @@
 		   (ret != XML_WAR_UNDECLARED_ENTITY)) {
 	    xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
 		     "Entity '%s' failed to parse\n", ent->name);
+            if (ent->content != NULL)
+                ent->content[0] = 0;
 	    xmlParserEntityCheck(ctxt, 0, ent, 0);
 	} else if (list != NULL) {
 	    xmlFreeNodeList(list);
@@ -12222,6 +12218,7 @@
 		    /* TODO 2.6.0 */
 		    xmlGenericError(xmlGenericErrorContext,
 				    "xmlParseChunk: encoder error\n");
+                    xmlHaltParser(ctxt);
 		    return(XML_ERR_INVALID_ENCODING);
 		}
 		xmlBufSetInputBaseCur(in->buffer, ctxt->input, base, current);
@@ -13370,6 +13367,7 @@
 	ctxt->userData = ctxt;
     if (ctxt->dict != NULL) xmlDictFree(ctxt->dict);
     ctxt->dict = oldctxt->dict;
+    ctxt->input_id = oldctxt->input_id + 1;
     ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3);
     ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5);
     ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36);
@@ -13623,6 +13621,7 @@
     xmlDetectSAX2(ctxt);
     ctxt->myDoc = doc;
     /* parsing in context, i.e. as within existing content */
+    ctxt->input_id = 2;
     ctxt->instate = XML_PARSER_CONTENT;
 
     fake = xmlNewComment(NULL);
@@ -13835,6 +13834,7 @@
 	newDoc->oldNs = doc->oldNs;
     }
     ctxt->instate = XML_PARSER_CONTENT;
+    ctxt->input_id = 2;
     ctxt->depth = depth;
 
     /*
@@ -13995,6 +13995,11 @@
     if (pctx != NULL) {
         ctxt->options = pctx->options;
         ctxt->_private = pctx->_private;
+	/*
+	 * this is a subparser of pctx, so the input_id should be
+	 * incremented to distinguish from main entity
+	 */
+	ctxt->input_id = pctx->input_id + 1;
     }
 
     uri = xmlBuildURI(URL, base);
diff --git a/parserInternals.c b/parserInternals.c
index e75e547..8c0cd57 100644
--- a/parserInternals.c
+++ b/parserInternals.c
@@ -32,7 +32,7 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 #include <zlib.h>
 #endif
 
@@ -1214,7 +1214,7 @@
                 /*
                  * convert as much as possible of the buffer
                  */
-                nbchars = xmlCharEncInput(input->buf, 1);
+                nbchars = xmlCharEncInput(input->buf, 0);
             } else {
                 /*
                  * convert just enough to get
diff --git a/python/types.c b/python/types.c
index f237677..124af56 100644
--- a/python/types.c
+++ b/python/types.c
@@ -31,8 +31,6 @@
     const char *mode;
 
     fd = PyObject_AsFileDescriptor(f);
-    if (!_PyVerify_fd(fd))
-        return(NULL);
     /*
      * Get the flags on the fd to understand how it was opened
      */
diff --git a/testapi.c b/testapi.c
index 168ceb6..4a751e2 100644
--- a/testapi.c
+++ b/testapi.c
@@ -737,7 +737,8 @@
 
 #define gen_nb_xmlHashDeallocator 2
 static void
-test_xmlHashDeallocator(void *payload ATTRIBUTE_UNUSED, xmlChar *name ATTRIBUTE_UNUSED) {
+test_xmlHashDeallocator(void *payload ATTRIBUTE_UNUSED,
+                        const xmlChar *name ATTRIBUTE_UNUSED) {
 }
 
 static xmlHashDeallocator gen_xmlHashDeallocator(int no, int nr ATTRIBUTE_UNUSED) {
@@ -9988,6 +9989,43 @@
 
 
 static int
+test_xmlHashDefaultDeallocator(void) {
+    int test_ret = 0;
+
+    int mem_base;
+    void * entry; /* the hash table entry */
+    int n_entry;
+    xmlChar * name; /* the entry's name */
+    int n_name;
+
+    for (n_entry = 0;n_entry < gen_nb_void_ptr;n_entry++) {
+    for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
+        mem_base = xmlMemBlocks();
+        entry = gen_void_ptr(n_entry, 0);
+        name = gen_const_xmlChar_ptr(n_name, 1);
+
+        xmlHashDefaultDeallocator(entry, (const xmlChar *)name);
+        call_tests++;
+        des_void_ptr(n_entry, entry, 0);
+        des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
+        xmlResetLastError();
+        if (mem_base != xmlMemBlocks()) {
+            printf("Leak of %d blocks found in xmlHashDefaultDeallocator",
+	           xmlMemBlocks() - mem_base);
+	    test_ret++;
+            printf(" %d", n_entry);
+            printf(" %d", n_name);
+            printf("\n");
+        }
+    }
+    }
+    function_tests++;
+
+    return(test_ret);
+}
+
+
+static int
 test_xmlHashLookup(void) {
     int test_ret = 0;
 
@@ -10719,13 +10757,14 @@
 test_hash(void) {
     int test_ret = 0;
 
-    if (quiet == 0) printf("Testing hash : 16 of 24 functions ...\n");
+    if (quiet == 0) printf("Testing hash : 17 of 25 functions ...\n");
     test_ret += test_xmlHashAddEntry();
     test_ret += test_xmlHashAddEntry2();
     test_ret += test_xmlHashAddEntry3();
     test_ret += test_xmlHashCopy();
     test_ret += test_xmlHashCreate();
     test_ret += test_xmlHashCreateDict();
+    test_ret += test_xmlHashDefaultDeallocator();
     test_ret += test_xmlHashLookup();
     test_ret += test_xmlHashLookup2();
     test_ret += test_xmlHashLookup3();
diff --git a/threads.c b/threads.c
index bca4954..0433ac0 100644
--- a/threads.c
+++ b/threads.c
@@ -47,10 +47,13 @@
 
 #ifdef HAVE_PTHREAD_H
 
+#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 303) && \
+    defined(__GLIBC__) && defined(__linux__)
+
 static int libxml_is_threaded = -1;
-#if defined(__GNUC__) && defined(__GLIBC__)
-#ifdef __linux__
-#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (__GNUC__ > 3)
+
+#define XML_PTHREAD_WEAK
+
 #pragma weak pthread_once
 #pragma weak pthread_getspecific
 #pragma weak pthread_setspecific
@@ -68,9 +71,13 @@
 #pragma weak pthread_key_create
 #pragma weak pthread_key_delete
 #pragma weak pthread_cond_signal
-#endif
-#endif /* __linux__ */
-#endif /* defined(__GNUC__) && defined(__GLIBC__) */
+
+#else /* __GNUC__, __GLIBC__, __linux__ */
+
+static int libxml_is_threaded = 1;
+
+#endif /* __GNUC__, __GLIBC__, __linux__ */
+
 #endif /* HAVE_PTHREAD_H */
 
 /*
@@ -422,8 +429,11 @@
     /* Make sure the global init lock is initialized and then lock it. */
 #ifdef HAVE_PTHREAD_H
     /* The mutex is statically initialized, so we just lock it. */
-    if (pthread_mutex_lock != NULL)
-        pthread_mutex_lock(&global_init_lock);
+#ifdef XML_PTHREAD_WEAK
+    if (pthread_mutex_lock == NULL)
+        return;
+#endif /* XML_PTHREAD_WEAK */
+    pthread_mutex_lock(&global_init_lock);
 #elif defined HAVE_WIN32_THREADS
     LPCRITICAL_SECTION cs;
 
@@ -492,8 +502,11 @@
 __xmlGlobalInitMutexUnlock(void)
 {
 #ifdef HAVE_PTHREAD_H
-    if (pthread_mutex_unlock != NULL)
-        pthread_mutex_unlock(&global_init_lock);
+#ifdef XML_PTHREAD_WEAK
+    if (pthread_mutex_unlock == NULL)
+        return;
+#endif /* XML_PTHREAD_WEAK */
+    pthread_mutex_unlock(&global_init_lock);
 #elif defined HAVE_WIN32_THREADS
     if (global_init_lock != NULL) {
 	LeaveCriticalSection(global_init_lock);
@@ -845,6 +858,7 @@
 xmlInitThreads(void)
 {
 #ifdef HAVE_PTHREAD_H
+#ifdef XML_PTHREAD_WEAK
     if (libxml_is_threaded == -1) {
         if ((pthread_once != NULL) &&
             (pthread_getspecific != NULL) &&
@@ -870,6 +884,7 @@
             libxml_is_threaded = 0;
         }
     }
+#endif /* XML_PTHREAD_WEAK */
 #elif defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
     InitializeCriticalSection(&cleanup_helpers_cs);
 #endif
@@ -896,7 +911,7 @@
     xmlGenericError(xmlGenericErrorContext, "xmlCleanupThreads()\n");
 #endif
 #ifdef HAVE_PTHREAD_H
-    if ((libxml_is_threaded)  && (pthread_key_delete != NULL))
+    if (libxml_is_threaded != 0)
         pthread_key_delete(globalkey);
     once_control = once_control_init;
 #elif defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
diff --git a/tree.c b/tree.c
index 86a8da7..959421b 100644
--- a/tree.c
+++ b/tree.c
@@ -27,7 +27,7 @@
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
 #endif
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 #include <zlib.h>
 #endif
 
diff --git a/vms/config.vms b/vms/config.vms
index d1cd7f3..375406b 100755
--- a/vms/config.vms
+++ b/vms/config.vms
@@ -21,39 +21,15 @@
 
 #define ICONV_CONST
 
-/* Define if you have the class function.  */
-#undef HAVE_CLASS
-
-/* Define if you have the finite function.  */
-#undef HAVE_FINITE
-
-/* Define if you have the fp_class function.  */
-#define HAVE_FP_CLASS	1
-
-/* Define if you have the fpclass function.  */
-#undef HAVE_FPCLASS
-
-/* Define if you have the isnand function.  */
-#undef HAVE_ISNAND
-
 /* Define if you have the localtime function.  */
 #define HAVE_LOCALTIME	1
 
 /* Define if you have the snprintf function.  */
 #undef HAVE_SNPRINTF
 
-/* Define if you have the strdup function.  */
-#define HAVE_STRDUP	1
-
-/* Define if you have the strerror function.  */
-#define HAVE_STRERROR	1
-
 /* Define if you have the strftime function.  */
 #define HAVE_STRFTIME	1
 
-/* Define if you have the strndup function.  */
-#undef HAVE_STRNDUP
-
 /* Define if you have the <arpa/inet.h> header file.  */
 #undef HAVE_ARPA_INET_H
 
@@ -72,21 +48,12 @@
 /* Define if you have the <float.h> header file.  */
 #define HAVE_FLOAT_H	1
 
-/* Define if you have the <fp_class.h> header file.  */
-#define HAVE_FP_CLASS_H	1
-
-/* Define if you have the <ieeefp.h> header file.  */
-#undef HAVE_IEEEFP_H
-
 /* Define if you have the <malloc.h> header file.  */
 #undef HAVE_MALLOC_H
 
 /* Define if you have the <math.h> header file.  */
 #define HAVE_MATH_H	1
 
-/* Define if you have the <nan.h> header file.  */
-#undef HAVE_NAN_H
-
 /* Define if you have the <ndir.h> header file.  */
 #undef HAVE_NDIR_H
 
@@ -102,12 +69,6 @@
 /* Define if you have the <stdlib.h> header file.  */
 #define HAVE_STDLIB_H	1
 
-/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the `strerror' function. */
-#define HAVE_STRERROR 1
-
 /* Define to 1 if you have the `strftime' function. */
 #define HAVE_STRFTIME 1
 
@@ -117,9 +78,6 @@
 /* Define to 1 if you have the <string.h> header file. */
 #define HAVE_STRING_H 1
 
-/* Define to 1 if you have the `strndup' function. */
-#undef HAVE_STRNDUP
-
 /* Define if you have the <sys/dir.h> header file.  */
 #undef HAVE_SYS_DIR_H
 
@@ -150,9 +108,6 @@
 /* Define if you have the <unistd.h> header file.  */
 #define HAVE_UNISTD_H	1
 
-/* Define if you have the <zlib.h> header file.  */
-#undef HAVE_ZLIB_H
-
 /* Name of package */
 #undef PACKAGE
 
diff --git a/win32/Makefile.bcb b/win32/Makefile.bcb
index 7129c61..41002da 100644
--- a/win32/Makefile.bcb
+++ b/win32/Makefile.bcb
@@ -65,12 +65,6 @@
 !else if "$(WITH_THREADS)" == "posix"
 CFLAGS = $(CFLAGS) -DHAVE_PTHREAD_H
 !endif
-!if "$(WITH_ZLIB)" == "1"
-CFLAGS = $(CFLAGS) -DHAVE_ZLIB_H
-!endif
-!if "$(WITH_LZMA)" == "1"
-CFLAGS = $(CFLAGS) -DHAVE_LZMA_H
-!endif
 
 # The linker and its options.
 LD = ilink32.exe
diff --git a/win32/Makefile.mingw b/win32/Makefile.mingw
index f579923..3d4cb88 100644
--- a/win32/Makefile.mingw
+++ b/win32/Makefile.mingw
@@ -57,12 +57,6 @@
 ifeq ($(WITH_THREADS),posix)
 CFLAGS += -DHAVE_PTHREAD_H
 endif
-ifeq ($(WITH_ZLIB),1)
-CFLAGS += -DHAVE_ZLIB_H
-endif
-ifeq ($(WITH_LZMA),1)
-CFLAGS += -DHAVE_LZMA_H
-endif
 
 # The linker and its options.
 LD = gcc.exe
diff --git a/win32/Makefile.msvc b/win32/Makefile.msvc
index 115a451..491dc88 100644
--- a/win32/Makefile.msvc
+++ b/win32/Makefile.msvc
@@ -22,6 +22,7 @@
 XML_NAME = xml2
 XML_BASENAME = lib$(XML_NAME)
 XML_SO = $(XML_BASENAME).dll
+XML_RES = $(XML_BASENAME).res
 XML_IMP = $(XML_BASENAME).lib
 XML_DEF = $(XML_BASENAME).def
 XML_A = $(XML_BASENAME)_a.lib
@@ -55,12 +56,6 @@
 !else if "$(WITH_THREADS)" == "posix"
 CFLAGS = $(CFLAGS) /D "HAVE_PTHREAD_H"
 !endif
-!if "$(WITH_ZLIB)" == "1"
-CFLAGS = $(CFLAGS) /D "HAVE_ZLIB_H"
-!endif
-!if "$(WITH_LZMA)" == "1"
-CFLAGS = $(CFLAGS) /D "HAVE_LZMA_H"
-!endif
 CFLAGS = $(CFLAGS) /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE
 
 # The linker and its options.
@@ -75,7 +70,11 @@
 LIBS = $(LIBS) iconv.lib
 !endif 
 !if "$(WITH_ICU)" == "1"
-LIBS = $(LIBS) icu.lib
+!if "$(STATIC)" == "1"
+LIBS = $(LIBS) advapi32.lib sicuuc.lib sicuin.lib sicudt.lib
+!else
+LIBS = $(LIBS) icuuc.lib icuin.lib icudt.lib
+!endif
 !endif
 !if "$(WITH_ZLIB)" == "1"
 # could be named differently zdll or zlib
@@ -262,7 +261,10 @@
 	$(BINDIR)\testXPath.exe\
 	$(BINDIR)\runtest.exe\
 	$(BINDIR)\runsuite.exe\
+	$(BINDIR)\runxmlconf.exe\
 	$(BINDIR)\testapi.exe\
+	$(BINDIR)\testchar.exe\
+	$(BINDIR)\testdict.exe\
 	$(BINDIR)\testlimits.exe\
 	$(BINDIR)\testrecurse.exe
 	
@@ -373,11 +375,13 @@
 # Creates the export definition file (DEF) for libxml.
 $(XML_INTDIR)\$(XML_DEF) : $(XML_INTDIR) $(XML_DEF).src
 	$(CPP) $(CPPFLAGS) $(XML_DEF).src > $(XML_INTDIR)\$(XML_DEF)
+$(XML_INTDIR)\$(XML_RES) : $(XML_INTDIR) libxml2.rc
+	rc -Fo $(XML_INTDIR)\$(XML_RES) libxml2.rc
 
 # Creates the libxml shared object.
-$(BINDIR)\$(XML_SO) : $(BINDIR) $(XML_OBJS) $(XML_INTDIR)\$(XML_DEF)
+$(BINDIR)\$(XML_SO) : $(BINDIR) $(XML_OBJS) $(XML_INTDIR)\$(XML_DEF) $(XML_INTDIR)\$(XML_RES)
 	$(LD) $(LDFLAGS) /DLL \
-		/IMPLIB:$(BINDIR)\$(XML_IMP) /OUT:$(BINDIR)\$(XML_SO) $(XML_OBJS) $(LIBS)
+		/IMPLIB:$(BINDIR)\$(XML_IMP) /OUT:$(BINDIR)\$(XML_SO) $(XML_OBJS) $(XML_INTDIR)\$(XML_RES) $(LIBS)
 	@$(_VC_MANIFEST_EMBED_DLL)
 
 #$(BINDIR)\$(XML_SO) : $(BINDIR) $(XML_OBJS) $(XML_INTDIR)\$(XML_DEF)
diff --git a/win32/VC10/config.h b/win32/VC10/config.h
index 4e184a3..c1e16f1 100644
--- a/win32/VC10/config.h
+++ b/win32/VC10/config.h
@@ -12,7 +12,6 @@
 #include "wincecompat.h"
 #else
 #define HAVE_SYS_STAT_H
-#define HAVE__STAT
 #define HAVE_STAT
 #define HAVE_STDLIB_H
 #define HAVE_TIME_H
diff --git a/win32/configure.js b/win32/configure.js
index 92b9ba0..dbf238c 100644
--- a/win32/configure.js
+++ b/win32/configure.js
@@ -280,6 +280,18 @@
 		vf.WriteLine("DYNRUNTIME=" + (dynruntime? "1" : "0"));
 	}
 	vf.Close();
+	versionFile = "rcVersion.h"
+	vf = fso.CreateTextFile(versionFile, true);
+	vf.WriteLine("/*");
+	vf.WriteLine("  " + versionFile);
+	vf.WriteLine("  This file is generated automatically by " + WScript.ScriptName + ".");
+	vf.WriteLine("*/");
+	vf.WriteBlankLines(1);
+	vf.WriteLine("#define LIBXML_MAJOR_VERSION " + verMajor);
+	vf.WriteLine("#define LIBXML_MINOR_VERSION " + verMinor);
+	vf.WriteLine("#define LIBXML_MICRO_VERSION " + verMicro);
+	vf.WriteLine("#define LIBXML_DOTTED_VERSION " + "\"" + verMajor + "." + verMinor + "." + verMicro + "\"");
+	vf.Close()
 }
 
 /* Configures libxml. This one will generate xmlversion.h from xmlversion.h.in
diff --git a/win32/libxml2.rc b/win32/libxml2.rc
new file mode 100644
index 0000000..c774a5e
--- /dev/null
+++ b/win32/libxml2.rc
@@ -0,0 +1,36 @@
+#include <winver.h>
+#include "rcVersion.h"
+
+VS_VERSION_INFO		VERSIONINFO
+  FILEVERSION		LIBXML_MAJOR_VERSION,LIBXML_MINOR_VERSION,LIBXML_MICRO_VERSION,0
+  PRODUCTVERSION	LIBXML_MAJOR_VERSION,LIBXML_MINOR_VERSION,LIBXML_MICRO_VERSION,0
+  FILEFLAGSMASK		VS_FFI_FILEFLAGSMASK
+#ifdef _DEBUG
+  FILEFLAGS		VS_FF_DEBUG
+#else
+  FILEFLAGS		0
+#endif
+  FILEOS		VOS__WINDOWS32
+  FILETYPE		VFT_DLL
+  FILESUBTYPE	VFT2_UNKNOWN	// not used
+BEGIN
+  BLOCK "StringFileInfo"
+  BEGIN
+    BLOCK "04090000"  /* Lang = US English, Charset = ASCII */
+    BEGIN
+      VALUE "FileDescription",	"libxml2 library\0"
+      VALUE "FileVersion",	LIBXML_DOTTED_VERSION "\0"
+      VALUE "InternalName",	"libxml2.dll\0"
+      VALUE "LegalCopyright",	"Copyright (C) Daniel Veillard\0"
+      VALUE "LegalTrademarks",	"\0"
+      VALUE "OriginalFilename",	"libxml2.dll\0"
+      VALUE "ProductName",	"libxml2\0"
+      VALUE "ProductVersion",	LIBXML_DOTTED_VERSION "\0"
+      VALUE "Comments",		"For more information visit http://xmlsoft.org/\0"
+    END
+  END
+  BLOCK "VarFileInfo"
+  BEGIN
+      VALUE "Translation", 0x0409, 0  /* US English, ASCII */
+  END
+END
diff --git a/xlink.c b/xlink.c
index c0e4ff3..ecf9f96 100644
--- a/xlink.c
+++ b/xlink.c
@@ -28,7 +28,7 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 #include <zlib.h>
 #endif
 
diff --git a/xmlIO.c b/xmlIO.c
index e61e780..8254347 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -33,10 +33,10 @@
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
 #endif
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 #include <zlib.h>
 #endif
-#ifdef HAVE_LZMA_H
+#ifdef LIBXML_LZMA_ENABLED
 #include <lzma.h>
 #endif
 
@@ -597,7 +597,7 @@
     return fd;
 }
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 static gzFile
 xmlWrapGzOpenUtf8(const char *path, const char *mode)
 {
@@ -1038,7 +1038,7 @@
 }
 #endif
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 /************************************************************************
  *									*
  *		I/O for compressed file accesses			*
@@ -1241,7 +1241,7 @@
     if (ret < 0) xmlIOErr(0, "gzclose()");
     return(ret);
 }
-#endif /* HAVE_ZLIB_H */
+#endif /* LIBXML_ZLIB_ENABLED */
 
 #ifdef LIBXML_LZMA_ENABLED
 /************************************************************************
@@ -1380,7 +1380,7 @@
 
 } xmlIOHTTPWriteCtxt, *xmlIOHTTPWriteCtxtPtr;
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 
 #define DFLT_WBITS		( -15 )
 #define DFLT_MEM_LVL		( 8 )
@@ -1708,7 +1708,7 @@
     return ( zlgth );
 }
 #endif /* LIBXML_OUTPUT_ENABLED */
-#endif  /*  HAVE_ZLIB_H  */
+#endif  /*  LIBXML_ZLIB_ENABLED  */
 
 #ifdef LIBXML_OUTPUT_ENABLED
 /**
@@ -1727,7 +1727,7 @@
 
     if ( ctxt->doc_buff != NULL ) {
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 	if ( ctxt->compression > 0 ) {
 	    xmlFreeZMemBuff( ctxt->doc_buff );
 	}
@@ -1814,7 +1814,7 @@
      * **  is being used to avoid pushing the data to disk and back.
      */
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     if ((compression > 0) && (compression <= 9)) {
 
         ctxt->compression = compression;
@@ -1894,7 +1894,7 @@
 
 	/*  Use gzwrite or fwrite as previously setup in the open call  */
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 	if ( ctxt->compression > 0 )
 	    len = xmlZMemBuffAppend( ctxt->doc_buff, buffer, len );
 
@@ -1958,7 +1958,7 @@
 
     /*  Retrieve the content from the appropriate buffer  */
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 
     if ( ctxt->compression > 0 ) {
 	content_lgth = xmlZMemBuffGetContent( ctxt->doc_buff, &http_content );
@@ -2229,10 +2229,10 @@
 
     xmlRegisterInputCallbacks(xmlFileMatch, xmlFileOpen,
 	                      xmlFileRead, xmlFileClose);
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     xmlRegisterInputCallbacks(xmlGzfileMatch, xmlGzfileOpen,
 	                      xmlGzfileRead, xmlGzfileClose);
-#endif /* HAVE_ZLIB_H */
+#endif /* LIBXML_ZLIB_ENABLED */
 #ifdef LIBXML_LZMA_ENABLED
     xmlRegisterInputCallbacks(xmlXzfileMatch, xmlXzfileOpen,
 	                      xmlXzfileRead, xmlXzfileClose);
@@ -2274,7 +2274,7 @@
  uncompressed ones except opening if existing then closing
  and saving with same compression ratio ... a pain.
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     xmlRegisterOutputCallbacks(xmlGzfileMatch, xmlGzfileOpen,
 	                       xmlGzfileWrite, xmlGzfileClose);
 #endif
@@ -2564,7 +2564,7 @@
 	ret->context = context;
 	ret->readcallback = xmlInputCallbackTable[i].readcallback;
 	ret->closecallback = xmlInputCallbackTable[i].closecallback;
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 	if ((xmlInputCallbackTable[i].opencallback == xmlGzfileOpen) &&
 		(strcmp(URI, "-") != 0)) {
 #if defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1230
@@ -2628,7 +2628,7 @@
     int i = 0;
     void *context = NULL;
     char *unescaped = NULL;
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     int is_file_uri = 1;
 #endif
 
@@ -2639,7 +2639,7 @@
 
     puri = xmlParseURI(URI);
     if (puri != NULL) {
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
         if ((puri->scheme != NULL) &&
 	    (!xmlStrEqual(BAD_CAST puri->scheme, BAD_CAST "file")))
 	    is_file_uri = 0;
@@ -2659,7 +2659,7 @@
      * try with an unescaped version of the URI
      */
     if (unescaped != NULL) {
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 	if ((compression > 0) && (compression <= 9) && (is_file_uri == 1)) {
 	    context = xmlGzfileOpenW(unescaped, compression);
 	    if (context != NULL) {
@@ -2677,7 +2677,7 @@
 	for (i = xmlOutputCallbackNr - 1;i >= 0;i--) {
 	    if ((xmlOutputCallbackTable[i].matchcallback != NULL) &&
 		(xmlOutputCallbackTable[i].matchcallback(unescaped) != 0)) {
-#if defined(LIBXML_HTTP_ENABLED) && defined(HAVE_ZLIB_H)
+#if defined(LIBXML_HTTP_ENABLED) && defined(LIBXML_ZLIB_ENABLED)
 		/*  Need to pass compression parameter into HTTP open calls  */
 		if (xmlOutputCallbackTable[i].matchcallback == xmlIOHTTPMatch)
 		    context = xmlIOHTTPOpenW(unescaped, compression);
@@ -2696,7 +2696,7 @@
      * filename
      */
     if (context == NULL) {
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 	if ((compression > 0) && (compression <= 9) && (is_file_uri == 1)) {
 	    context = xmlGzfileOpenW(URI, compression);
 	    if (context != NULL) {
@@ -2713,7 +2713,7 @@
 	for (i = xmlOutputCallbackNr - 1;i >= 0;i--) {
 	    if ((xmlOutputCallbackTable[i].matchcallback != NULL) &&
 		(xmlOutputCallbackTable[i].matchcallback(URI) != 0)) {
-#if defined(LIBXML_HTTP_ENABLED) && defined(HAVE_ZLIB_H)
+#if defined(LIBXML_HTTP_ENABLED) && defined(LIBXML_ZLIB_ENABLED)
 		/*  Need to pass compression parameter into HTTP open calls  */
 		if (xmlOutputCallbackTable[i].matchcallback == xmlIOHTTPMatch)
 		    context = xmlIOHTTPOpenW(URI, compression);
@@ -3157,7 +3157,7 @@
 	 * convert as much as possible to the parser reading buffer.
 	 */
 	use = xmlBufUse(in->raw);
-	nbchars = xmlCharEncInput(in, 1);
+	nbchars = xmlCharEncInput(in, 0);
 	if (nbchars < 0) {
 	    xmlIOErr(XML_IO_ENCODER, NULL);
 	    in->error = XML_IO_ENCODER;
@@ -3273,7 +3273,7 @@
 	 * convert as much as possible to the parser reading buffer.
 	 */
 	use = xmlBufUse(in->raw);
-	nbchars = xmlCharEncInput(in, 1);
+	nbchars = xmlCharEncInput(in, 0);
 	if (nbchars < 0) {
 	    xmlIOErr(XML_IO_ENCODER, NULL);
 	    in->error = XML_IO_ENCODER;
diff --git a/xmllint.c b/xmllint.c
index 75d2f9b..6512540 100644
--- a/xmllint.c
+++ b/xmllint.c
@@ -3015,7 +3015,7 @@
     fprintf(f, "\t--repeat : repeat 100 times, for timing or profiling\n");
     fprintf(f, "\t--insert : ad-hoc test for valid insertions\n");
 #ifdef LIBXML_OUTPUT_ENABLED
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     fprintf(f, "\t--compress : turn on gzip compression of output\n");
 #endif
 #endif /* LIBXML_OUTPUT_ENABLED */
@@ -3295,7 +3295,7 @@
 	}
 #endif
 #ifdef LIBXML_OUTPUT_ENABLED
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 	else if ((!strcmp(argv[i], "-compress")) ||
 	         (!strcmp(argv[i], "--compress"))) {
 	    compress++;
diff --git a/xmlmodule.c b/xmlmodule.c
index e3a8bd6..a95ab66 100644
--- a/xmlmodule.c
+++ b/xmlmodule.c
@@ -340,6 +340,7 @@
 static int
 xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
 {
+XML_IGNORE_PEDANTIC_WARNINGS
 #ifdef _WIN32_WCE
     /*
      * GetProcAddressA seems only available on WinCE
@@ -349,6 +350,7 @@
     *symbol = GetProcAddress(handle, name);
 #endif
     return (NULL == *symbol) ? -1 : 0;
+XML_POP_WARNINGS
 }
 
 #endif /* _WIN32 */
diff --git a/xmlsave.c b/xmlsave.c
index fea135f..6c7418e 100644
--- a/xmlsave.c
+++ b/xmlsave.c
@@ -1595,31 +1595,31 @@
     if (cur->properties != NULL)
         xhtmlAttrListDumpOutput(ctxt, cur->properties);
 
-	if ((cur->type == XML_ELEMENT_NODE) &&
-		(cur->parent != NULL) &&
-		(cur->parent->parent == (xmlNodePtr) cur->doc) &&
-		xmlStrEqual(cur->name, BAD_CAST"head") &&
-		xmlStrEqual(cur->parent->name, BAD_CAST"html")) {
+    if ((cur->type == XML_ELEMENT_NODE) &&
+        (cur->parent != NULL) &&
+        (cur->parent->parent == (xmlNodePtr) cur->doc) &&
+        xmlStrEqual(cur->name, BAD_CAST"head") &&
+        xmlStrEqual(cur->parent->name, BAD_CAST"html")) {
 
-		tmp = cur->children;
-		while (tmp != NULL) {
-			if (xmlStrEqual(tmp->name, BAD_CAST"meta")) {
-				xmlChar *httpequiv;
+        tmp = cur->children;
+        while (tmp != NULL) {
+            if (xmlStrEqual(tmp->name, BAD_CAST"meta")) {
+                xmlChar *httpequiv;
 
-				httpequiv = xmlGetProp(tmp, BAD_CAST"http-equiv");
-				if (httpequiv != NULL) {
-					if (xmlStrcasecmp(httpequiv, BAD_CAST"Content-Type") == 0) {
-						xmlFree(httpequiv);
-						break;
-					}
-					xmlFree(httpequiv);
-				}
-			}
-			tmp = tmp->next;
-		}
-		if (tmp == NULL)
-			addmeta = 1;
-	}
+                httpequiv = xmlGetProp(tmp, BAD_CAST"http-equiv");
+                if (httpequiv != NULL) {
+                    if (xmlStrcasecmp(httpequiv, BAD_CAST"Content-Type") == 0) {
+                        xmlFree(httpequiv);
+                        break;
+                    }
+                    xmlFree(httpequiv);
+                }
+            }
+            tmp = tmp->next;
+        }
+        if (tmp == NULL)
+            addmeta = 1;
+    }
 
     if ((cur->type == XML_ELEMENT_NODE) && (cur->children == NULL)) {
 	if (((cur->ns == NULL) || (cur->ns->prefix == NULL)) &&
@@ -2704,7 +2704,7 @@
 		return(-1);
     }
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     if (cur->compression < 0) cur->compression = xmlGetCompressMode();
 #endif
     /*
diff --git a/xmlschemas.c b/xmlschemas.c
index 97a4db7..405f72a 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -2842,7 +2842,7 @@
     xmlSchemaFormatItemForReport(&des, NULL, ownerItem, ownerElem);
     if (refTypeStr == NULL)
 	refTypeStr = (const char *) xmlSchemaItemTypeToStr(refType);
-	xmlSchemaPErrExt(ctxt, ownerElem, error,
+    xmlSchemaPErrExt(ctxt, ownerElem, error,
 	    NULL, NULL, NULL,
 	    "%s, attribute '%s': The QName value '%s' does not resolve to a(n) "
 	    "%s.\n", BAD_CAST des, BAD_CAST name,
@@ -7391,8 +7391,8 @@
 	*/
 	if (defValue != NULL)
 	    use->defValue = defValue;
-	    if (defValueType == WXS_ATTR_DEF_VAL_FIXED)
-		use->flags |= XML_SCHEMA_ATTR_USE_FIXED;
+	if (defValueType == WXS_ATTR_DEF_VAL_FIXED)
+	    use->flags |= XML_SCHEMA_ATTR_USE_FIXED;
     }
 
 check_children:
@@ -27837,7 +27837,7 @@
 {
     if (ctxt == NULL)
         return;
-	ctxt->serror = serror;
+    ctxt->serror = serror;
     ctxt->error = NULL;
     ctxt->warning = NULL;
     ctxt->errCtxt = ctx;
diff --git a/xpath.c b/xpath.c
index 5ec058d..d134025 100644
--- a/xpath.c
+++ b/xpath.c
@@ -477,84 +477,66 @@
  *									*
  ************************************************************************/
 
-#ifndef TRIO_REPLACE_STDIO
-#define TRIO_PUBLIC static
+#ifndef NAN
+#define NAN (0.0 / 0.0)
 #endif
-#include "trionan.c"
 
-/*
- * The lack of portability of this section of the libc is annoying !
- */
-double xmlXPathNAN = 0;
-double xmlXPathPINF = 1;
-double xmlXPathNINF = -1;
-static double xmlXPathNZERO = 0; /* not exported from headers */
-static int xmlXPathInitialized = 0;
+#ifndef INFINITY
+#define INFINITY HUGE_VAL
+#endif
+
+double xmlXPathNAN = NAN;
+double xmlXPathPINF = INFINITY;
+double xmlXPathNINF = -INFINITY;
 
 /**
  * xmlXPathInit:
  *
  * Initialize the XPath environment
+ *
+ * Does nothing but must be kept as public function.
  */
 void
 xmlXPathInit(void) {
-    if (xmlXPathInitialized) return;
-
-    xmlXPathPINF = trio_pinf();
-    xmlXPathNINF = trio_ninf();
-    xmlXPathNAN = trio_nan();
-    xmlXPathNZERO = trio_nzero();
-
-    xmlXPathInitialized = 1;
 }
 
 /**
  * xmlXPathIsNaN:
  * @val:  a double value
  *
- * Provides a portable isnan() function to detect whether a double
- * is a NotaNumber. Based on trio code
- * http://sourceforge.net/projects/ctrio/
- *
  * Returns 1 if the value is a NaN, 0 otherwise
  */
 int
 xmlXPathIsNaN(double val) {
-    return(trio_isnan(val));
+#ifdef isnan
+    return isnan(val);
+#else
+    return !(val == val);
+#endif
 }
 
 /**
  * xmlXPathIsInf:
  * @val:  a double value
  *
- * Provides a portable isinf() function to detect whether a double
- * is a +Infinite or -Infinite. Based on trio code
- * http://sourceforge.net/projects/ctrio/
- *
- * Returns 1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise
+ * Returns 1 if the value is +Infinite, -1 if -Infinite, 0 otherwise
  */
 int
 xmlXPathIsInf(double val) {
-    return(trio_isinf(val));
+#ifdef isinf
+    return isinf(val) ? (val > 0 ? 1 : -1) : 0;
+#else
+    if (val >= HUGE_VAL)
+        return 1;
+    if (val <= -HUGE_VAL)
+        return -1;
+    return 0;
+#endif
 }
 
 #endif /* SCHEMAS or XPATH */
-#ifdef LIBXML_XPATH_ENABLED
-/**
- * xmlXPathGetSign:
- * @val:  a double value
- *
- * Provides a portable function to detect the sign of a double
- * Modified from trio code
- * http://sourceforge.net/projects/ctrio/
- *
- * Returns 1 if the value is Negative, 0 if positive
- */
-static int
-xmlXPathGetSign(double val) {
-    return(trio_signbit(val));
-}
 
+#ifdef LIBXML_XPATH_ENABLED
 
 /*
  * TODO: when compatibility allows remove all "fake node libxslt" strings
@@ -1423,7 +1405,8 @@
 	    default:
 		if (xmlXPathIsNaN(cur->floatval)) {
 		    fprintf(output, "Object is a number : NaN\n");
-		} else if (cur->floatval == 0 && xmlXPathGetSign(cur->floatval) != 0) {
+		} else if (cur->floatval == 0) {
+                    /* Omit sign for negative zero. */
 		    fprintf(output, "Object is a number : 0\n");
 		} else {
 		    fprintf(output, "Object is a number : %0g\n", cur->floatval);
@@ -3119,7 +3102,8 @@
 	if (xmlXPathIsNaN(number)) {
 	    if (buffersize > (int)sizeof("NaN"))
 		snprintf(buffer, buffersize, "NaN");
-	} else if (number == 0 && xmlXPathGetSign(number) != 0) {
+	} else if (number == 0) {
+            /* Omit sign for negative zero. */
 	    snprintf(buffer, buffersize, "0");
 	} else if ((number > INT_MIN) && (number < INT_MAX) &&
                    (number == (int) number)) {
@@ -4896,7 +4880,9 @@
 	return(-1);
     if (f == NULL)
         return(xmlHashRemoveEntry2(ctxt->funcHash, name, ns_uri, NULL));
-    return(xmlHashAddEntry2(ctxt->funcHash, name, ns_uri, XML_CAST_FPTR(f)));
+XML_IGNORE_PEDANTIC_WARNINGS
+    return(xmlHashAddEntry2(ctxt->funcHash, name, ns_uri, (void *) f));
+XML_POP_WARNINGS
 }
 
 /**
@@ -4977,7 +4963,9 @@
     if (ctxt->funcHash == NULL)
 	return(NULL);
 
-    XML_CAST_FPTR(ret) = xmlHashLookup2(ctxt->funcHash, name, ns_uri);
+XML_IGNORE_PEDANTIC_WARNINGS
+    ret = (xmlXPathFunction) xmlHashLookup2(ctxt->funcHash, name, ns_uri);
+XML_POP_WARNINGS
     return(ret);
 }
 
@@ -5728,7 +5716,8 @@
     default:
 	if (xmlXPathIsNaN(val)) {
 	    ret = xmlStrdup((const xmlChar *) "NaN");
-	} else if (val == 0 && xmlXPathGetSign(val) != 0) {
+	} else if (val == 0) {
+            /* Omit sign for negative zero. */
 	    ret = xmlStrdup((const xmlChar *) "0");
 	} else {
 	    /* could be improved */
@@ -5910,10 +5899,10 @@
     double ret;
 
     if (node == NULL)
-	return(xmlXPathNAN);
+	return(NAN);
     strval = xmlXPathCastNodeToString(node);
     if (strval == NULL)
-	return(xmlXPathNAN);
+	return(NAN);
     ret = xmlXPathCastStringToNumber(strval);
     xmlFree(strval);
 
@@ -5934,7 +5923,7 @@
     double ret;
 
     if (ns == NULL)
-	return(xmlXPathNAN);
+	return(NAN);
     str = xmlXPathCastNodeSetToString(ns);
     ret = xmlXPathCastStringToNumber(str);
     xmlFree(str);
@@ -5954,13 +5943,13 @@
     double ret = 0.0;
 
     if (val == NULL)
-	return(xmlXPathNAN);
+	return(NAN);
     switch (val->type) {
     case XPATH_UNDEFINED:
 #ifdef DEGUB_EXPR
 	xmlGenericError(xmlGenericErrorContext, "NUMBER: undefined\n");
 #endif
-	ret = xmlXPathNAN;
+	ret = NAN;
 	break;
     case XPATH_NODESET:
     case XPATH_XSLT_TREE:
@@ -5980,7 +5969,7 @@
     case XPATH_RANGE:
     case XPATH_LOCATIONSET:
 	TODO;
-	ret = xmlXPathNAN;
+	ret = NAN;
 	break;
     }
     return(ret);
@@ -7484,20 +7473,7 @@
     if ((ctxt == NULL) || (ctxt->context == NULL)) return;
     CAST_TO_NUMBER;
     CHECK_TYPE(XPATH_NUMBER);
-    if (xmlXPathIsNaN(ctxt->value->floatval))
-        ctxt->value->floatval=xmlXPathNAN;
-    else if (xmlXPathIsInf(ctxt->value->floatval) == 1)
-        ctxt->value->floatval=xmlXPathNINF;
-    else if (xmlXPathIsInf(ctxt->value->floatval) == -1)
-        ctxt->value->floatval=xmlXPathPINF;
-    else if (ctxt->value->floatval == 0) {
-        if (xmlXPathGetSign(ctxt->value->floatval) == 0)
-	    ctxt->value->floatval = xmlXPathNZERO;
-	else
-	    ctxt->value->floatval = 0;
-    }
-    else
-        ctxt->value->floatval = - ctxt->value->floatval;
+    ctxt->value->floatval = -ctxt->value->floatval;
 }
 
 /**
@@ -7589,25 +7565,7 @@
     xmlXPathReleaseObject(ctxt->context, arg);
     CAST_TO_NUMBER;
     CHECK_TYPE(XPATH_NUMBER);
-    if (xmlXPathIsNaN(val) || xmlXPathIsNaN(ctxt->value->floatval))
-	ctxt->value->floatval = xmlXPathNAN;
-    else if (val == 0 && xmlXPathGetSign(val) != 0) {
-	if (ctxt->value->floatval == 0)
-	    ctxt->value->floatval = xmlXPathNAN;
-	else if (ctxt->value->floatval > 0)
-	    ctxt->value->floatval = xmlXPathNINF;
-	else if (ctxt->value->floatval < 0)
-	    ctxt->value->floatval = xmlXPathPINF;
-    }
-    else if (val == 0) {
-	if (ctxt->value->floatval == 0)
-	    ctxt->value->floatval = xmlXPathNAN;
-	else if (ctxt->value->floatval > 0)
-	    ctxt->value->floatval = xmlXPathPINF;
-	else if (ctxt->value->floatval < 0)
-	    ctxt->value->floatval = xmlXPathNINF;
-    } else
-	ctxt->value->floatval /= val;
+    ctxt->value->floatval /= val;
 }
 
 /**
@@ -7632,7 +7590,7 @@
     CHECK_TYPE(XPATH_NUMBER);
     arg1 = ctxt->value->floatval;
     if (arg2 == 0)
-	ctxt->value->floatval = xmlXPathNAN;
+	ctxt->value->floatval = NAN;
     else {
 	ctxt->value->floatval = fmod(arg1, arg2);
     }
@@ -9751,13 +9709,9 @@
 
     f = ctxt->value->floatval;
 
-    /* Test for zero to keep negative zero unchanged. */
-    if ((xmlXPathIsNaN(f)) || (f == 0.0))
-	return;
-
-    if ((f >= -0.5) && (f < 0.0)) {
-        /* Negative zero. */
-        ctxt->value->floatval = xmlXPathNZERO;
+    if ((f >= -0.5) && (f < 0.5)) {
+        /* Handles negative zero. */
+        ctxt->value->floatval *= 0.0;
     }
     else {
         double rounded = floor(f);
@@ -10104,7 +10058,7 @@
     if (cur == NULL) return(0);
     while (IS_BLANK_CH(*cur)) cur++;
     if ((*cur != '.') && ((*cur < '0') || (*cur > '9')) && (*cur != '-')) {
-        return(xmlXPathNAN);
+        return(NAN);
     }
     if (*cur == '-') {
 	isneg = 1;
@@ -10140,7 +10094,7 @@
 
         cur++;
 	if (((*cur < '0') || (*cur > '9')) && (!ok)) {
-	    return(xmlXPathNAN);
+	    return(NAN);
 	}
         while (*cur == '0') {
 	    frac = frac + 1;
@@ -10173,7 +10127,7 @@
       }
     }
     while (IS_BLANK_CH(*cur)) cur++;
-    if (*cur != 0) return(xmlXPathNAN);
+    if (*cur != 0) return(NAN);
     if (isneg) ret = -ret;
     if (is_exponent_negative) exponent = -exponent;
     ret *= pow(10.0, (double)exponent);
@@ -12432,7 +12386,7 @@
 			    default:
 				break;
 			}
-		    } else if (cur->type == type) {
+		    } else if (cur->type == (xmlElementType) type) {
 			if (cur->type == XML_NAMESPACE_DECL)
 			    XP_TEST_HIT_NS
 			else
diff --git a/xpointer.c b/xpointer.c
index c8ebff3..6a41f07 100644
--- a/xpointer.c
+++ b/xpointer.c
@@ -467,8 +467,6 @@
 	return(NULL);
     if (end == NULL)
 	return(NULL);
-    if (start->type != XPATH_POINT)
-	return(NULL);
     if (end->type != XPATH_POINT)
 	return(NULL);
 
diff --git a/xzlib.c b/xzlib.c
index 8bafbd3..a839169 100644
--- a/xzlib.c
+++ b/xzlib.c
@@ -31,10 +31,10 @@
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
 #endif
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 #include <zlib.h>
 #endif
-#ifdef HAVE_LZMA_H
+#ifdef LIBXML_LZMA_ENABLED
 #include <lzma.h>
 #endif
 
@@ -76,7 +76,7 @@
     char padding1[32];          /* padding allowing to cope with possible
                                    extensions of above structure without
 				   too much side effect */
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     /* zlib inflate or deflate stream */
     z_stream zstrm;             /* stream structure in-place (not a pointer) */
 #endif
@@ -130,7 +130,7 @@
     xz_error(state, LZMA_OK, NULL);     /* clear error */
     state->pos = 0;             /* no uncompressed data yet */
     state->strm.avail_in = 0;   /* no input data yet */
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     state->zstrm.avail_in = 0;  /* no input data yet */
 #endif
 }
@@ -272,7 +272,7 @@
     return 0;
 }
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 static int
 xz_avail_zstrm(xz_statep state)
 {
@@ -349,7 +349,7 @@
     return 1;
 }
 
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
 
 /* Get next byte from input, or -1 if end or error. */
 #define NEXT() ((strm->avail_in == 0 && xz_avail(state) == -1) ? -1 : \
@@ -415,7 +415,7 @@
             xz_error(state, LZMA_MEM_ERROR, "out of memory");
             return -1;
         }
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
         /* allocate inflate memory */
         state->zstrm.zalloc = Z_NULL;
         state->zstrm.zfree = Z_NULL;
@@ -449,7 +449,7 @@
         state->direct = 0;
         return 0;
     }
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     /* look for the gzip magic header bytes 31 and 139 */
     if (strm->next_in[0] == 31) {
         strm->avail_in--;
@@ -550,7 +550,7 @@
             action = LZMA_FINISH;
 
         /* decompress and handle errors */
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
         if (state->how == GZIP) {
             state->zstrm.avail_in = (uInt) state->strm.avail_in;
             state->zstrm.next_in = (Bytef *) state->strm.next_in;
@@ -592,13 +592,13 @@
     /* update available output and crc check value */
     state->have = had - strm->avail_out;
     state->next = strm->next_out - state->have;
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
     state->zstrm.adler =
         crc32(state->zstrm.adler, state->next, state->have);
 #endif
 
     if (ret == LZMA_STREAM_END) {
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
         if (state->how == GZIP) {
             if (gz_next4(state, &crc) == -1 || gz_next4(state, &len) == -1) {
                 xz_error(state, LZMA_DATA_ERROR, "unexpected end of file");
@@ -788,7 +788,7 @@
     /* free memory and close file */
     if (state->size) {
         lzma_end(&(state->strm));
-#ifdef HAVE_ZLIB_H
+#ifdef LIBXML_ZLIB_ENABLED
         if (state->init == 1)
             inflateEnd(&(state->zstrm));
         state->init = 0;