avoid repeatedly compution