use LinkedHashSet to preserve order of sub-filters, since first-match (or first-rejection) can be used to either optimize or prefer certain filters.