anchor.diff:  				if(isEmptyInput(arguments.input)) {
   					if(arguments.allowNull)
   						return "";
  -					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, arguments.context & ": Input HTML required", "Input HTML required: context=" & arguments.context & ", input=" & arguments.input, arguments.context));
  +					userParams = [arguments.context];
  +					logParams = [arguments.context, arguments.input];
  +					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, variables.ESAPI.resourceBundle().messageFormat("Validator.htmlValueMissing.userMessage", userParams), variables.ESAPI.resourceBundle().messageFormat("Validator.htmlValueMissing.logMessage", logParams), arguments.context));
   				}
   
   				if(arguments.input.length() > arguments.maxLength) {
  -					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, arguments.context & ": Invalid HTML. You enterted " & arguments.input.length() & " characters. Input can not exceed " & arguments.maxLength & " characters.", arguments.context & " arguments.input exceedes maxLength by " & (arguments.input.length() - arguments.maxLength) & " characters", arguments.context));
  +					userParams = [arguments.context, arguments.input.length(), arguments.maxLength];
  +					logParams = [arguments.context, arguments.input.length() - arguments.maxLength];
  +					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, variables.ESAPI.resourceBundle().messageFormat("Validator.htmlTooLong.userMessage", userParams), variables.ESAPI.resourceBundle().messageFormat("Validator.htmlTooLong.logMessage", userParams), arguments.context));
   				}
   
   				try {
  
positive.code: 							p = newJava("java.util.regex.Pattern").compile(arguments.type);
  						}
  						catch(java.util.regex.PatternSyntaxException e) {
  							throw(object=newJava("java.lang.RuntimeException").init("Validation misconfiguration, specified type to validate against was null: context=" & arguments.context & ", type=" & arguments.type & "), input=" & arguments.input));
  						}
  					}
  
  					if(!p.matcher(canonical).matches()) {
  						throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(ESAPI=variables.ESAPI, userMessage=arguments.context & ": Invalid input. Please conform to: " & p.pattern() & " with a maximum length of " & arguments.maxLength, logMessage="Invalid input: context=" & arguments.context & ", type=" & arguments.type & "(" & p.pattern() & "), input=" & arguments.input, context=arguments.context));
  					}
  
  					return canonical;
  				}
  				catch(org.owasp.esapi.errors.EncodingException e) {
  					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, arguments.context & ": Invalid input. An encoding error occurred.", "Error canonicalizing user input", e, arguments.context));
  				}
  			}
  		</cfscript>
  
negative.code: 			// CF8 requires 'var' at the top
  			var canonical = "";
  			var p = "";
  			var params = [];
  			var userParams = [];
  			var logParams = [];
  
  			if(structKeyExists(arguments, "errorList")) {
  				try {
  