diff --git a/CHANGES b/CHANGES
index 4a65bb1..252e7ad 100644
--- a/CHANGES
+++ b/CHANGES
@@ -166,537 +166,15 @@
 
   *) Introduction of APR DBD layer.  [Nick Kew]
 
-Changes with APR-util 1.1.2
 
-  *) Fix libaprutil.rc for Win32 builds [William Rowe, Justin Erenkrantz]
+Changes for APR-util 1.1.x and later:
 
-Changes with APR-util 1.1.1
+  *) http://svn.apache.org/viewvc/apr/apr-util/branches/1.1.x/CHANGES?view=markup
 
-  *) Fix memory leak in buckets when using APR_POOL_DEBUG mode. [Joe Schaefer]
+Changes for APR-util 1.0.x and later:
 
-  *) find_apu.m4: Try installed APR-util before bundled copy if --with-apr-util
-     not passed to configure.  [Justin Erenkrantz] 
+  *) http://svn.apache.org/viewvc/apr/apr-util/branches/1.0.x/CHANGES?view=markup
 
-Changes with APR-util 1.1.0
+Changes for APR-util 0.9.x and later/earlier:
 
-  *) LDAP: Move all certificate initialisation, and the creation of SSL
-     and TLS connections into the apr_ldap_set_option() API. Add support
-     for client certificates. [Graham Leggett]
- 
-  *) Emit the run-time link path option in apu-config after installation
-     if the user is linking with libtool.  [Justin Erenkrantz]
-
-  *) Port testmd4 and testmd5 to the new test suite. [Thom May]
-
-  *) Allow passing NULL inbuf/inbytes_left parameters to
-     apr_xlate_conv_buffer(), required to correctly terminate the
-     output buffer for some stateful character set encodings.
-     [Joe Orton]
-
-  *) Link libaprutil against the libraries on which it depends.
-     PR 11122.  [Joe Orton]
-
-  *) Add apr_brigade_insert_file() function, to safely insert a file
-     into a brigade, regardless of size.  [Joe Orton]
-
-Changes with APR-util 1.0.2
-
-  *) Teach apr_ldap_init() how to handle STARTTLS in addition to the existing
-     SSL support. Add apr_ldap_option API. [Graham Leggett]
-
-  *) Rework the LDAP toolkit detection to be more accurate than "OpenLDAP
-     detected regardless", while remaining backwards compatible with v1.0.
-     [Graham Leggett]
-
-  *) Added the apr_ldap_ssl_add_cert() API to allow multiple certificates
-     to be stored and used when establishing an SSL connection to different
-     LDAP servers. [Brad Nicholes]
-
-  *) Fix the detection of ldap.h on Solaris - it needs lber.h to be
-     defined first. [Graham Leggett]
-
-  *) Add a build script to create a solaris package. [Graham Leggett]
-
-Changes with APR-util 1.0.1
-
-  *) Add support for Berkeley DB 4.3.  [Jani Averbach <jaa jaa.iki.fi>]
-
-  *) SECURITY: CAN-2004-0786 (cve.mitre.org)
-     Fix input validation in apr_uri_parse() to avoid passing negative
-     length to memcpy for malformed IPv6 literal addresses.
-     [Joe Orton]
-
-Changes with APR-util 1.0
-
-  *) Only install apu-$MAJOR-config and add appropriate detection code to
-     find_apu.m4 (APU_FIND_APU).  [Max Bowsher <maxb ukf.net>]
-
-  *) Overhaul support for LDAP URL parsing. Instead of using incompatible
-     URL parsers and memory that needs freeing, apr-util provides a parser
-     which parses the URL and allocates memory from a pool. [Graham Leggett]
-
-  *) Remove support for LDAP v2.0 SDK toolkits. This will be added
-     back properly later assuming there is demand for it. In the mean
-     time, please use an LDAP v3.0 SDK toolkit. [Graham Leggett]
-
-  *) Add an apr_ldap_err_t structure to handle the return of LDAP
-     specific error codes. [Graham Leggett, Brad Nicholes]
-
-  *) Add APR functions to do the job of ldap_init(), hiding toolkit
-     specific SSL/TLS handling. Code derived from httpd util_ldap.
-     [Graham Leggett]
-
-  *) Add an RPM spec file derived from Fedora Core.
-     [Graham Leggett, Joe Orton]
-
-  *) The whole codebase was relicensed and is now available under
-     the Apache License, Version 2.0 (http://www.apache.org/licenses).
-     [Apache Software Foundation]
-
-  *) A new function, apr_reslist_invalidate, was added so that invalid
-     resources can be removed from a reslist instead of being returned
-     to the reslist in a broken state.  [Nick Kew <nick webthing.com>]
-
-  *) Switch to a single, top-level make. [Greg Stein]
-
-  *) Add timeout feature to apr_reslist_acquire().  
-     [Mladen Turk <mturk apache.org>]
-
-  *) Pass error codes returned from constructors all the way back to
-     the reslist consumer. Also fix a minor reslist memory leak that could
-     happen when a constructor returns an error code.  PR 23492.
-     [Snke Tesch <st@kino-fahrplan.de>, Aaron Bannert]
-
-  *) The following header files have been removed:
-
-     apu_compat.h
-
-Changes with APR-util 0.9.5
-
-  *) Fix corrupt output from the apr_xlate_* interfaces on AIX 4.x.
-     [Joe Orton]
-
-  *) Change the order in which ldap.h and lber.h are defined, to fix
-     a compile bug in Solaris v2.8 which requires lber.h then ldap.h.
-     PR 27379.  [Andrew Connors <andy.connors idea.com>]
- 
-  *) Restore support for SHA1 passwords in apr_validate_password.
-     PR 17343.  [Paul Querna <chip force-elite.com>]
-
-  *) Fix DESTDIR install for bundled expat library.  PR 14076
-     [David S. Madole <david madole.net>]
-
-  *) Fix occasional crash in apr_rmm_realloc().  PR 22915.
-     [Jay Shrauner <shrauner inktomi.com>]
-
-  *) Fix apr_dbm_exists() for sdbm when sizeof(int) != sizeof(size_t). 
-     [Joe Orton]
-
-  *) The whole codebase was relicensed and is now available under
-     the Apache License, Version 2.0 (http://www.apache.org/licenses).
-     [Apache Software Foundation]
-
-  *) Fix xlate.c compile failure on AIX 5.2.  PR 25701.  [Jeff Trawick]
-
-  *) Fixed a bug in apr_rmm that would cause it to mishandle blocks of
-     a size close to the one requested from the allocator.
-     [Kevin Wang <xwang_tech yahoo.com>]
-
-Changes with APR-util 0.9.4
-
-  *) Changed apr_bucket_alloc_create() so that it uses the allocator
-     from the pool that was passed in rather than creating its own.
-     Also, the bucket_allocator is now allocated from the apr_allocator_t
-     rather than using apr_palloc().  Added apr_bucket_alloc_create_ex()
-     which takes an apr_allocator_t* directly rather than an apr_pool_t*.
-     [Cliff Woolley, Jean-Jacques Clar]
-
-  *) Added debugging consistency checks to the buckets code.  Add
-     -DAPR_BUCKET_DEBUG to the build flags to enable.
-     [Cliff Woolley]
-
-  *) Make the version of the db library APU built against visible.
-     [Thom May]
-
-  *) Fix a problem with VPATH builds copying the APR rules.mk into the
-     source directory rather than the build directory.  [Justin Erenkrantz]
-
-  *) SECURITY [httpd incident CAN-2003-0189] Address a thread safety
-     issue with apr_password_validate() on AIX, Linux, Mac OS X, and
-     possibly other platforms.  [Jeff Trawick, Justin Erenkrantz]
-
-  *) Fix a problem with LDAP configuration which caused subsequent
-     configure tests to fail since LIBS contained LDAP libraries for
-     subsequent tests but LDFLAGS no longer included the path to such 
-     LDAP libraries.  [Jeff Trawick]
-
-  *) Fix a problem preventing the use of the bundled Expat when APR-util
-     is built stand-alone.  [Jeff Trawick]
-
-  *) Use the same compiler and preprocessor for the APR-util config tests
-     which were used by APR.  The user can override this via CC and CPP.
-     This was done all along for the actual build, but not necessarily
-     for the config tests.  [Jeff Trawick]
-
-  *) Fix apr_uuid_parse() on EBCDIC machines.  [Jeff Trawick]
-
-  *) Fix alignment problem when allocating memory using apr_rmm. The problem
-     showed up while trying to write a double in the memory allocated.
-     [Madhusudan Mathihalli]
-
-Changes with APR-util 0.9.3
-
-  *) Allow apr_date_parse_rfc to parse 'Sun, 06-Nov-1994 08:49:37 GMT' as a
-     valid date.  [Dmitri Tikhonov <dmitri@netilla.com>]
-
-  *) Fix error in apu-config when symlinks are involved.
-     [Garrett Rooney <rooneg@electricjellyfish.net>]
-
-Changes with APR-util 0.9.2
-
-  *) Fix the APR_BUCKET_IS_foo() macros so they parenthesize their parameter.
-     This fixes compile problems with some types of parameters.
-     [Jim Carlson <jcarlson@jnous.com>]
-
-  *) Queue overwrite, we now return the item pushed, not a reference to it. 
-     [Paul Marquis <PMarquis@pobox.com, Jacob Lewallen <jlwalle@cs.ucr.edu>]
-
-  *) Remove include/apr_ldap.h on distclean.  PR 15592.  [Justin Erenkrantz]
-
-  *) Fix race conditions in apr_queue.
-     [Jacob Lewallen <jlwalle@cs.ucr.edu>]
-
-  *) Stop buildconf copying rules.mk, copy it at configure time. 
-     [Thom May]
-
-  *) Make buildconf copy rules.mk as well. 
-     [Garrett Rooney <rooneg@electricjellyfish.net>]
-
-  *) Add --includedir flag to apu-config.  [Justin Erenkrantz]
-
-  *) Fix brokenness in sdbm when sizeof(int) != sizeof(size_t)
-     (e.g., 64-bit AIX, 64-bit Solaris).  PR 14861.  [Jeff Trawick]
-
-  *) Have buildconf copy required files from apr so that apr-util can build
-     on its own.  [Craig Rodrigues <rodrigc@attbi.com>]
-
-  *) Detect OpenLDAP when used with Solaris 9. PR 13427.
-     [Gary Algier <gaa@ulticom.com>]
-
-  *) Detect Berkeley DB 4.1 when compiled with --with-uniquenames
-     [Thom May]
-
-  *) Allow apu-config to work in symlinked install directories when
-     'realpath' is available.  [Justin Erenkrantz]
-
-  *) Fix bug in apr_strmatch when used with case-insensitive patterns.
-     [Justin Erenkrantz]
-
-  *) Allow apr_queue to have greater than int number of elements.
-     [Justin Erenkrantz]
-
-  *) Detect Berkeley DB 4.0 compiled with --with-uniquenames.
-     [Philip Martin <philip@codematters.co.uk>]
-
-  *) Allocate brigades from a bucket allocator rather than a pool. [Brian Pane]
-
-  *) Update with the latest APR renames [Thom May]
-
-  *) Update doxygen tags.  [Justin Erenkrantz]
-
-  *) Add apr_ldap.hw for Windows build.
-     [Andre Schild <A.Schild@aarboard.ch>]
-
-  *) Add IPv6 literal address support to apr_uri_parse(), apr_uri_unparse(), 
-     and apr_uri_parse_hostinfo().  PR 11887  [Jeff Trawick]
-
-  *) Add apr_brigade_writev()  [Brian Pane]
-
-  *) Add support for Berkeley DB 4.1.  [Justin Erenkrantz]
-
-  *) Add --bindir option to apu-config.  [Justin Erenkrantz]
-
-Changes with APR-util 0.9.1
-
-  *) Add versioning infrastructure.
-     [Justin Erenkrantz]
-
-  *) Running "make check" in the toplevel directory or the test/ directory
-     will build and run all test programs.  [Aaron Bannert]
-
-  *) Bug #9789 : NDBM support 
-     [Toomas Soome <tsoome@muhv.pri.ee>, Ian Holsman]
-
-  *) Added a Thread safe FIFO bounded buffer (apr_queue) [Ian Holsman]
-
-  *) Changed file_bucket_setaside() to use apr_file_setaside() instead
-     of turning the file bucket into an mmap bucket.  [Brian Pane]
-
-  *) Install libaprutil support libraries before installing libaprutil
-     itself, since on some platforms libaprutil is relinked during
-     make install and the support libraries need to exist already.
-     [Jeff Trawick]
-
-  *) Added a Resource List API for threadsafe access to persistent
-     and dynamically created user-defined resources.  [Aaron Bannert]
-
-  *) Adopted apr-util/xlate from apr/i18n for inclusion of apr-iconv
-     as required by missing libiconv.  [William Rowe]
-
-  *) Adopted apr-util/crypto/ uuid and md5 from apr.  [William Rowe]
-
-  *) Look for expat in lib64 directories.  [Peter Poeml <poeml@suse.de>]
-
-  *) Faster implementation of apr_brigade_puts()  [Brian Pane]
-
-  *) Fixed a segfault in apr_date_parse_rfc() for some date formats
-     where it was trying to overlay a potentially static input
-     string even though it didn't really need to.
-     [Cliff Woolley, Doug MacEachern]
-
-  *) Ensure that apu-config does not print libtool libraries when
-     using --libs.  [Justin Erenkrantz]
-
-  *) Added apr_bucket_file_enable_mmap() function to the bucket
-     API to let an application control whether a file bucket may
-     be turned into an mmap bucket upon read.  (The default remains
-     to do the mmap, but this function lets the app prevent the
-     mmap in contexts where mmap would be a bad idea.  Examples
-     include multiprocessors where mmap doesn't scale well and
-     NFS-mounted filesystems where a bus error can result if
-     a memory-mapped file is removed or truncated.) [Brian Pane]
-
-  *) Added string-matching API (apr_strmatch.h)  [Brian Pane]
-
-  *) Rearrange INCLUDES so that APRUTIL_PRIV_INCLUDES is always
-     first.  [Garrett Rooney <rooneg@electricjellyfish.net>]
-
-  *) Add --old-expat option to apu-config to allow users of apr-util to
-     determine what expat it should expect to be installed.  If the
-     flag is set to yes, it should include xmlparse.h.  If it is set to
-     no, it should include expat.h.  [Justin Erenkrantz]
-
-  *) Fix exporting of includes in apu-config.  [Justin Erenkrantz]
-
-  *) Change bucket brigades API to allow a "bucket allocator" to be
-     passed in at certain points.  This allows us to implement freelists
-     so that we can stop using malloc/free so frequently.
-     [Cliff Woolley, Brian Pane]
-
-  *) add apr_rmm_realloc() function
-     [Madhusudan Mathihalli <madhusudan_mathihalli@hp.com>]
-
-  *) renames: apr_ansi_time_to_apr_time becomes apr_time_ansi_put
-     ap_exploded_time_t becomes apr_time_exp_t
-     [Thom May <thom@planetarytramp.net>]
-
-  *) Add detection support for FreeBSD's expat and expat2 ports.
-     [Justin Erenkrantz]
-
-  *) Deprecate check_brigade_flush(), which had several nasty bugs, and
-     which was causing apr_brigade_write()'s logic to be less than obvious.
-     Everything is now done in a slightly rearranged apr_brigade_write().
-     [Cliff Woolley]
-
-  *) Don't add /usr/include to the INCLUDES variable on expat's account.
-     [Joe Orton <joe@manyfish.co.uk>]
-
-  *) Remove the autoconf 2.5x cache directory in buildconf.
-     [Joe Orton <joe@manyfish.co.uk>]
-
-  *) BerkleyDB should NULL out the key if it is @EOF in vt_db_nextkey
-     [Ian Holsman]
-
-  *) Add ability to natively fetch and split brigades based on LF lines.
-     [Justin Erenkrantz]
-
-  *) add --with-berkeley-db=DIR & --with-gdbm  configure flags
-     [Ian Holsman/Justin Erenkrantz]
-
-  *) Fix expat detection to recognize installed versions.
-     [Eric Gillespie, Jr. <epg@pretzelnet.org>]
-
-  *) Add find_apu.m4 to allow third-party programs that use APR-util
-     to have a standard m4 macro for detection.  [Justin Erenkrantz]
-
-  *) Add apu-config - a shell script to allow third-party programs
-     easy access to APR configuration parameters.  [Justin Erenkrantz]
-
-  *) Add GMT offset calculation to apr_date_parse_rfc().  
-     [Justin Erenkrantz]
-
-  *) Introduce the apr_rmm api, to allow relocatable memory management
-     of address-independent data stores, such as shared memory.
-     [William Rowe]
-
-  *) Rework and fix VPATH-build support.  [Justin Erenkrantz]
-
-  *) Add support for Berkeley DB4.  [Justin Erenkrantz]
-
-  *) Improve testdbm help.  [Justin Erenkrantz]
-
-  *) Improve autoconf detection of DBMs.  [Justin Erenkrantz]
-
-  *) BerkeleyDBM v2 now checks minor level for cursor ops [Ian Holsman]
-
-  *) Reading a file bucket bigger than APR_MMAP_LIMIT (4MB) now yields
-     a string of 4MB mmap buckets, rather than a string of 8KB heap buckets
-     plus a 4MB mmap bucket.  To accomodate this, the mmap bucket destroy
-     function explicitly deletes the apr_mmap_t after last reference
-     to avoid having too much of a large file mapped at once if possible.
-     [Cliff Woolley]
-
-  *) Multi-DBM support (via apr_dbm_open_ex).  [Ian Holsman]
-
-  *) Use apr_mmap_dup in mmap_setaside().  [Brian Pane <bpane@pacbell.net>]
-
-  *) Dropped the "w" parameter from apr_bucket_heap_create() and
-     apr_bucket_heap_make().  That parameter was originally intended
-     to return the amount of data copied into the bucket, but it
-     ended up being unnecessary because that amount is invariant from
-     the size of the data and is available as b->length in the
-     resulting bucket anyway.  [Cliff Woolley]
-
-  *) Fix Makefile conversion for BSD/OS.  [Cliff Woolley]
-
-  *) Use APR_XtOffsetOf instead of offsetof() in the ring macros for
-     portability.  [Cliff Woolley]
-
-  *) We now create exports.c and export_vars.h, which in turn create
-     exports.c.  From this we generate two more files with different
-     purposes: aprutil.exp - list of exported symbols; and exports.lo
-     (exports.o) - an object file that can be linked with an executable
-     to force resolution of all apr-util symbols.   [Aaron Bannert]
-
-  *) Fix Berkley DBM support [Ian Holsman <ianh@apache.org>]
-
-  *) Fix apr_brigade_vprintf so that it can handle more than
-     4k of data at one time.  [Cody Sherr <csherr@covalent.net>]
-
-  *) prefix UNP_* flags with APR_URI_
-
-     rename:
-     apr_uri_components                  -> apr_uri_t
-     apr_uri_unparse_components          -> apr_uri_unparse
-     apr_uri_parse_components            -> apr_uri_parse
-     apr_uri_parse_hostinfo_components   -> apr_uri_parse_hostinfo
-
-     s/APU_URI_/APR_URI_/g
-     [Perl]
-
-  *) Landed the link-to-LDAP to the build process, and the LDAP v2/v3
-     compatibility functions.
-     [Dave Carrigan <dave@rudedog.org>, Graham Leggett]
-
-  *) Fix URI unparse function to handle the case where it would place a @
-     when both the username and password were present but omitted.
-     [Jon Travis <jtravis@covalent.net]
-
-  *) Added apr_xml_parse_file() routine and a testxml program.
-     [Ian Holsman <ianh@cnet.com>]
-
-  *) Extend apr_bucket struct to add a pointer to a function used
-     to free the bucket. This change enables custom buckets to
-     completely specify how they are to be allocated and freed.
-     Before this change, custom buckets were required to use the 
-     same memory allocation scheme as the standard APR buckets.
-     [Saeid Sakhitab, Bill Stoddard, Cliff Woolley, Roy Fielding]
-
-  *) Install Expat when installing APR-util.  [Justin Erenkrantz]
-
-  *) Make APR-util configure script rely on APR.  This removes the locally
-     generated copy of libtool and uses the one in APR.  Fix up how we
-     call the expat configure script.  Generate config.nice file.
-     [Justin Erenkrantz]
-
-  *) The apr_bucket lengths are now consistently apr_size_t, while any
-     apr_brigade lengths (short of a read) are consistently apr_off_t.
-     This is required for APR_HAS_LARGE_FILES handling.  [William Rowe]
-
-  *) apr_bucket_file_create() and apr_bucket_file_make() now take a pool
-     parameter which is the pool into which any needed data structures
-     should be created during file_read().  This is used for MMAPing the
-     file and reopening the file if the original apr_file_t is in XTHREAD
-     mode.  [Cliff Woolley]
-
-  *) apr_brigade_partition() now returns an apr_status_t. [Cliff Woolley]
-
-  *) Add MD4 implementation in crypto.  [Sander Striker, Justin Erenkrantz]
-
-  *) Moved httpd 2.0.18's util_date to apr_date and enhanced its parsing
-     capabilities.  [Justin Erenkrantz]
-
-  *) Moved httpd 2.0.18's util_uri to apr_uri and name-protected its
-     symbols and functions.  [Justin Erenkrantz, Roy Fielding]
-
-  *) Rename field "private" in struct apr_xml_elem to "priv" for C++
-     compatibility.  PR #7727  [Joshua MacDonald <jmacd@cs.berkeley.edu>]
-
-  *) Make APR_IMPLEMENT_EXTERNAL_HOOK_BASE generate a 
-     ${namespace}_hook_get_${hookname} function to fetch the
-     list of registered hooks [Doug MacEachern]
-
-  *) Allow LTFLAGS to be overridden by the configure command-line
-     (default="--silent") and introduce LT_LDFLAGS.  [Roy Fielding]
-
-  *) Add APR_SHARELOCK support to apr_sdbm_open(), locking read operations
-     with a shared lock and all write ops with an excl lock.  [Will Rowe]
-
-  *) Namespace protect apr_sdbm, and normalize the return values (including
-     the apr_sdbm_fetch, apr_sdbm_firstkey and apr_sdbm_nextkey functions).
-     Normalized the get/clear error function names, and stores the actual 
-     apr error for apr_sdbm_error_get. [Will Rowe]
-
-  *) Introduce an apr_fileperms_t argument to apr_dbm_open(). [Will Rowe]
-
-  *) Removed apr_bucket_do_create() macro, which was causing warnings
-     about unreachable code in some compilers (notably MSVC).  What
-     used to be done by this macro is now done inline in the various
-     apr_bucket_foo_create() functions.  [Cliff Woolley]
-
-  *) Make clean, distclean, and extraclean consistently according to the
-     Gnu makefile guidelines.  [Justin Erenkrantz <jerenkrantz@ebuilt.com>]
-
-  *) Migrate the --disable-libtool changes from APR to APR-util.
-     This cleans things up, and allows more flexibility when building
-     programs.  [Ryan Bloom]
-
-  *) Allow APR-util to be compiled without libtool.  The default is
-     to use libtool, but it can turned off with --disable-libtool
-     on the configure command.  [Ryan Bloom]
-
-  *) Repair calling convention for apr_register_optional_fn to
-     eliminate GP fault on Win32.  [William Rowe]
-
-  *) Substantial changes to correct linkage and declarations for
-     generic hooks on dso architectures.  [Ben Laurie, Will Rowe]
-
-  *) apr_bucket_shared_destroy() now returns a boolean value.
-     [Cliff Woolley]
-
-  *) We have to initialize the heap buckets to the correct length.
-     we were seeing heap buckets with 17 chars in them reporting
-     a length of 9017, because they were initialized to the amount
-     of memory allocated, instead of the amount of memory used.
-     This was only an issue for heap buckets created by the
-     apr_brigade_* functions.   [Ryan Bloom]
-
-  *) apr_bucket_init_types() and apr_bucket_insert_type() have been
-     removed... they're not needed anymore. [Cliff Woolley]
-
-  *) The apr_bucket_shared and apr_bucket_simple structures have been
-     removed as an API simplification/optimization.  This should be
-     transparent outside APR-util except to callers who attempt to
-     directly manipulate the buckets' internal structure (which is
-     not recommended anyway) and to callers who create their own
-     bucket types. [Cliff Woolley]
-
-  *) apr_bucket_simple_split() and apr_bucket_simple_copy() are now
-     exported functions, which could be helpful in implementing
-     external bucket types. [Cliff Woolley]
-
-  *) The third parameter to apr_bucket_shared_make() is now
-     'apr_off_t length' rather than 'apr_off_t end', since the
-     end usually had to be computed by the caller and all we
-     really want is the length anyway. [Cliff Woolley]
-
+  *) http://svn.apache.org/viewvc/apr/apr-util/branches/0.9.x/CHANGES?view=markup
