refactor for more control
convert into more powerful forms and add eval