simplify DSL to use self