added validation and made creation async