code review & refactor
add sms dependency