     userRoute = userRoute.slice 1  if (userRoute.indexOf '!') is 0
     @visitedRoutes.push userRoute  if @visitedRoutes.last isnt userRoute
 
-    [frag, query...] = (userRoute ? @getDefaultRoute?() ? '/').split '?'
+    [frags, query...] = (userRoute ? @getDefaultRoute?() ? '/').split '?'
 
     query = @utils.parseQuery query.join '&'
 

    if shouldPushState
      method = if replaceState then 'replaceState' else 'pushState'
      history[method] objRef, path, path

    for edge in frag
      if node[edge]
        node = node[edge]
      else
        param = node[':']
        if param?
          params[param.name] = edge
          node = param
        else @handleNotFound frag.join '/'

    routeInfo = {params, query}
    @emit 'RouteInfoHandled', {params, query, path}

    node = @tree
    params = {}

    frags = frags.split '/'
    frags.shift() # first edge is garbage like '' or '#!'

    frags = frags.filter Boolean

    path = "/#{frags.join '/'}"

    qs = @utils.stringifyQuery query
    path += "?#{qs}"  if qs.length

    for edge in frags
      if node[edge]
        node = node[edge]
      else
        param = node[':']
        if param?
          params[param.name] = edge
          node = param
        else @handleNotFound frags.join '/'

    if not suppressListeners and shouldPushState and not replaceState and path is @currentPath
      @emit 'AlreadyHere', path
