0.7
 * Duplicate ticket relation is integrated to the ticket workflow.
 * Several fixes for multiproduct installations with products that map to subdomains.
 * Numerous important fixes and minor enhancements.

 * Not fixed for this release:
   * No major outstanding issues

0.6

 * Added support for multiple products.
 * Added support for ticket relations.
 * Numerous improvements to the BloodhoundSearch module.
 * Redesigned the Ticket page.
 * Implemented Bootstrap templates for Timeline and AccountManagerPlugin.

 * Not fixed for this release:
  * No major outstanding issues

0.5.3

 * Removed reference to BloodhoundSearch docs in setup script, which was causing installation to fail.
 * Updated installation document so that site-packages are inherited in the virtualenv.

 * Not fixed for this release:
   * No major outstanding issues


0.5.2

 * Updated this file with 0.5.1 changes.

 * Not fixed for this release:
   * No major outstanding issues


0.5.1

 * Removed "contrib", "doc" and "sample-plugins" directories from the trac directory since they lack the appropriate license headers.
 * Various improvements to the ticket page and a fix for ticket submits failing due to the attachment form being nested within the ticket properties form.
 * Various bug fixes and enhancements.
 
 * Not fixed for this release:
   * No major outstanding issues


0.5

 * Added beta version of bhsearch plugin. Find more information on https://issues.apache.org/bloodhound/wiki/BloodhoundSearch
 * Implemented Bootstrap templates for the repository browser, log viewer and attachment pages.
 * Added responsive layout support for better experience on tablets and phones
 * Upgraded Bootstrap to version 2.3.1.
 * Upgraded Trac to version 1.0.1.
 * Various bug fixes and enhancements.

 * Not fixed for this release:
   * No major outstanding issues


0.4

 * Replaces ticket edit form with a new 'in-place' edit and workflow control
 * Added white-labelling for error messages and basic branding
 * Improvements to the quick ticket creation form including ability to specify the select fields and their order.
 * Various bug fixes

 * Not fixed for this release:
   * No major outstanding issues


0.3

 * Removes minified files from Bloodhound
 * Upgrades to trac 1.0
 * Various bug fixes

 * Not fixed for this release:
   * No major outstanding bugs


0.2

 * Fixes incubator release issues from 0.1.0
 * Various bug fixes relating to the new UI
 * Upgraded to Bootstrap 2.1

 * Not fixed for this release:
   * Some issues with the installer remain
   * Custom text area fields break layout in ticket view


0.1.0

 * added multi-product
 * added dashboard and theme
 * added simplified installation

 * Not fixed for this release:
   * Widget error for product page with no versions defined (#136)

Project Initiation (Tue, 10 Jan 2012)
 
 * Trunk created in Apache svn repositories as an incubator project

