fields should be OrderedDict