replaced runPhase 'api' with virtual methods and added two synchonization functions for precise control on timed code in go() phase