DSL idea mostly done, needs refactoring