1.9.1:
- failed unlinks's are no longer logged (it's normal for many to happen on a configuration reload).
- appearantly some webservers will return multiple content encoding types (i.e. "Content-Encoding: gzip, x-gzip"), detection
  of content encoding was fixed to support this.
- a bug which prevented middleman from using any forwarding proxy with no ICP type was fixed.
- added 'portrange' option to profiles entries.
- a bug in header filtering was fixed that caused headers that aren't handled internally by middleman from the web server
  to not be sent to the client.
- server headers can now be filtered using the header filtering feature.
- some fixes were made to the profile checking algorithm.
- fixed memory corruption in mime.c (was using sizeof(MIME_LIST) where sizeof(struct MIME_LIST_LIST) should have been).

1.9:
- fixed a minor bug where if the header filtering function returned an empty list
  the full header would be sent.
- threads now linger around for a while after client disconnects waiting to handle new connections,
  this should help alleviate any performance problems releating to thread creation time.
- fixed use of uninitialized cachemap->atime.
- long regular expressions in keyword entries no longer get <br>'s inserted into them when editing.
- all inputs for a file size can now use a suffix to represent the units.. i.e. 1KB, 1M, 2GB.
- filesystem unlink's are now queued and performed slowly by a seperate thread, this reduces
  momentary lockups when cleaning the cache.
- support for Internet Cache Protocol (ICP) was added.
- a rewrite entry was added to workaround apache 1.3 bug where requests for .tar.gz files have
  a "Content-Encoding: gzip" header added and get decompressed for some clients.
- access to URL commands can now be restricted.
- forward entries can now be enabled using URL commands.
- added 'URL Command' option to entries in Profiles section, this allows entries to be enabled 
  only when certain URL commands are used.
- removed 'Host', 'File', and 'URL Command' options from every section except Filter, Mime, and Profiles.. the use of Profiles
  is preferred and far more flexible.
- support for multiple cache directories was added.
- protocol and hostname in URL's are internally converted to lowercase, this makes http://blah.com and HttP://BlaH.COm access the
  same cache file.

1.8.3:
- NTLM authentication is now optional at compile time
- cache directory now created with make install target
- added new 'profiles' section that allows profiles to be enabled based on URL of request.
- a '!' can now be placed in front of a profile name in any section (besides access) to enable
  the entry only if the profile is not enabled.
- added 'profiles' URL command to show list of enabled profiles.
- cleaned up the default configuration, many releated options are now placed in the same profile and
  enabled/disabled together from the profiles section.

1,8.2:
- 'must-revalidate' directive in cache-control header is now honored.
- memory for the cache file is preallocated to the size of the file if it's known.
- content-length is now checked if possible before caching to see if it's too large.
- fixed error in p_mremap wrapper when new_size < old_size.
- the cache now writes changes into a journal to maintain state, there is no longer any need
  to scan the directory structure at startup.
- daylight savings time is now taken into account when calculating the gmt offset.
- cache.c was reorganized, files are now always cached but validated if the server
  gave instructions to not cache it.
- the 'store' url command was removed, it no longer has any use.
- added option to specify if the proxy should be allowed to violate the RFC to improve caching
  performance.
- the 'Use compression' option was changed to 'Compress outgoing', and a new 'Compress incoming'
  option was added which will set the Accept-Encoding header even if the client doesn't
  support it.  
- "Percent of age freshness" option was renamed to "Last-Modified time factor".
- added "INTERFACE" and "PORT" variables for templates and external parsers to reflect the
  proxy interface and port number the connection was made to.
- added option to template entries to specify whether the content can be parsed for variables.
- added new builtin template 'proxy.pac' which is a script that configures the browser to use
  the proxy.
- cache file atime and mtime are now updated properly.

1.8.1:
- added 'prefetch window' option to cache; prefetched files that are requested within this
  time period afterwards are exempt from any refresh rules.
- cachable files that are below the minimum age are now cached but validated
  on every request until they are above the minimum age.
- fixed a bug that caused the proxy to attempt to validate a page without setting the
  if-modified-since header.
- fixed unsafe strncpy in http_header_list_parse.
- fixed unsafe sscanf in http_header_parse_response.
- fixed infinite loop in gzip compression/decompression routine.
- the path in a URL is now resolved to an absolute path (i.e. /foo/../bar becomes /bar).
- fixed detection for libpcre and libpcre in the configure script.
- the HTML parser now limits nesting to 64 levels; this fixes a potential problem with
  memory exhaustion when recursively free'ing the structures.
- added new option to tags in prefetch feature to specify maximum recursion level.
- fixed buffer overflow in url_parse.
- added connection timeout option.
- proper headers are now sent with prefetch requests.
- added support for PAM authentication.
- usernames in access rules are now a regular expression.
- the proxy now keeps track of the cache files on disk, this greatly improves the performance
  of the cache eviction function.
- fixed error when calculating crc32 in filebuf_compress routine.

