Refactored implementation and added installer