Version 2.0.8
-------------
** Bug
    * [FELIX-1775] - fileinstall release archives contains an empty "load"
                     folder which should be removed
    * [FELIX-1789] - FileInstall is too verbose
    * [FELIX-1851] - FileInstall watched bundles are restarted twice upon update
    * [FELIX-1861] - FileInstall created temp directories are never deleted
    * [FELIX-1862] - fileinstall thread name as printed in log messages need
                     to be less verbose
    * [FELIX-1928] - File installer starts bundles too early on restart

** Task
    * [FELIX-1811] - fileinstall should depend on the official osgi artifacts


Version 2.0.4
-------------
** Bug
    * [FELIX-1386] - Updating fileinstall bundle in watched directory 
      causes IllegalsStateException
    * [FELIX-1572] - File Install running in an infinite loop while watching 
      multiple directories, once of which is itself
    * [FELIX-1578] - FileInstall issue when updating already installed bundles 
      at startup time
    * [FELIX-1591] - FIleInstall should have an optional / dynamic import on 
      org.osgi.service.cm instead of exporting it
    * [FELIX-1593] - Got an exception when restarting FileInstall bundle
    * [FELIX-1628] - Fileinstall should load configurations as soon as config 
      admin is available
    * [FELIX-1715] - osgi:update on xml deployments will cause ZIPExceptions
    * [FELIX-1716] - Fileinstall does not recognize changes in lastmodification 
      date of an uninstalled bundle inside deploy folder
    * [FELIX-1736] - After a restart, fileinstall does not always properly 
      uninstall bundles
    * [FELIX-1750] - fileinstall does not work on jdk 1.4
    * [FELIX-1787] - REGRESSION: FileInstall relies on location to be a valid 
      URL for update to be successful
    * [FELIX-1788] - Set felix.fileinstall.tmpdir to ${java.io.tmpdir} by default
    * [FELIX-1790] - fileinstal tmp dir needs to be different for each 
      watched directory

** Improvement
    * [FELIX-1756] - Allow fileinstall to override (i.e. update) bundles that have 
      not been deployed by fiileinstall initially

** New Feature
    * [FELIX-1537] - File Install should support XML property files

Version 2.0.0
-------------
** Bug
    * [FELIX-938] - FileInstall starts a stopped bundles even if it is stopped 
      transiently by user
    * [FELIX-1269] - MalformedURLException for bundle locations installed 
      by FileInstall
    * [FELIX-1377] - fileinstall tries to process files which are not fully 
      copied yet 
    * [FELIX-1382] - FileInstall attempts to uninstall "System Bundle"
    * [FELIX-1481] - When performing variable substitution, fileinstall throws an 
      exception if there is a start or stop delimiter without the other one
    * [FELIX-1540] - [FileInstall] When removing/re-adding a bundle, all the 
      dependent bundles don't start anymore

** Improvement
    * [FELIX-1301] - Limit FileInstall configuration information to one line in 
      the output
    * [FELIX-1387] - FileInstall unnenessarily computes length of files
    * [FELIX-1475] - Add a file filter for a given watched directory
    * [FELIX-1476] - Allow system property substitution while loading configurations 
      from files
    * [FELIX-1553] - fileinstall bundle should have an optional import on 
      org.osgi.service.log instead of exporting it
    * [FELIX-1554] - fileinstall should not export org.apache.felix.fileinstall 
      and org.apache.felix.fileinstall.utils packages

** New Feature
    * [FELIX-922] - File Install bundle should be extensible to support new 
      artifact type
    * [FELIX-1483] - Fileinstall should support exploded artifacts

Version 1.2.0
-------------
   * [FELIX-1179] - FileInstall should recognize Jar files by content instead
     of extension
   * [FELIX-1216] - ClassCastException when running FileInstall with
     Knopflerfish
   * [FELIX-1228] - Felix File Install - Spaces in File Names
   * [FELIX-1203] - NPE in fileinstall if a watched bundle is uninstalled by
     some other means
   * [FELIX-1235] - NullPointerException due to misconfigured watched dir
   * [FELIX-1174] - FileInstall bundle does not print stack trace of exceptions
     when log service is not used
   * [FELIX-1251] - Looping NullPointerException if the polled directory is
     removed after File Install registration
   * [FELIX-1241] - Log "Bundle Started" 

Version 1.0.0
-------------

** Bug
    * [FELIX-1036] - FileInstaller spawns multiple watchers for same directory

** Improvement
    * [FELIX-1055] - Making FileInstall bundle CDC-1.1/Foundation 1.1 compatible

Version 0.9.2
--------------

** Bug
    * [FELIX-895] - File Install treats configuration files with identical subnames as the same configuration
    * [FELIX-926] - FileInstall does not read all values from Configuration properties
    * [FELIX-937] - FileInstall can't handle autostart bundles that are part of watched directory
    * [FELIX-938] - FileInstall starts a stopped bundles even if it is stopped transiently by user

** Improvement
    * [FELIX-920] - Add option to only install or "install and start" newly discovered bundles 
    * [FELIX-939] - Optimize File Install
    * [FELIX-942] - Fileinstall unit tests
    * [FELIX-983] - Allow property substitution in config file
    * [FELIX-998] - Metatype definition for FileInstall
    
Version 0.9.0
--------------

 * First public release
