 		var loc = {};
 		loc.model = model(arguments.association.modelName);
 
-		this[arguments.property] = [];
+		if (!StructKeyExists(this, arguments.property) || !IsArray(this[arguments.property]))
+			this[arguments.property] = [];
+		
 		if (IsStruct(arguments.value))
 		{
 			for (loc.item in arguments.value)

			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

<cffunction name="$updateCollectionObject" returntype="void" output="false" access="public">
	<cfargument name="property" type="string" required="true" />
	<cfargument name="value" type="struct" required="true" />
	<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], arguments.position);
	</cfscript>
</cffunction>

