@Override
  public boolean matches(Object argument) {
    if (argument instanceof PropertyChangeEvent) {
      PropertyChangeEvent event = (PropertyChangeEvent) argument;
      return propertyName.equals(event.getPropertyName()) &&
              ((oldValue == null && event.getOldValue() == null) ||
                (oldValue.equals(event.getOldValue()))) &&
              ((newValue == null && event.getNewValue() == null) ||
                (newValue.equals(event.getNewValue())));
    }
    return false;
  }