these fields should all be `final`