Refactor listener/visitor pattern. Many other additions.