Adding version to JavaDoc
Adding messages to assert statements for more descriptive error messages
Refactoring for better readability
Changing field scope
Adding JavaDoc
Adding package-info