1) add more docs
2) refactor Start() function