support custom predicates