 			var attrNames		: Vector.<String>			= _attributeToProvidersAttrNames[source];
 			var numProviders	: uint						= providers.length;
 			
-			// can do faster than that :p
 			for (var providerId : uint = 0; providerId < numProviders; ++providerId)
-				onProviderChange(providers[providerId], attrNames[providerId]);
+			{
+				var provider	: IDataProvider	= providers[providerId];
+				var attrName	: String		= attrNames[providerId];
+				var bindingName : String		= provider.dataDescriptor[attrName];
+				
+				getPropertyChangedSignal(bindingName).execute(this, bindingName, source);
+			}
 		}
 	}
 }
			{
				delete _attributeToProviders[attributeToDelete];
				delete _attributeToProvidersAttrNames[attributeToDelete];
			}
		}
		

			
			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);
