 		persisted=arguments.persisted,
 		properties=arguments.properties,
 		row=arguments.row,
-		useFilterLists=(!arguments.persisted)
-	);
-
-	// If the object should be persisted, call afterFind, else call afterNew.
-	if ((arguments.persisted && local.rv.$callback("afterFind", arguments.callbacks)) || (!arguments.persisted && local.rv.$callback("afterNew", arguments.callbacks))) {
+		useFilterLists=!arguments.persisted
+	);
+
+	// If the object should be persisted, run afterFind callback, otherwise run afterNew callback.
+	// Then proceed to afterInitialization callback unless the previous callback method returned false.
+	local.afterFindResult = arguments.persisted && local.rv.$callback("afterFind", arguments.callbacks);
+	local.afterNewResult = !arguments.persisted && local.rv.$callback("afterNew", arguments.callbacks);
+	if (local.afterFindResult || local.afterNewResult) {
 		local.rv.$callback("afterInitialization", arguments.callbacks);
 	}
 

 * Returns `true` if the object was saved successfully to the database, `false` if not.
 *
 * ```
 * Save the user object to the database (will automatically do an `INSERT` or `UPDATE` statement depending on if the record is new or already exists.
 * user.save();
 *
 * Save the user object directly in an if statement without using `cfqueryparam` and take appropriate action based on the result.
 * if (user.save(parameterize=false)) {
 *   flashInsert(notice="The user was saved!");
 *   redirectTo(action="edit");
 * } else {

}

/**
 * Internal function.
 * Create a new record in the database or update it if it already exists.
 * Also set associations and run all related callbacks.
 * Called from the save function above (inside a transaction).
 */
public boolean function $save(
	required any parameterize,
