refactor Start() and Restart()