It doesn't make sense to return `unmodifiableList` in `getFields` but return a mutable iterator here, I guess it's ok to get a mutable list or we should maybe make both unmodifiable but I don't think we should add yet another object wrapper here WDYT?