anchor.diff:  
     UrlPattern _welcomeUrl;
     UrlPattern _listUrl;
  -  UrlPattern _detailUrl;
  +  UrlPattern _deprecatedListUrl;
  +//  UrlPattern _detailUrl;
   
     BookApp.created() : super.created() {
       _welcome = new State('welcome', BASE_PATH + '/');
       _welcomeUrl = new UrlPattern(BASE_PATH + r'/(index.html)?');
  -    _listUrl = new UrlPattern(BASE_PATH + r'/#!id=([\d|]+)');
  -    _detailUrl = new UrlPattern(BASE_PATH + r'/#!id=(\d+)&detail-([\d|]+)');
  +    _deprecatedListUrl = new UrlPattern(BASE_PATH + r'/#!id=(\d+|[\d|]+)');
  +    _listUrl = new UrlPattern(BASE_PATH + r'/#!id=([\d-]+)');
  +//    _detailUrl = new UrlPattern(BASE_PATH + r'/#!id=(\d+)&detail-([\d|]+)');
   
       _machine = new PushdownAutomatonStateMachine<State>(initialState: _welcome);
   
  
positive.code:     _showStatePage();
    }
  
    void routeToLoaderOrList(String path) {
      // TODO: find out if we already have this loaded, skip to LIST if so
      String itemIds = _listUrl.parse(path)[0];
      _suggestionsLoader.startLoading(itemIds);
      var wait = new WaitState(path);
      if (_machine.currentState is! WaitState) {
        _machine.pushTo(wait);
      } else {
        // Guard against two or more wait states on top of each other.
  
negative.code: 
      _router = new Router()
        ..addHandler(_welcomeUrl, routeToWelcome)
        ..addHandler(_deprecatedListUrl, routeFromDeprecatedLoaderUrl)
        ..addHandler(_listUrl, routeToLoaderOrList);
  //      ..addHandler(_detailUrl, routeToDetail);
      _router.listen();
  
      // This breaks in Safari and Firefox, currently.
  