validity is already handled in most cases, can refine