create superclass to handle common functionality between runner and previewer