Expensive build method (but the private constructor is cheap, and so are the Scala getters of the maps).