some of that multithreading stuff can be done more abstractly from StepPage