Changes in 1.2.2
----------------
** Bug
    * [FELIX-5963] - Metatype XML Namespace 1.4 not supported


Changes in 1.2.0
----------------
** Improvement
    * [FELIX-5779] - Update metatype to R7 (version 1.4)


Changes from 1.1.4 to 1.1.6
---------------------------
** Bug
    * [FELIX-5702] - All files in OSGi-INF/metatype must be considered


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

** Bug
    * [FELIX-5173] - Metatype service's BundleResources ignore properties provided by fragment bundles
    * [FELIX-5185] - Fix description of metatype bundle


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

** Bug
    * [FELIX-5000] - Potential NPE when reading metatype info due to FELIX-4973


Changes from 1.0.12 to 1.1.0
----------------------------

** Improvement
    * [FELIX-4980] - Add capabilities for metatype R6
    * [FELIX-4973] - Relax exception handling when reading metatype XML


Changes from 1.0.10 to 1.0.12
-----------------------------

** Improvement
	* [FELIX-4649] - Get MetaTypeInformation while bundle is starting
	* [FELIX-4687] - Support v. 1.3 metatype namespace

** Bug
	* [FELIX-4644] - Designates with multiple Objects
	* [FELIX-4665] - Metatype service does not allow a default empty string in XML resource
	* [FELIX-4771] - Possible NPE when accessing content of attribute
        * [FELIX-4799] - Support for multiple factory designates in single MetaType file


Changes from 1.0.8 to 1.0.10
----------------------------

** Bug
	* [FELIX-4289] - Spaces within values are removed for default values


Changes from 1.0.6 to 1.0.8
---------------------------

** Bug
	* [FELIX-3756] - Optional attributes validated invalid data as correct;
	* [FELIX-3757] - If an AttributeDefinition did not specify a minimum, maximum or option values, it did not detect missing values;
	* [FELIX-3758] - AttributeDefinition.validate() did not take non-zero cardinality into consideration.
	* [FELIX-4214] - Cache in BundleResources works only for a single metatype properties file per bundle
	* [FELIX-3884] - Default value and options 


Changes from 1.0.4 to 1.0.6
---------------------------

** Bug
	* [FELIX-2094] - AttributeDefinition with an empty default value must attribute must result in a single (empty string) entry string array
	* [FELIX-2097] - DefaultMetaTypeProvider.getLocales() must not reuturn an empty string entry
	* [FELIX-2860] - getLocales() in DefaultMetaTypeProvider needs to check return of findEntries
	* [FELIX-2867] - getIcon() in LocalizedObjectClassDefinition keyset iteration incorrect
	* [FELIX-2868] - Icon only works if absolute path specified, but specification allows for relative urls
	* [FELIX-3183] - Attribute requirement is not validated
	* [FELIX-3364] - MetaDataReader exposes a private exception class on the public API
	* [FELIX-3720] - Designate's pid attribute is optional and not mandatory
	* [FELIX-3730] - AD.validate of string attributes must validate the string length
	* [FELIX-3732] - service.pid properties of ManagedServiceFactory services must be used as factory PIDs
	* [FELIX-3734] - MetaType: NPE in ServiceTracker for fragment bundle

** Improvement
	* [FELIX-3167] - Add support for new PASSWORD attribute type
	* [FELIX-3338] - Add support for optional attributes in the MetaDataReader as defined in the XML schema for metatype
	* [FELIX-3736] - Add support for MetaTypeProvider service modifications
	* [FELIX-3740] - Maintain the MetaTypeProvider service tracker on the MetaTypeService

** New Feature
	* [FELIX-2719] - Add name space support to the meta type implementation

** Task
	* [FELIX-2096] - Check MetaTypeProvider.getObjectClassDefinition(String, String) specification compliance
	* [FELIX-3182] - Update to use parent POM 2.1
	* [FELIX-3184] - Add support for metatype extension by MetatypeProvider services
	* [FELIX-3731] - Multi-Value service.pid service properties must be supported
	* [FELIX-3733] - Clarify icon location


Changes from 1.0.2 to 1.0.4
---------------------------
** Bug
	* [FELIX-1226] - The MetaType service should ignore the pid attribute of Designate elements if factoryPid is set.

** Improvement
	* [FELIX-718] - Update NOTICE file to new format
	* [FELIX-1227] - Project Descriptor Enhancement
	* [FELIX-1434] - Include service tracker in bundle instead of importing it


Changes from 1.0.0 to 1.0.2
---------------------------

** Bug
	* [FELIX-520] - MetaDataReader - ad.setMax
	* [FELIX-521] - MetaType - optionValues check
	* [FELIX-597] - Meta type service incorrectly parses attribute element content when the content is specified in value child tags
	* [FELIX-607] - Meta type localization incorrectly resolved in the meta type folder

** Improvement
	* [FELIX-666] - Metatype OBR description


Initial Release 1.0.0
---------------------

** New Feature
	* [FELIX-20] - Implement Metatype Service
