refactoring DSL