Issue #9 - refactored a bunch of code to be clearer as well as added some package-info.java's to explain a few packages better.