Code review

Don't merge, I'm using this as a code review branch.
personal style, but if I expose a collection to the outside world and that collection is immutable, I expose the Immutable interfaces. Also, why is it a `List` and not a `Collection`. Does order matter? If not, it should be a `ImmutableCollection`.