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

** Improvement
	* [FELIX-4649] - Get MetaTypeInformation while bundle is starting

** 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
