anchor.diff:    }
   
   /**
  - * Registeres a [View] for a particular [Route].
  - * Throws [ArgumentError] if trying to overwrite an already registered [route_name].
  + * Registeres a [view] for a particular [Route] identified by [route_name] in [Router].
  + * It is not allowed to override already registered view.
    */
     void registerView(String route_name, View view){
  -    //TODO consider only warning
       if(this._views.containsKey(route_name)){
         throw new ArgumentError("Route name '$route_name' already in use in PageNavigator.");
       }
  
positive.code: 
      // Decode [url] parameters and fill them into [Map].
      Map result = new Map();
      for (var i = 0; i < this._variables.length; i++) {
        result[this._variables[i]] = Uri.decodeComponent(match.group(i+1));
      }
  
      return result;
  
negative.code:   }
  
  /**
   * Navigates the browser to the selected route with given [data].
   * Then a [View] is selected and [Data] passed via updates are communicated.
   * So when [View] changes [Data] then [PageNavigator] changes [History] url.
   * Vice versa when client navigates to active route only [Data] is updated
   * and [View.load] and [View.unload] is not called. Therefore [View] should
   * listen to [Data] changes.
   *
   * Use flag [pushState] to push the new urlt to browser history.
   */
    void navigate(String name, Map data, {bool pushState}){
      if(this._views[name] == null){
  