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
