L.Marker.Label = L.Marker.extend({
	_initIcon: function () {
		// Ensure that the label is hidden to begin with
		if (this.options.revealing) {
			this.options.icon.setLabelAsHidden();
		}

		L.Marker.prototype._initIcon.call(this);
	},

	_removeIcon: function () {
		L.Marker.prototype._removeIcon.call(this);

		if (!this.options.revealing) {
			return;
		}

		L.DomEvent
			.off(this._icon, 'mouseover', this._showLabel)
			.off(this._icon, 'mouseout', this._hideLabel);
	},

	_initInteraction: function () {
		L.Marker.prototype._initInteraction.call(this);

		if (!this.options.revealing) {
			return;
		}

		L.DomEvent
			.on(this._icon, 'mouseover', this._showLabel, this)
			.on(this._icon, 'mouseout', this._hideLabel, this);
	},

	_showLabel: function () {
		this.options.icon.showLabel(this._icon);
	},

	_hideLabel: function () {
		this.options.icon.hideLabel(this._icon);
	}
});
@@ -54,16 +54,140 @@
 on () %7B%0A
+%09%09if (!(this.options.icon instanceof L.Icon.Label)) %7B%0A%09%09%09throw new Error('Icon must be an instance of L.Icon.Label.');%0A%09%09%7D%0A%0A
 %09%09// Ens

Check that the icon is a L.Icon.Label. fixes #2