     (.getToken -goog-history))
 
   (replace-token
-    [_this new-token]
-    (.replaceToken -goog-history new-token))
+    [this new-token]
+    (when (not= (token this) new-token)
+      (.replaceToken -goog-history new-token)))
 
   (set-token
     [_this token]

             [::on-api-event token]
             (dispatch-action [::set-token token])

             [::on-link-click href]
             (let [token (if (clojure.string/starts-with? href "#")
                           ; hrefs can contain hashes, token - can't
                           (subs href 1)
                           href)]
               (set-token history token))

             :else
             (app-control model signal dispatch-signal dispatch-action)))))

               (println "[routing] start")
               (add-watch model ::token-watcher
                          (fn [_key _atom old-state new-state]
                            (when (not= (::token old-state) (::token new-state))
                              (replace-token history (::token new-state)))))

               (reset! unlisten
