will only check one time when canSetAll is false