Perform most tree traversing work on the tree itself
Cleanup
Add pretty json print
Add silent set to state
Refactoring ugly names
Refactor API