1.8:
- gzip compression/decompression is now done without using a temporary file.
- added new 'proxytest' URL command to show headers sent by forwarding proxy.
- inet_ntoa isn't thread safe, all uses of it were replaced with inet_ntop
- added support for the 'deflate' content encoding.
- fixed bug where connections in the middle of a transfer would be added back to the pool
  if net_filebuf_read failed.
- added option to select mimetype's which are always compressed if the client supports it.
- forwarded connections are now added to the pool as the proxy that's forwarding them, not the
  host the request is for.
- threads requesting a file another thread is currently caching will now wait for that thread to
  complete.
- added option to control the maximum size a cache file can get before any waiting threads
  stop waiting and download the file directly.
- added 'htmltree' URL command to show parsed HTML tree.
- added prefetching feature.

1.7.1:
- the CONNECT method may now be used when forwarding HTTP requests through a proxy.
- the Proxy-Authorization header is now only sent for the first keep-alive request when forwarding.
- removed an extra pthread_mutex_unlock that was accidentally left in.
- X-Cache header now added to response.
- removed bogus "110 stale cache" warning when requesting a validated file.
- time matching for the Limits feature was changed to allow matching minute and hour ranges
  for All ranges match mode.

1.7:
- disabling the limits feature actually works now.
- limits feature can now be bypassed.
- the Referer check for web interface requests was moved to a more logical place.
- fixed a bug in caching code where cachemap->header->content_length was set to 0
  when cache file is first created; this bug only affected FTP transfers.
- header wasn't being sent for validated FTP files, fixed.
- the bandwidth usage and request limit features are now fully implemented.
- added option to toggle compression of processed content.
- connections with profiles from access rules now match entries without profiles.
- cleaned up code in cache.c, fixed some bugs in refresh algorithm.
- a dynamic version of libpcre is now used if it's available.

1.6:
- fixed bug in FTP directory list parsing that would cause it to fail if the first
  entry had more than 9 space-seperated fields.
- added 'raw' URL command to show raw FTP directory listing and file source.
- fixed parsing problem in url_command_create which would cause url_command->options to remain
  uninitialized if '[' is found in the URL but not ']'.
- extra '\r\n' was missing from pseudo-header in header->raw used for HTTP/0.9 responses.
- fixed off-by-one bug in external_getmime.
- all headers are addded to the header list, but only ones with 'send' flag set to TRUE are sent..
  this makes all headers visible to external parsers.
- path banner on ftp directory listings are now linked to all lower directories for easier navigation.
- fixed bug where connection to server was added back to the pool after an incomplete transfer,
  causing the response from the next request to that server to start in the middle of the incomplete
  transfer.
- if a cache file needs to be validated but the connection to the server fails, the unvalidated copy
  is now sent anyways.
- added 'size' option to keyword, rewrite, and external entries to control the filesize limit
  these entries are applied to.
- fixed bug where non-GET requests were sometimes cached.
- added new 'limits' feature that allows access to the proxy server to be restricted based on
  date/time, bandwidth usage, and requests made.
