First Checkin with AST Modification.
Some refactoring to support modification.