                               (replace-token history (::token new-state)))))
 
                (reset! unlisten
-                       (listen history #(dispatch-signal [::on-history-event {:token %1 :browser-event? %2 :event-data %3}]))))
+                       (listen history #(dispatch-signal [::on-history-event {:token %1 :browser-event? %2 :event-data %3}])))
+
+               ; initial signal
+               (dispatch-signal [::on-history-event {:token (token history) :browser-event? true :event-data nil}]))
 
              :on-stop
              (do

            token - new token
            browser-event? - true if event was initiated by action in browser, e.g. clicking Back button
            event-data - data which was passed from replace-token/push-token
          Fires the initial callback. Returns a function which stops listening.")
  (replace-token [this token] [this token event-data]
                 "Replace token and fire an event with additional data passed (data is nil if not specified);
                 do nothing if current token is already equal to the specified one.")

(defrecord -History [-goog-history]
  HistoryProtocol
  (listen
    [_this callback]
    (let [key (goog.events/listen -goog-history EventType/NAVIGATE #(callback (.-token %)
                                                                              (.-isNavigation %)
                                                                              *-history-event-data*))]
      #(goog.events/unlistenByKey key)))

  (replace-token [this new-token] (replace-token this new-token nil))
