more types and stuff, added Predicate