refactor and redesign DSL, Classes