 <!--- PUBLIC MODEL INITIALIZATION METHODS --->
 
-<cffunction name="validatesConfirmationOf" returntype="void" access="public" output="false" hint="Validates that the value of the specified property also has an identical confirmation value. (This is common when having a user type in their email address a second time to confirm, confirming a password by typing it a second time, etc.) The confirmation value only exists temporarily and never gets saved to the database. By convention, the confirmation property has to be named the same as the property with ""Confirmation"" appended at the end. Using the password example, to confirm our `password` property, we would create a property called `passwordConfirmation`."
-	examples=
-	'
-		// Make sure that the user has to confirm their password correctly the first time they register (usually done by typing it again in a second form field)
-		validatesConfirmationOf(property="password", when="onCreate", message="Your password and its confirmation do not match. Please try again.");
-	'
-	categories="model-initialization,validations" chapters="object-validation" functions="validatesExclusionOf,validatesFormatOf,validatesInclusionOf,validatesLengthOf,validatesNumericalityOf,validatesPresenceOf,validatesUniquenessOf">
-	<cfargument name="properties" type="string" required="false" default="" hint="Name of property or list of property names to validate against (can also be called with the `property` argument).">
-	<cfargument name="message" type="string" required="false" hint="Supply a custom error message here to override the built-in one.">
-	<cfargument name="when" type="string" required="false" default="onSave" hint="Pass in `onCreate` or `onUpdate` to limit when this validation occurs (by default validation will occur on both create and update, i.e. `onSave`).">
-	<cfargument name="condition" type="string" required="false" default="" hint="String expression to be evaluated that decides if validation will be run (if the expression returns `true` validation will run).">
-	<cfargument name="unless" type="string" required="false" default="" hint="String expression to be evaluated that decides if validation will be run (if the expression returns `false` validation will run).">
+<cffunction name="automaticValidations" returntype="void" access="public" output="false">
+	<cfargument name="value" type="boolean" required="true">
+	<cfscript>
+		variables.wheels.class.automaticValidations = arguments.value;
+	</cfscript>
+</cffunction>
+
+<cffunction name="validate" returntype="void" access="public" output="false">
+	<cfargument name="methods" type="string" required="false" default="">
+	<cfargument name="condition" type="string" required="false" default="">
+	<cfargument name="unless" type="string" required="false" default="">
+	<cfargument name="when" type="string" required="false" default="onSave">
+	<cfscript>
+		$registerValidation(argumentCollection=arguments);
+	</cfscript>
+</cffunction>
+
+<cffunction name="validateOnCreate" returntype="void" access="public" output="false">
+	<cfargument name="methods" type="string" required="false" default="">
+	<cfargument name="condition" type="string" required="false" default="">
+	<cfargument name="unless" type="string" required="false" default="">
+	<cfscript>
+		$registerValidation(when="onCreate", argumentCollection=arguments);
+	</cfscript>
+</cffunction>
+
+<cffunction name="validateOnUpdate" returntype="void" access="public" output="false">
+	<cfargument name="methods" type="string" required="false" default="">
+	<cfargument name="condition" type="string" required="false" default="">
+	<cfargument name="unless" type="string" required="false" default="">
+	<cfscript>
+		$registerValidation(when="onUpdate", argumentCollection=arguments);
+	</cfscript>
+</cffunction>
+
+<cffunction name="validatesConfirmationOf" returntype="void" access="public" output="false">
+	<cfargument name="properties" type="string" required="false" default="">
+	<cfargument name="message" type="string" required="false">
+	<cfargument name="when" type="string" required="false" default="onSave">
+	<cfargument name="condition" type="string" required="false" default="">
+	<cfargument name="unless" type="string" required="false" default="">
 	<cfscript>
 		$args(name="validatesConfirmationOf", args=arguments);
 		$registerValidation(methods="$validatesConfirmationOf", argumentCollection=arguments);
 	</cfscript>
 </cffunction>
 
