using history.pushState for navigation. It's better but not perfect yet.