refine if loop