completely refactored with MVC architecture, added tests, added self-installer