public function getCMSFields() {

		$fields = parent::getCMSFields();

		// Determine whether the tag types should be displayed.

		$types = array();
		foreach($this->service->getFusionTagTypes() as $type => $field) {
			$types[$type] = $type;
		}
		if(count($types)) {

			// The serialised representation will require a custom field to display correctly.

			$fields->replaceField('TagTypes', $list = ListboxField::create(
				'Types',
				'Tag Types',
				$types
			)->setMultiple(true));

			// Disable existing tag types to prevent deletion.

			$items = is_string($this->TagTypes) ? array_keys(unserialize($this->TagTypes)) : array();
			$list->setValue($items);
			$list->setDisabledItems($items);
		}
		else {

			// There are no existing or configuration defined tag types.

			$fields->removeByName('TagTypes');
		}

		// Allow extension.

		$this->extend('updateFusionTagCMSFields', $fields);
		return $fields;
	}