code: public void replaceMessage(ValidationMessage messageToReplace, ValidationMessage replacementMessage) {
  		ValidationResults oldValidationResults = validationResults;
  		List newMessages = new ArrayList(oldValidationResults.getMessages());
  		final boolean containsMessageToReplace = validationResults.getMessages().contains(messageToReplace);
  		if (containsMessageToReplace) {
  			newMessages.remove(messageToReplace);
  		}
  		newMessages.add(replacementMessage);
  		validationResults = new DefaultValidationResults(newMessages);
  		fireChangedEvents();
  		if (containsMessageToReplace
  				&& !ObjectUtils.nullSafeEquals(messageToReplace.getProperty(), replacementMessage.getProperty())) {
  			fireValidationResultsChanged(messageToReplace.getProperty());
  		}
  		fireValidationResultsChanged(replacementMessage.getProperty());
  	}
docs: TODO: test