improve performance; add a new parameter so we can manually call `run` method