try to optimize