split runner into 3 modules for clarity