refactored argument and predicate classes