protected List <Segment> installedBetween(Tile start, Tile end) {
    final List <Segment> installed = super.installedBetween(start, end) ;
    if (installed == null || installed.size() < 4) return installed ;
    //
    //  If the stretch to install is long enough, we cut out the middle two
    //  segments and install a set of Blast Doors in their place-
    final World world = start.world ;
    final int cut = installed.size() / 2 ;
    final ShieldWall
      a = (ShieldWall) installed.atIndex(cut),
      b = (ShieldWall) installed.atIndex(cut - 1) ;
    if (a.facing != b.facing || a.facing == CORNER) return installed ;
    //
    //  The doors occupy the exact centre of this area, with the same facing-
    final Vec3D centre = a.position(null).add(b.position(null)).scale(0.5f) ;
    final BlastDoors doors = new BlastDoors(a.base(), a.facing) ;
    doors.setPosition(centre.x - 1.5f, centre.y - 1.5f, world) ;
    final Box2D bound = doors.area(null) ;
    for (Venue v : installed) {
      if (v == a || v == b) continue ;
      if (v.area(null).cropBy(bound).area() > 0) return installed ;
    }
    //
    //  Update and return the list-
    installed.remove(a) ;
    installed.remove(b) ;
    installed.add(doors) ;
    return installed ;
  }