First pass at Tree refactor