anchor.diff:    }
   
     String get search {
  -    return uri.query;
  +    if(uri.query.length == 0) return '';
  +    return '?'+uri.query;
     }
   
     toString() => uri.toString()+" isHashPath: $isHashPath";
   
  +  toMap() {
  +    Map map = new Map();
  +    map['path'] = this.path;
  +    map['hash'] = this.hash;
  +    map['search'] = this.search;
  +    map['isHashPath'] = this.isHashPath;
  +    return map;
  +  }
  +
  +  Uri replacePathAndQuery(Uri uri, String pathAndQuery){
  +    int index = pathAndQuery.indexOf("?");
  +    String path = pathAndQuery;
  +    String query = "";
  +    if(index != -1){
  +      path = pathAndQuery.substring(0, index);
  +      query = pathAndQuery.substring(index+1);
  +    }
  +    uri = uri.replace(path: path, query: query);
  +    return uri;
  +  }
   
     // parseUrl(location, mode) - Augment the native URL() constructor to get info about hash paths
     //
  
positive.code:   // Import and activate a custom element or template
  void importAndActivate(AppRouter router, String importUri, AppRoute route, RouteUri url, Map eventDetail){
    Element contentHtml;
    pageLoadedCallback(Event e, AppRouter router, Element contentHtml, String importUri, AppRoute route, RouteUri url, Map eventDetail) {
      final String content = e.detail['response'];
  
      if (route.active) {
  
negative.code:   bool isHashPath = false;
  
    String get hash {
      if(uri.fragment.length == 0) return '';
      return '#'+uri.fragment;
    }
  
    String get path {
  