Changes from 1.10.2 to 1.10.4
----------------------------
** Bug
    * [FELIX-5691] - Fix whitespace handling in TypedProperties
    * [FELIX-5692] - TypedProperties is missing a method to add a raw value

Changes from 1.10.0 to 1.10.2
----------------------------
** Bug
    * [FELIX-4743] - Have to escape '=' characters in quoted values in *.config files
    * [FELIX-5145] - FileInstall writes .config files back with backslashes escaping spaces in config values
    * [FELIX-5306] - User friendly syntax for floats and doubles in FileInstall
    * [FELIX-5675] JSONParser needs a little bit more context when reporting an error
    * [FELIX-5688] - TypedProperties#put method is not idempotent

Changes from 1.9.0 to 1.10.0
----------------------------
** New Feature
    * [FELIX-5608 New TypedProperties object to support typed properties file

** Bug
    * [FELIX-5555] JSONParser is not handling escape char properly
    * [FELIX-5577] JSONParser is not able to parse an array as root object] 


Changes from 1.8.6 to 1.9.0
---------------------------
** Improvement
    * [FELIX-5534] - Add simple JSONWriter
    * [FELIX-5508] - Add simple JSON Parser


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
