Right, the list is accessible externally so it makes sense to wrap it in Collections.unmodifiableList(). As for the duplication, I don't know what else I can do. I wish there was and ArraySet available. CopyOnWriteArraySet does look like a set and also maintains insertion order of elements but contains() is O(n) so it's no good.