class MultiAttributeCollection extends MultiAttributeProvider implements AttributeCollection {

	@Override
	public boolean removeAttribute(String name) {
		final boolean b = this.runProviderEvents.getAndSet(false);
		try {
			boolean changed = false;
			final ManyValueAttributeValue oldValue = new ManyValueAttributeValue();
			for (final AttributeProvider c : containers()) {
				assign(oldValue, c.getAttribute(name));
				if (c instanceof AttributeCollection) {
					changed = ((AttributeCollection) c).removeAttribute(name) || changed;
				}
			}
			if (changed) {
				final AttributeValue value = canonize(oldValue);
				this.cache.remove(name);
				if (this.names != null) {
					this.names.remove(name);
					if (this.names.isEmpty()) {
						this.names = null;
					}
				}
				fireAttributeChange(new AttributeChangeEvent(this, Type.REMOVAL, name, value, null, null));
			}
			return changed;
		} finally {
			this.runProviderEvents.set(b);
		}
	}

}