further optimization