Turn validate() into a callback rather than a return value (ready for async stuff)