abstracting execution code out and other things