@Override
	public Property removeCapabilities(Property property) throws PropertyException
	{	
		if(property instanceof DelayProperty) {
			// delay restricted by requirements?
			if(getMax() != UNDEFINED) {
				int maxDelay = ((DelayProperty) property).getMax();
				
				if(maxDelay != UNDEFINED) {
					if(getMax() >= maxDelay) {
						return create(UNDEFINED, getMax() -maxDelay, getVariance() +((DelayProperty) property).getVariance());
					} else {
						throw new PropertyException(this, "Max of " +property +" exceeds max value " +this);
					}
				} else {
					// is there a minimum value?
					if(((DelayProperty) property).getMin() != UNDEFINED) {
						throw new PropertyException(this, "Max restricted to " +this +" but " +property +" does not restrict it.");
					} else {
						// delay restricted and not introduced -> no changes
						return this;
					}
				}
			} else {
				// no delay limit -> no changes
				return this;
			}
		} else {
			throw new PropertyException(this, "Parameter " +property +" is not a " +DelayProperty.class + " object.");
		}
	}