computing division is expensive (fetch fen, build replay) so cache it