updated with requirements