More refactoring, everything has an interface and JavaDocs now.