get generics right, make public list unmodifiable and insertions type safe