Changes from 1.1.6 to 1.1.8
---------------------------
** Improvement
    * [FELIX-5702] - Plugin should work without configuration admin

** Bug
    * [FELIX-5701] - metatype.properties file must not be in OSGI-INF/metatype
    * [FELIX-5668] - Prevent Nullpointer when receiving a ServiceEvent for a service that has been already unregistered


Changes from 1.1.4 to 1.1.6
---------------------------
** Improvement
    * [FELIX-5510] - Remove usage of org.json form web console plugins


Changes from 1.1.2 to 1.1.4
---------------------------

** Bug
    * [FELIX-5025] - NPE in Events web console plugin - no events can be seen

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

** Bug
    * [FELIX-4573] - Web Console Event plugin might cease operation if Event property is null
    * [FELIX-4731] - Event plugin native2ascii plugin conflicts with Eclipse
    * [FELIX-4732] - Web Console event plugin is not compatible with OSGi/Minimum EE

** New Feature
    * [FELIX-4499] - BundleEventConverter reports UNINSTALLED for UNRESOLVED events
    * [FELIX-4500] - EventListener should implement SynchronousBundleListener

Changes from 1.0.2 to 1.1.0
---------------------------

** New Feature
    * [FELIX-2331] - webconsole event plugin should be able to send/post events.

** Bug
    * [FELIX-3960] - exception in the event plugin
    * [FELIX-3449] - Event plugin cannot send events without properties

** Improvement
    * [FELIX-4185] - Add category OSGi to event web console plugin 
    * [FELIX-3454] - Add German language support for Event and UPnP plugins

** Task
    * [FELIX-3440] - native2ascii doesn't work for event plugin
    * [FELIX-3268] - Cannot build webconsole and webconsole-plugins with JDK 7

