 		{
 			for (loc.i = 1; loc.i lte ArrayLen(arguments.value); loc.i++)
 			{
-				// only create the object if the developer has not already loaded on for this position
-				if (loc.i gt ArrayLen(this[arguments.property]) || !IsObject(this[arguments.property][loc.i]))
+				if (IsObject(arguments.value[loc.i]) && ArrayLen(this[arguments.property]) gte loc.i && IsObject(this[arguments.property][loc.i]) && this[arguments.property][loc.i].compareTo(arguments.value[loc.i]))
+				{
+					this[arguments.property][loc.i] = $getAssociationObject(property=arguments.property, value=arguments.value[loc.i], association=arguments.association, delete=arguments.delete);
+					$updateCollectionObject(property=arguments.property, value=arguments.value[loc.i], position=loc.i);
+				}
+				else if (IsStruct(arguments.value[loc.i]) && ArrayLen(this[arguments.property]) gte loc.i && IsObject(this[arguments.property][loc.i]))
+				{
+					this[arguments.property][loc.i] = $getAssociationObject(property=arguments.property, value=arguments.value[loc.i], association=arguments.association, delete=arguments.delete);
+					$updateCollectionObject(property=arguments.property, value=arguments.value[loc.i], position=loc.i);
+				}
+				else
+				{
 					ArrayAppend(this[arguments.property], $getAssociationObject(property=arguments.property, value=arguments.value[loc.i], association=arguments.association, delete=arguments.delete));
-				$updateCollectionObject(property=arguments.property, value=arguments.value[loc.i], position=loc.i);
+					$updateCollectionObject(property=arguments.property, value=arguments.value[loc.i]);
+				}
 			}
 		}
 		// sort the order of the objects in the array if the property is set

		{
			// get our primary keys, if they don't exist, then we create a new object
			loc.arguments.key = $createPrimaryKeyList(params=arguments.value, keys=loc.model.primaryKey());

			if (Len(loc.arguments.key))
				loc.object = loc.model.findByKey(argumentCollection=loc.arguments);
		
			if (StructKeyExists(arguments.value, "_delete") && IsBoolean(arguments.value["_delete"]) && arguments.value["_delete"])

			
			if (!IsObject(loc.object) && !loc.delete)
			{
				StructDelete(loc.arguments, "key", false);
				return $invoke(componentReference=loc.model, method="new", argumentCollection=loc.arguments);
			}
			else if (Len(loc.arguments.key) && loc.delete && arguments.association.nested.delete && arguments.delete)
			{
				$invoke(componentReference=loc.model, method="deleteByKey", argumentCollection=loc.arguments);
				return false;
			}
		}	
	</cfscript>
	<cfreturn loc.object />
