Restructured to allow for custom field types to be added