I started this project when first learning Java and OO... So major refactoring