change: refactor settings framework