 <cffunction name="$updateCollectionObject" returntype="void" output="false" access="public">
 	<cfargument name="property" type="string" required="true" />
 	<cfargument name="value" type="struct" required="true" />
-	<cfscript>
-		var loc = {};
-		loc.position = ArrayLen(this[arguments.property]);
-		if (IsObject(this[arguments.property][loc.position]))
-			this[arguments.property][loc.position].setProperties(properties=arguments.value);
+	<cfargument name="position" type="numeric" required="false" default="0" />
+	<cfscript>
+		var loc = {};
+		if (!arguments.position)
+			arguments.position = ArrayLen(this[arguments.property]);
+		if (IsObject(this[arguments.property][arguments.position]))
+			this[arguments.property][arguments.position].setProperties(properties=arguments.value);
 		else
-			ArrayDeleteAt(this[arguments.property], loc.position);
+			ArrayDeleteAt(this[arguments.property], arguments.position);
 	</cfscript>
 </cffunction>
 

			loc.iEnd = ArrayLen(arguments.value);
			for (loc.i = 1; loc.i lte loc.iEnd; loc.i++)
			{
				ArrayAppend(this[arguments.property], $getAssociationObject(property=arguments.property, value=arguments.value[loc.i], association=arguments.association));
				$updateCollectionObject(property=arguments.property, value=arguments.value[loc.i]);
			}
		}
		// sort the order of the objects in the array if the property is set

		var loc = {};
		loc.model = model(arguments.association.modelName);

		if (!StructKeyExists(this, arguments.property) || !IsArray(this[arguments.property]))
			this[arguments.property] = [];
		
		if (IsStruct(arguments.value))
		{
			for (loc.item in arguments.value)
