text: L.Control.Attribution = L.Control.extend({
  	options: {
  		position: 'bottomright',
  		prefix: 'Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>'
  	},
  
  	initialize: function (options) {
  		L.Util.setOptions(this, options);
  
  		this._attributions = {};
  	},
  
  	onAdd: function (map) {
  		this._container = L.DomUtil.create('div', 'leaflet-control-attribution');
  		L.DomEvent.disableClickPropagation(this._container);
  
  		map
  			.on('layeradd', this._onLayerAdd, this)
  			.on('layerremove', this._onLayerRemove, this);
  
  		this._update();
  
  		return this._container;
  	},
  
  	onRemove: function (map) {
  		map
  			.off('layeradd', this._onLayerAdd)
  			.off('layerremove', this._onLayerRemove);
  
  	},
  
  	setPrefix: function (prefix) {
  		this.options.prefix = prefix;
  		this._update();
  	},
  
  	addAttribution: function (text) {
  		if (!text) { return; }
  
  		if (!this._attributions[text]) {
  			this._attributions[text] = 0;
  		}
  		this._attributions[text]++;
  
  		this._update();
  	},
  
  	removeAttribution: function (text) {
  		if (!text) { return; }
  
  		this._attributions[text]--;
  		this._update();
  	},
  
  	_update: function () {
  		if (!this._map) { return; }
  
  		var attribs = [];
  
  		for (var i in this._attributions) {
  			if (this._attributions.hasOwnProperty(i) && this._attributions[i]) {
  				attribs.push(i);
  			}
  		}
  
  		var prefixAndAttribs = [];
  
  		if (this.options.prefix) {
  			prefixAndAttribs.push(this.options.prefix);
  		}
  		if (attribs.length) {
  			prefixAndAttribs.push(attribs.join(', '));
  		}
  
  		this._container.innerHTML = prefixAndAttribs.join(' &mdash; ');
  	},
  
  	_onLayerAdd: function (e) {
  		if (e.layer.getAttribution) {
  			this.addAttribution(e.layer.getAttribution());
  		}
  	},
  
  	_onLayerRemove: function (e) {
  		if (e.layer.getAttribution) {
  			this.removeAttribution(e.layer.getAttribution());
  		}
  	}
  });
  
  L.Map.mergeOptions({
  	attributionControl: true
  });
  
  L.Map.addInitHook(function () {
  	if (this.options.attributionControl) {
  		this.attributionControl = (new L.Control.Attribution()).addTo(this);
  	}
  });