refactor the configuration into separate classes
add level-based configuration