why do we need a factory?  DSL handles all operations