I would try something as: int index = 0; ProfileFieldLevelSecurity [] fieldArray = new ProfileFieldLevelSecurity [updateReadList.length]; for(String field:updateReadList) { ProfileFieldLevelSecurity fieldSec = new ProfileFieldLevelSecurity(); fieldSec.setField(field); fieldSec.setReadable(true); fieldSec.setEditable(false); fieldArray[index++] = fieldSec; // add all the FLS attributes to an array } admin.setFieldPermissions(fieldArray); // set field permissions out of the loop api.updateMetadata(new Metadata[] {admin}); // call the udpate in bulk