Refactoring. Smaller packages with more separation of concerns.
Added Override annotations
simpler exception handling