Refactored some class names, added some documentation, changed some class access modifiers