isolate start/end back into run()