first version crawling
better version with refactor