 	</cfscript>
 </cffunction>
 
-<cffunction name="onMissingMethod" returntype="any" access="public" output="false">
+<cffunction name="propertyNames" returntype="string" access="public" output="false"
+	hint="Returns a list of property names (ordered by their respective column's ordinal position in the database table)."
+	examples=
+	'
+		<!--- Get a list of the property names in use in the user model --->
+  		<cfset propNames = model("user").propertyNames()>
+	'
+	categories="model-class" chapters="object-relational-mapping" functions="columnNames,dataSource,property,table,tableName">
+	<cfreturn variables.wheels.class.propertyList>
+</cffunction>
+
+<cffunction name="table" returntype="void" access="public" output="false"
+	hint="Use this method to tell Wheels what database table to connect to for this model. You only need to use this method when your table naming does not follow the standard Wheels convention of a singular object name mapping to a plural table name."
+	examples=
+	'
+		<!--- In models/User.cfc --->
+		<cffunction name="init">
+			<!--- Tell Wheels to use the `tbl_USERS` table in the database for the `user` model instead of the default (which would be `users`) --->
+			<cfset table("tbl_USERS")>
+		</cffunction>
+	'
+	categories="model-initialization" chapters="object-relational-mapping" functions="columnNames,dataSource,property,propertyNames,tableName">
+	<cfargument name="name" type="string" required="true" hint="Name of the table to map this model to.">
+	<cfscript>
+		variables.wheels.class.tableName = arguments.name;
+	</cfscript>
+</cffunction>
+
+<cffunction name="tableName" returntype="string" access="public" output="false"
+	hint="Returns the name of the database table that this model is mapped to."
+	examples=
+	'
+		<!--- Check what table the user model uses --->
+		<cfset whatAmIMappedTo = model("user").tableName()>
+	'
+	categories="model-class" chapters="object-relational-mapping" functions="columnNames,dataSource,property,propertyNames,table">
+	<cfreturn variables.wheels.class.tableName>
+</cffunction>
+
+<cffunction name="onMissingMethod" returntype="any" access="public" output="false" hint="This method handles dynamic finders, property and association methods. It is not part of the public API.">
 	<cfargument name="missingMethodName" type="string" required="true">
 	<cfargument name="missingMethodArguments" type="struct" required="true">
 	<cfscript>

<cffunction name="$setDefaultValues" returntype="any" access="public" output="false">
	<cfscript>
		var loc = {};
		loc.iEnd = ListLen(variables.wheels.class.propertyList);
		for (loc.i=1; loc.i <= loc.iEnd; loc.i++)
		{
			loc.iItem = ListGetAt(variables.wheels.class.propertyList, loc.i);
			if (Len(variables.wheels.class.properties[loc.iItem].defaultValue) && (!StructKeyExists(this, loc.iItem) || !Len(this[loc.iItem])))
			{
				// set the default value unless it is blank or a value already exists for that property on the object
				this[loc.iItem] = variables.wheels.class.properties[loc.iItem].defaultValue;
			}
		}
	</cfscript>
</cffunction>

<cffunction name="table" returntype="void" access="public" output="false" hint="Use this method to tell Wheels what database table to connect to for this model. You only need to use this method when your table naming does not follow the standard Wheels conventions of a singular object name mapping to a plural table name (i.e. `User.cfc` mapping to the table `users` for example).">
	<cfargument name="name" type="string" required="true" hint="Name of the table to map this model to">
	<cfscript>
		variables.wheels.class.tableName = arguments.name;
	</cfscript>
</cffunction>

<cffunction name="tableName" returntype="string" access="public" output="false" hint="Returns the name of the database table that this model is mapped to.">
	<cfreturn variables.wheels.class.tableName>
</cffunction>

<cffunction name="property" returntype="void" access="public" output="false" hint="Use this method to map an object property to either a table column with a different name than the property, to a specific SQL calculation or to a ColdFusion method. You only need to use this method when you want to override the default mapping that Wheels performs (i.e. `user.firstName` mapping to `users.firstname` for example).">
	<cfargument name="name" type="string" required="true" hint="Name of the property">
	<cfargument name="column" type="string" required="false" default="" hint="Name of the column to map the property to">
	<cfargument name="sql" type="string" required="false" default="" hint="SQL to use to calculate property value">
	<cfscript>
		variables.wheels.class.mapping[arguments.name] = {};
		if (Len(arguments.column))

		else
			arguments.missingMethodArguments.key = loc.keyOrObject;
	</cfscript>
</cffunction>