improved URL handling; push/replace state calls don't trigger the statechange event