Changes from 1.8.0 to 1.8.2
---------------------------
** Bug
    * [FELIX-5156] - Felix Properties doesn't handle multi value properties correctly

Changes from 1.6.0 to 1.8.0
---------------------------
** Bug
    * [FELIX-4761] - Modifications on Properties#entrySet() are not properly reflected in the layout

** Improvement
    * [FELIX-4708] - Provide more substitution options
    * [FELIX-4820] - Optimize version range parsing a bit

** New Feature
    * [FELIX-4759] - Support env:XXX subtitution for environment variables
    * [FELIX-4760] - Support default/alternate values for variable substitution

Changes from 1.4.2 to 1.6.0
---------------------------
** Improvement
    * [FELIX-4433] - Provide more control over the substitution
    * [FELIX-4434] - Require JDK 5
    * [FELIX-4435] - Add a method to do substitution without any callback

Changes from 1.4.0 to 1.4.2
---------------------------
** Bug
    * [FELIX-4326] - Possible Invalid BundleContext exception when shutting down the extender
    * [FELIX-4341] - The Properties object does not follow the spec wrt spaces
    * [FELIX-4342] - Substitution is dependent on the order of the map

** Improvement
    * [FELIX-4339] - Make the use of escape characters deterministic

Changes from 1.2.0 to 1.4.0
---------------------------
** Bug
  * [FELIX-3752] Compilation failure in utils subproject on AIX
  * Fix bad copyright
  * Add a isStopping() method on the extender. Fix comparison of system bundle (see ARIES-1031)
  * [FELIX-3779] InterpolationHelperTest.testBasicSubstitution fails with JDK7 on Windows
  
** New features
  * [FELIX-3997] Provide an abstract bundle extender

Changes from 1.1.4 to 1.2.0
---------------------------

** Improvement
    * Variables are not preserved during write-back if they are
      defined as framework properties

** New features
    * Add a BaseManagedServiceFactory to help writing such factories

Changes from 1.1.2 to 1.1.0
---------------------------

** Bug
    * Access to system properties should be done in a priviledged
      block.
    * The manifest parser does not correctly handle empty strings.

** Improvement
    * Add java.util.Properties backward compatibility methods
    * Allow the substitution methods to receive a callback to 
      obtain custom values

Changes from 1.0.0 to 1.1.0
---------------------------

** New Feature
    * New org.apache.felix.utils.collections.DictionaryAsMap class 
      to wrap a Dictionary as a Map
    * New org.apache.felix.utils.properties.InterpolationHelper to
      interpolate a Map of properties using ${xx} replacements
    * New org.apache.felix.utils.properties.Properties class to
      load/save properties and allow editing them without loosing
      the user formatting
