1. Visit expressions in one traversal, collect data about types along the way (instead of multiple traversals like now) 2. Better handling of functions 3. Better formalism for Scopes (and phantom exprs with preset id) 4. A lot more types and fewer plain Ints 5. Split up Context