substep callback split into prestep/poststep, pending destroys