This duplicates code from run(), so I think you should modify run() to use this.  I don't think it will be too disruptive to hoist out.