 			{
 				delete _attributeToProviders[attributeToDelete];
 				delete _attributeToProvidersAttrNames[attributeToDelete];
+			}
+			
+			provider.changed.remove(onProviderChange);
+			
+			delete _providerToBindingNames[provider];
+			
+			for each (bindingName in bindingNames)
+			{
+				trace(bindingName);
+				getPropertyChangedSignal(bindingName).execute(this, bindingName, null);
 			}
 		}
 		

			{
				var providers		: Vector.<IDataProvider>	= _attributeToProviders[attribute];
				var attrNames		: Vector.<String>			= _attributeToProvidersAttrNames[attribute];
				var indexOfProvider	: int						= providers.indexOf(dataProvider);
				
				if (indexOfProvider != -1)
				{

			
			for (var attrName : String in dataDescriptor)
			{
				// if this provider attribute is also a dataprovider, let's also bind it
				var bindingName	: String		= dataDescriptor[attrName];
				var attribute	: Object		= provider[attrName]
				var dpAttribute	: IDataProvider	= attribute as IDataProvider;
				
				if (_bindingNames.indexOf(bindingName) != -1)
					throw new Error('Another Dataprovider is already declaring "' + bindingName + '". Cannot overwrite.');
				
				if (dpAttribute != null)
				{
					dpAttribute.changed.add(onProviderAttributeChange);
