protected List <Segment> installedBetween(Tile start, Tile end) {
    if (start == null) return null ;
    if (end   == null) end = start ;

    final RoadSearch search = new RoadSearch(start, end, Element.VENUE_OWNS) {
      protected boolean canEnter(Tile t) { return true ; }
    } ;
    search.doSearch() ;
    final Tile origPath[] = search.bestPath(Tile.class) ;
    
    final Batch <Tile> placePath = new Batch <Tile> () ;
    for (Tile t : origPath) {
      final Tile p = placeCoord(t) ;
      if (p.flaggedWith() != null) continue ;
      p.flagWith(placePath) ;
      placePath.add(p) ;
    }
    for (Tile p : placePath) p.flagWith(null) ;
    
    final List <Segment> installed = new List() ;
    for (Tile p : placePath) {
      final Segment v = instance(base()) ;
      v.setPosition(p.x, p.y, p.world) ;
      if (! v.canPlace()) return null ;
      installed.add(v) ;
    }
    
    for (Segment s : installed) {
      s.refreshFromNear(installed) ;
    }
    return installed ;
  }