Version 3.2.2
-------------
** Improvement
    * [FELIX-3398] - Track new versions of artifact listener and optionally update all bundles when a new version is detected
    * [FELIX-3448] Small optimization when using file name filters

Version 3.2.0
-------------
** Bug
    * [FELIX-2066] - File Install fails to move fragment bundle into RESOLVED state
    * [FELIX-2763] - [FileInstall] disableConfigSave actually enables configuration save
    * [FELIX-2794] - noInitialDelay is not correctly implemented
    * [FELIX-2843] - Parsing PID assumes last 4 chars are file extension
    * [FELIX-2852] - Infinite reloading of config file ending with .config
    * [FELIX-2890] - FileInstall starts non-daemon threads
    * [FELIX-2982] - noInitialDelay option does not work
    * [FELIX-3047] - Infinite loop in File Install if java.io.tmpdir is non-writable
    * [FELIX-3109] - FileInstall sorts artifact url handlers in the wrong order so that the ranking does not work correctly
    * [FELIX-3112] - Default for felix.fileinstall.start.level documented incorrectly
    * [FELIX-3346] - File Install doesn't scan when the framework start level is lower than felix.fileinstall.start.level setting
    * [FELIX-3373] - File install logging doesn't notify user of important errors
    * [FELIX-3396] - Fileinstall is not able to handle configuration file if in a path containing braces

** Improvement
    * [FELIX-2787] - [File Install] Do not perform management activities while framework is starting/stopping
    * [FELIX-2848] - Saving config file to original location shouldn't add system properties
    * [FELIX-3294] - file install dependencies on osgi artifacts should have "provided" scope
    * [FELIX-3386] - File install tests use deprecated EasyMock API and fail on BundleContext.getProperty

Version 3.1.10
--------------
** Bug
    * [FELIX-2818] - File Install does not support empty configuration when no configuration already exists
    * [FELIX-2799] - FileInstall creates multiple configurations for factory configurations on windows
    * [FELIX-2798] - ArtifactListener services are not ordered according to the OSGi ranking

Version 3.1.6
-------------
** Bug
    * [FELIX-2791] - NPE in getStartLevel due to race condition

Version 3.1.4
-------------
** Bug
    * [FELIX-2756] - NPE when loadiong configurations
    * [FELIX-2745] - New configurations throw NPE

Version 3.1.2
-------------
** Bug
    * [FELIX-2699] - Disable writing configuration back to .cfg files
    * [FELIX-2698] - File Install Circular Configuration Update Loop
    * [FELIX-2675] - ileinstall always starts bundle eagerly

Version 3.1.0
-------------
** Bug
    * [FELIX-2318] - Possible NPE for jars with null Manifest
    * [FELIX-2531] - Missing documentation for 'felix.fileinstall.noInitialDelay' configuration property
    * [FELIX-2556] - FileInstall fails to update fragments as it tries to stop them

** Improvement
    * [FELIX-2021] - Enable FileInstall to set Bundle Start Level
    * [FELIX-2571] - Have fileinstall listen for configuration changes and write them back to the config files
    * [FELIX-2643] - When using the jardir url handler, fileinstall should not compress the zip stream
    * [FELIX-2663] - Allow ConfigInstaller to perform placeholder substitution from framework properties

** New Feature
    * [FELIX-2513] - Support richer format for configurations
    * [FELIX-2514] - felix.fileinstall.dir should support more than one directory

Version 3.0.2
-------------
** Bug
    * [FELIX-2366] - Avoiding property substitution by escaping does not remove escape character

** Improvement
    * [FELIX-1657] - Add option in fileinstall to start bundles transiently (START_TRANSIENT)

Version 3.0.0
-------------
** Bug
    * [FELIX-1776] - FileInstall starts already installed bundles twice
    * [FELIX-2069] - FileInstall creates ./load by default
    * [FELIX-2248] - fileinstall does not restart bundles when the underlying file is modified
    * [FELIX-2302] - Fileinstall should add entries for directories when creating JARs
    * [FELIX-2313] - fileinstall does not recognize jars if it does not have Bundle-SymbolicName and Bundle-Version

** Improvement
    * [FELIX-2249] - fileinstall should log installation/uninstallation/updation/activation details at INFO level
    * [FELIX-2307] - There is no way to bypass / escape property substitution


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
