fixed some bugs, mainly using run() rather than start()