pull simulator out into its own module