optimise reverse() calls out, add tests