A lot of code refactor + level restart button fix