       if noughts.state.hasPreviousState()
         noughts.state.popState()
       else
-        noughts.state.changeState(noughts.state.INITIAL_PROMO)
+        noughts.state.changeState(noughts.state.INITIAL_PROMO,
+            noughts.UrlBehavior.PUSH_URL)
 
     $(".nUrlInviteButton").on "click", ->
       Meteor.call "newGame", (err, gameId) ->

      # the game for the last one.
    displayError("Game not found for requestIds: " + requestIds) unless game
    Session.set("gameId", game._id)
    noughts.state.changeState(noughts.state.PLAY)
  else if path == "new"
    noughts.state.changeState(noughts.state.NEW_GAME_MENU)
  else if path == ""
    # TODO(dthurn): If the user is logged in, display their game list instead
    # of the new game promo
    noughts.state.changeState(noughts.state.INITIAL_PROMO)
  else # For simplicity, assume any unrecognized path is a game id
    Meteor.call "validateGameId", path, (err, gameExists) ->
      if err then throw err

      Meteor.call "addPlayerIfNotPresent", path, (err) ->
        if err then throw err
        # TODO(dthurn): Show some kind of message if the game is full and the
        # viewer is only a spectator, allowing the viewer to watch or perhaps
        # "clone" the game.
        noughts.state.changeState(noughts.state.PLAY,
            noughts.UrlBehavior.PRESERVE_URL)