method private cached_select =
    match cached_selected with
      | Some c -> c
      | None ->
          let c = self#select in
            cached_selected <- Some c ;
            c