add back validation and callback