-      if (!route) return false;
-      currentRoute.run('unload', null, route === currentRoute);
-      var state = OSM.parseHash(url);
-      map.setState(state);
-      window.history.pushState(state, document.title, url);
-      currentPath = path;
-      currentRoute = route;
-      currentRoute.run('pushstate', currentPath);
-      return true;
-    };
-
-    router.replace = function (url) {
-      window.history.replaceState(OSM.parseHash(url), document.title, url);
-    };
+    if (path === currentPath) return;
+    currentRoute.run("unload", null, route === currentRoute);
+    currentPath = path;
+    currentRoute = route;
+    currentRoute.run("popstate", currentPath);
+    updateSecondaryNav();
+    map.setState(e.originalEvent.state, { animate: false });
+  });
+
+  router.route = function (url) {
+    var path = url.replace(/#.*/, ""),
+        route = routes.recognize(path);
+    if (!route) return false;
+    currentRoute.run("unload", null, route === currentRoute);
+    var state = OSM.parseHash(url);
+    map.setState(state);
+    window.history.pushState(state, document.title, url);
+    currentPath = path;
+    currentRoute = route;
+    currentRoute.run("pushstate", currentPath);
+    updateSecondaryNav();
+    return true;
+  };