Changes from the 1.6.0 to 1.6.2
-------------------------------
** Bug
    * [FELIX-2308] - getService is called during the unregistration of a service.
    * [FELIX-2309] - Potential NPE when a service has abruptly in the smart proxies.
    * [FELIX-2323] - Unbind method should not be called during the invalidation process if the invalidation does not come from a service departure.

** Improvement
    * [FELIX-2296] - Access to ServiceReference in iPOJO service.

Changes from the 1.4.0 to 1.6.0
-------------------------------
** Bug
    * [FELIX-1533] - Potential deadlock when stopping the underlying OSGi framework
    * [FELIX-1965] - iPojo component is made available regardless of exception during validate
    * [FELIX-2014] - Potential ClassCastException when a service property does not receive a value and is used in the constructor
    * [FELIX-2019] - The Property value is 'null' in the Architecture description, while the value is well assigned to the component's field.
    * [FELIX-2052] - Handler require callback are not called if the service (required) is registered before the instance of the handler has been started.
    * [FELIX-2093] - iPOJO doesn't always use the correct class loader

** Improvement
    * [FELIX-1425] - Service Proxy Mode
    * [FELIX-1426] - Service injection with Dynamic Proxies
    * [FELIX-1427] - Service injection with Smart Proxies
    * [FELIX-1532] - Be able to set the iPOJO Log Level from BND
    * [FELIX-1741] - Allows the configuration handler description to retrieve the managed service PID
    * [FELIX-1854] - Allows instances to directly declares service.* properties (pid, ranking, vendor, description)
    * [FELIX-1885] - Ease CreationStrategy & iPOJOServiceFactory usage
    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified
    
** New Feature
    * [FELIX-2132] - Provides a way to control service exposition from the implementation class

    
Changes from 1.2.0 to 1.4.0
---------------------------
** Bug
    * [FELIX-985] - iPOJO analyzes already installed bundle by holding a lock
    * [FELIX-1002] - iPOJO Static binding policy is not compliant with the Declarative Service static binding policy.
    * [FELIX-1318] - Case mismatch problem of iPOJO custom handler name 
** Improvement
    * Update parent pom
    * [FELIX-936] - Allowing publishing class as services
    * [FELIX-966] - iPOJO: Better error reporting when getPojoObject return null
    * [FELIX-982] - Declare iPOJO as a singleton bundle to avoid multiple version of the runtime at the same time
    * [FELIX-1114] - callback after configuration change needed
    * [FELIX-1163] - Improve error message when an array cannot be created due to a classloading issue
    * [FELIX-1182] - iPOJO - reconfiguration : get all properties with the update callback
    
    
Changes from 1.0.0 to 1.2.0
---------------------------
** Bug
    * [FELIX-797] - Composite Architecture contains duplicate instances
    * [FELIX-803] - iPOJO Core schema needs to be fixed
    * [FELIX-805] - Instance not created if the factory becomes valid later
    * [FELIX-866] - iPOJO Provides 'interface' attribute should be 'specifications'

** Improvement
    * [FELIX-787] - iPOJO logger log messages inside the log service and print them
    * [FELIX-796] - Allows enabling/disabling the internal event dispatcher
    * [FELIX-801] - Support service properties injection in bind/unbind callbacks
    * [FELIX-815] - Support optional properties
    * [FELIX-816] - Support comparator attribute with any service binding policy
    * [FELIX-818] - Implement the ServiceReference compareTo method
    * [FELIX-853] - Provide new service object creation strategies
    * New introspection API
    
Changes from 0.8.0 to 1.0.0
---------------------------
** Bug  
    * [FELIX-557] - Factories still living when a primitive component does not have its manipulation metadata
    * [FELIX-632] - Component are set to immediate despite they are already immediate
    * [FELIX-635] - Simplify factory name computation
    * [FELIX-628] - Architecture service should not publish the instance.name property
    * [FELIX-621] - Instances not disposed when instances creation failed
    
** Improvement
    * [FELIX-552] - ClassCastException when using services as dynamic proxies
    * [FELIX-555] - Error message in the iPOJO Extender could be more accurate when failing to get the bundle context
    * [FELIX-558] - Non caught NoClassDefFoundError when the instantiation of a Nullable object failed 
    * [FELIX-603] - Improve iPOJO Arch service dependency description 
    * [FELIX-626] - Allow specifying instance configuration containing empty dictionaries 
    * [FELIX-629] - Allows instance configuration to declares complex properties
    * [FELIX-631] - Immediate Component Detection
    * [FELIX-633] - Factory creation should be done in another thread 
    * [FELIX-634] - Improve error handling 
    * [FELIX-655] - Add a 'from' attribute in the service dependencies
    * [FELIX-673] - Provide OBR description to iPOJO bundles
    * [FELIX-683] - Supporting lists and vectors in the service dependency management
    * [FELIX-686] - Supporting collections and set in the service dependency management
    * [FELIX-688] - Better error reporting when an instance creation failed 
    * [FELIX-689] - Instance 'name' property should become 'instance.name'
    * [FELIX-716] - Provide XML schemas for iPOJO descriptors 
    * [FELIX-732] - Duplicate instance created of a managed service 
    
Version 0.8.0
-------------
    * Initial release