-<cffunction name="validatesExclusionOf" returntype="void" access="public" output="false" hint="Validates that the value of the specified property does not exist in the supplied list."
-	examples=
-	'
-		// Do not allow "PHP" or "Fortran" to be saved to the database as a cool language
-		validatesExclusionOf(property="coolLanguage", list="php,fortran", message="Haha, you can not be serious. Try again, please.");
-	'
-	categories="model-initialization,validations" chapters="object-validation" functions="validatesConfirmationOf,validatesExclusionOf,validatesFormatOf,validatesInclusionOf,validatesLengthOf,validatesNumericalityOf,validatesPresenceOf,validatesUniquenessOf">
-	<cfargument name="properties" type="string" required="false" default="" hint="See documentation for @validatesConfirmationOf.">
-	<cfargument name="list" type="string" required="true" hint="Single value or list of values that should not be allowed.">
-	<cfargument name="message" type="string" required="false" hint="See documentation for @validatesConfirmationOf.">
-	<cfargument name="when" type="string" required="false" default="onSave" hint="See documentation for @validatesConfirmationOf.">
-	<cfargument name="allowBlank" type="boolean" required="false" hint="If set to `true`, validation will be skipped if the property value is an empty string or doesn't exist at all. This is useful if you only want to run this validation after it passes the @validatesPresenceOf test, thus avoiding duplicate error messages if it doesn't.">
-	<cfargument name="condition" type="string" required="false" default="" hint="See documentation for @validatesConfirmationOf.">
-	<cfargument name="unless" type="string" required="false" default="" hint="See documentation for @validatesConfirmationOf.">
+<cffunction name="validatesExclusionOf" returntype="void" access="public" output="false">
+	<cfargument name="properties" type="string" required="false" default="">
+	<cfargument name="list" type="string" required="true">
+	<cfargument name="message" type="string" required="false">
+	<cfargument name="when" type="string" required="false" default="onSave">
+	<cfargument name="allowBlank" type="boolean" required="false">
+	<cfargument name="condition" type="string" required="false" default="">
+	<cfargument name="unless" type="string" required="false" default="">
 	<cfscript>
 		$args(name="validatesExclusionOf", args=arguments);
 		arguments.list = $listClean(arguments.list);

	</cfscript>
</cffunction>

<cffunction name="validatesLengthOf" returntype="void" access="public" output="false" hint="Validates that the value of the specified property matches the length requirements supplied. Use the `exactly`, `maximum`, `minimum` and `within` arguments to specify the length requirements."
	examples=
	'
		// Make sure that the `firstname` and `lastName` properties are not more than 50 characters and use square brackets to dynamically insert the property name when the error message is displayed to the user. (The `firstName` property will be displayed as "first name".)
		validatesLengthOf(properties="firstName,lastName", maximum=50, message="Please shorten your [property] please. 50 characters is the maximum length allowed.");

		// Make sure that the `password` property is between 4 and 15 characters
		validatesLengthOf(property="password", within="4,20", message="The password length must be between 4 and 20 characters.");
	'
	categories="model-initialization,validations" chapters="object-validation" functions="validatesConfirmationOf,validatesExclusionOf,validatesFormatOf,validatesInclusionOf,validatesNumericalityOf,validatesPresenceOf,validatesUniquenessOf">
	<cfargument name="properties" type="string" required="false" default="" hint="See documentation for @validatesConfirmationOf.">
	<cfargument name="message" type="string" required="false" hint="See documentation for @validatesConfirmationOf.">
	<cfargument name="when" type="string" required="false" default="onSave" hint="See documentation for @validatesConfirmationOf.">
	<cfargument name="allowBlank" type="boolean" required="false" hint="See documentation for @validatesExclusionOf.">
	<cfargument name="exactly" type="numeric" required="false" hint="The exact length that the property value must be.">
	<cfargument name="maximum" type="numeric" required="false" hint="The maximum length that the property value can be.">
	<cfargument name="minimum" type="numeric" required="false" hint="The minimum length that the property value can be.">
	<cfargument name="within" type="string" required="false" hint="A list of two values (minimum and maximum) that the length of the property value must fall within.">
	<cfargument name="condition" type="string" required="false" default="" hint="See documentation for @validatesConfirmationOf.">
	<cfargument name="unless" type="string" required="false" default="" hint="See documentation for @validatesConfirmationOf.">
	<cfscript>
		$args(name="validatesLengthOf", args=arguments);
		if (Len(arguments.within))

	</cfscript>
</cffunction>

<cffunction name="$validationExists" returntype="boolean" access="public" output="false">
	<cfargument name="property" type="string" required="true">
	<cfargument name="validation" type="string" required="true">
	<cfscript>
		var loc = {};

		// checks to see if a validation has been created for a property
		loc.rv = false;
		for (loc.key in variables.wheels.class.validations)
		{
