even more precalculation