:valid and :invalid are a huge pain