refactoring to structure the project and generate nice javadoc