- a security flaw where a malicious webpage could change proxy settings by having images loaded
  from carefully crafted URL's was fixed by checking the Referer of all web interface requests
  that change a setting. This makes the web interface inacessible through regular HTTP requests, since
  there is no way to validate the Referer (the proxy can't know every hostname that points to it).

1.5.3:
- optimized FTP directory list sorting when sorting by date.
- the proxy now daemonizes properly.
- added support for DNS blacklists.
- fixed use of free'ed pointer in protocol.c
- files can now be uploaded to FTP sites.
- files can now be deleted and renamed, and directories created or removed on FTP sites.

1.5.2:
- fixed minor header parsing bug (extra junk after the header ended up in header->raw when parsing
  the cache file header).
- fixed some minor authentication bugs (when the browser reauthenticates a keep-alive
  connection under a different username/password, access restrictions are now changed).
- connection->url_command wasn't set to NULL, this caused a dereference of an invalid pointer.
- FTP files residing in a directory that doesn't give permission to list it can now be downloaded
  (but not cached).
- fixed some memory leaks in the FTP code.
- fixed several bugs in the cache refresh algorithm; more timezone corrections.
- forwarded and cached ftp requests are now handled by protocol_http (and any protocol
  that the forwarding proxy supports can now be handled).
- changed some dangerous overlapping strcpy's into memmove's
- when forwarding, username/password in URL is now encoded properly.
- cached files can now be validated using the Last-Modified header if the server doesn't
  understand If-Modified-Since.
- forgot to copy the ->raw member in header_dup, fixed.
- fixed build problems on FreeBSD.
- if the browser requests a fresh copy of a cached file, it is now validated rather than being
  transferred again; this significantly increases performance for some browsers when
  reloading a page (i.e. Mozilla).
- a new more portable method for determining the delta between GMT and the local timezone is now used.
- fixed NULL pointer dereference in forward_do when fowarding a CONNECT request through another
  proxy.

1.5.1:
- fixed some incorrect assumptions about the return value of vsnprintf.
- headers with no space after colon now handled correctly.
- cache disk cleaning is now much quicker.
- added web interface page for pooled connections.
- added minsize and minage cache settings.
- added 'headers' URL command to show headers sent by browser and received from website.
- proper command line parsing for external programs.
- timestamps given in HTTP headers used by the cache refresh algorithm are now adjusted
  to compensate for the timezone difference.

1.5:
- different users can now have different configuration profiles.
- stack usage decreased, this should fix some issues with some pthread implementations.

1.4.1:
- FTP connections are now kept alive between requests.
- FTP directory listing can now be sorted.
- keepalive connections are now pooled and shared between threads.

1.4:
- A 302 redirect is now sent back when a URL command is found in the Referer header but not the URL itself,
  this makes them work on pages loaded from pages a URL command was used on.
- Added --enable-mtime option to configure script; this will force the caching feature to use the modification time
  rather than access time when deciding which cache files to delete.
- added support for the FTP protocol (including caching).
- added 'store' URL command; this will force a file to be cached regardless of the server's instructions.

1.3.4:
- fixed memory leak in protocol_connect() when forwarding.
- rewrite and external entries can now be toggled with URL commands.
- show memory and disk cache entries in web interface.
- added hit/miss statistics to cache.
- port and proto are always filled in when parsing header, this fixes a problem with
  URL redirection of HTTP requests.
- network settings can now be changed via the web interface (proxy must be restarted for changes to take effect)

1.3.3:
- added 'offline' url command; with this the file will only be sent if it's cached, ignoring the expiry date.
- cache files now include protocol name.
- protocol is now used in URL for redirected requests.
- fixed silly off-by-one error in s_strncpy and s_strncat, and fixed source in other locations to correct problems
  caused by this change.
- fixed problem with thread stack not being large enough on some pthread implementations (i.e. FreeBSD).
- added support for authentication with the CONNECT method when forwarding.
- added option to specify which outgoing ports are allowed for CONNECT requests.
- fixed POST requests when forwarding with NTLM authentication.
- config file is now fully XML compliant.
- added the `fresh` url command to bypass caching and fetch the file straight from the server.

1.3.2:
- added access and modified date matching to cache manager.
- fixed a race condition that could lead to a memory leak if a thread has a cache file open while another invalidates it.
- added support for HTTP/0.9 responses.
- fixed bug that could sometimes cause a segfault in reg_replace.
- added new rewrite rules that block only unrequested popups.

1.3.1:
- fixed bug that caused extra \r\n to appear in cache file when using chunked encoding.
- fixed bug in handling of Location header when using url command that caused protocols
  other than http to not work.
- added "Percent of age freshness" option to caching feature; this setting controls the percentage
  of time beteween the date given in the Last-Modified header and the time the file was downloaded
  that the file is considered fresh after downloading.
- added 'cache' URL command for displaying information about cached file.
- fixed bug in header_filter function that caused it to return a NULL pointer if the new header list
  only contains items from insert rules.
- added "View cache entries" page to web interface.
- added option to set maximum line length in the web interface, solving the problem with the table
  having an insane width in the log page.
- URL commands now work when doing transparent proxying.

1.3:
- the proxy server can now cache content, many changes were made to make this possible.
- new global web interface config section.
- NULL pointer dereference in header_send fixed.

1.2.2:
- fixed several printf-style format errors in interface.c.
- access levels actually work now (stupid mistake in access.c caused full access to always be granted).
- fixed NULL pointer dereference when connection closed after first part of NTLM authentication and second
  connection is refused.
- cleaned up NTLM authentication code.
- added 'diff' url command to show changes made by rewrite rules to requested URL.

1.2.1:
- added 'username' and 'password' option to access entries; clients can now authenticate with the proxy.
- added support for gzip encoding both when receiving a file from a website and sending it to the client.

1.2:
- URL command's now taken from Referer header so that bypassing features for a webpage also bypasses
  them for images and files loaded directly from that webpage.
- URL command now added to Location: header when server issues a 302 redirect so that the feature(s)
  are still bypassed when the browser follows the redirect.
- 100 Continue messages are now handled properly, this fixes problems with POST'ing to IIS servers
- A bug in the way header's were parsed which would cause the server to crash if a client sent a response
  header was fixed.
- A new keyword scoring feature for blocking pages containing inappropiate content was added.
- Added the 'filter' url command to show filter entry match for the URL.
- Added the 'mime' url command to show mime filter entry match for URL.
- Added the 'score' url command to show keyword score for page.

1.1.1:
- fixed off-by-one error in socket.c
- added top/bottom link to each entry in all lists
- rewrite rules can now be applied to POST data
- fixed off-by-one error in regexp.c which would cause an ascii 0 to be added at the end
  of the document when any rewrite rule is applied

1.1:
- added NTLM and Basic authentication support when forwarding

1.0:
- first stable release
