futher optimize