diff --git a/CHANGES b/CHANGES
index 9fa543b..7fae184 100644
--- a/CHANGES
+++ b/CHANGES
@@ -41,504 +41,11 @@
   *) 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]
+Changes for APR-util 1.0.x and later:
 
-  *) Rework the LDAP toolkit detection to be more accurate than "OpenLDAP
-     detected regardless", while remaining backwards compatible with v1.0.
-     [Graham Leggett]
+  *) http://svn.apache.org/viewvc/apr/apr-util/branches/1.0.x/CHANGES?view=markup
 
-  *) 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]
+Changes for APR-util 0.9.x and later/earlier:
 
-  *) 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
