finished refactor, customizable settings