avoid unnecessary recursions