actual validation logic