nit: this isn't actually immutable, the caller can keep a reference to the passed-in ArrayList and mutate it all he wants. If you really want immutable there are bigger hoops to jump through: you need to say `unmodifiableList(new ArrayList(headers))`