 			else if (arguments.returnAs == "objects")
 			{
 				loc.returnValue = [];
+				loc.doneObjects = "";
 				loc.iEnd = loc.findAll.query.recordCount;
 				for (loc.i=1; loc.i <= loc.iEnd; loc.i++)
-					ArrayAppend(loc.returnValue, $createInstance(properties=loc.findAll.query, persisted=true, row=loc.i));
+				{
+					loc.object = $createInstance(properties=loc.findAll.query, persisted=true, row=loc.i);
+					if (!ListFind(loc.doneObjects, loc.object.key(), Chr(7)))
+					{
+						if (Len(arguments.include))
+							loc.object[arguments.include] = $invoke(componentReference=loc.object, method=arguments.include, returnAs=arguments.returnAs);
+						ArrayAppend(loc.returnValue, loc.object);
+						loc.doneObjects = ListAppend(loc.doneObjects, loc.object.key(), Chr(7));
+					}
+				}
 			}
 		}
 	</cfscript>

		// setup object properties in the this scope
		if (IsQuery(arguments.properties) && arguments.properties.recordCount != 0)
		{
			loc.iEnd = ListLen(arguments.properties.columnList);
			for (loc.i=1; loc.i <= loc.iEnd; loc.i++)
			{
				this[ListGetAt(arguments.properties.columnList, loc.i)] = arguments.properties[ListGetAt(arguments.properties.columnList, loc.i)][arguments.row];
			}
		}
		else if (IsStruct(arguments.properties) && !StructIsEmpty(arguments.properties))

	<cfscript>
		var loc = {};

		// we only allow one association to be loaded when returning objects
		if (application.wheels.environment != "production" && arguments.returnAs == "objects" && (Find(",", arguments.include) || Find("(", arguments.include)))
			$throw(type="Wheels", message="Incorrect Arguments", extendedInfo="You cannot include more than one association when returning an array of objects.");

		// count records and get primary keys for pagination
		if (arguments.page)
