revamp predicate handling