added optional fields argument