Criteria should really be an interface so that users can implemen their own