public void setValue(E aValue)
    {
        // Only take action when the new value is different from the old value.
        // If nothing changes nobody should be asked or notified about the change.
        if(((aValue == null) && (aValue != value)) ||
           ((aValue != null) && (!aValue.equals(value))))
        {
            if(constrained && (bus != null))
            {
                final VetoablePropertyChangeEvent lEvent = new VetoablePropertyChangeEvent(source, name, value, aValue);
                bus.publish(lEvent);
            }

            E lOldValue = value;
            value = aValue;

            if(bus != null)
            {
                PropertyChangeEvent lEvent = new PropertyChangeEvent(source, name, lOldValue, value);
                bus.publish(lEvent);
            }
        }
    }