Clean up code, add exception system.
Update the visitor.