why is_valid instead of just checking "if errors" ?