Changes from 1.8.4 to 1.8.6
---------------------------
** Improvement
    * [FELIX-5474] - Do not call no-arg Bundle.getHeaders() method
    * [FELIX-5434] - Add an update method to Properties
** Bug
    * [FELIX-5487] - Utils code requires Java 6 - should be Java 5


Changes from 1.8.4 to 1.8.6
---------------------------
** Bug
    * [FELIX-5370] - Error parsing clauses with values containing ':='


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
