massive redesign of PrintVisitor so project 2 runs more smoothly