merge-update of trunk and disabling GUI-Control separation
authorPatric Plitzner <p.plitzner@bgbm.org>
Mon, 18 Nov 2013 14:17:08 +0000 (14:17 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Mon, 18 Nov 2013 14:17:08 +0000 (14:17 +0000)
49 files changed:
1  2 
.gitattributes
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/transientServices/TransientTaxonService.java
eu.etaxonomy.taxeditor.editor/plugin.xml
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermEditor.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermContentProvider.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermLabelProvider.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/handler/CreateDefinedTermHandler.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/handler/CreateTermVocabularyHandler.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/handler/DeleteTermBaseHandler.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/operation/CreateTermVocabularyOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/operation/DeleteTermBaseOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/operation/MoveDefinedTermOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/wizard/JaxbExportWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/AbstractPostOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/IPreferenceKeys.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/EnumComboElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/AbstractFilteredCdmResourceSelectionDialog.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/MinMaxTextSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/NumberWithLabelElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/ToggleableTextElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/group/grantedauthority/CRUDOperationChooser.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/group/grantedauthority/CdmAuthorityComposite.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/group/grantedauthority/CdmAuthorityCompositeViewer.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/group/grantedauthority/CdmAuthorityRow.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/group/grantedauthority/CdmAuthorityTableHeader.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractIdentifiableEntityDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/DescriptionDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/key/PolytomousKeyNodeDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitBaseDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitFacadeDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitGeneralDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitGeneralDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldUnitDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldUnitDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldUnitGeneralDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldUnitGeneralDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldUnitWizardPage.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/ReferenceDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/ReferenceDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/SourceSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/taxon/TaxonBaseDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/userecords/UseRecordDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/FeatureDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EditFromSelectionWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/org/eclipse/wb/swt/ResourceManager.java
eu.etaxonomy.taxeditor.store/src/main/java/org/eclipse/wb/swt/SWTResourceManager.java

diff --combined .gitattributes
index 4fac9761d3ff913b95abfdbe267256cee0d79e8d,1a425bf33362a93c3e8fdfc29e6274a4f3c97229..54ec3110dc759905493ab34da94f0f7cf8400369
@@@ -115,21 -115,6 +115,21 @@@ eu.etaxonomy.taxeditor.bulkeditor/src/m
  eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsContentProvider.java -text
  eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsLabelProvider.java -text
  eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsView.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/DataImportEditor.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/DataImportEditorLineDisplayStrategy.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/DerivedUnitEditorInput.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/transientServices/TransientAgentService.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/transientServices/TransientCdmRepository.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/transientServices/TransientClassificationService.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/transientServices/TransientCollectionService.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/transientServices/TransientDescriptionService.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/transientServices/TransientNameService.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/transientServices/TransientOccurenceService.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/transientServices/TransientReferenceService.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/transientServices/TransientTaxonService.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/transientServices/TransientTermService.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/wizard/SpecimenSearchWizard.java -text
 +eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/wizard/SpecimenSearchWizardPage.java -text
  eu.etaxonomy.taxeditor.bulkeditor/src/test/java/eu/etaxonomy/taxeditor/bulkeditor/Application.java -text
  eu.etaxonomy.taxeditor.bulkeditor/src/test/java/eu/etaxonomy/taxeditor/bulkeditor/ApplicationActionBarAdvisor.java -text
  eu.etaxonomy.taxeditor.bulkeditor/src/test/java/eu/etaxonomy/taxeditor/bulkeditor/ApplicationWorkbenchAdvisor.java -text
@@@ -335,7 -320,6 +335,7 @@@ eu.etaxonomy.taxeditor.editor/icons/add
  eu.etaxonomy.taxeditor.editor/icons/camera-photo.png -text
  eu.etaxonomy.taxeditor.editor/icons/edit_16x16.gif -text
  eu.etaxonomy.taxeditor.editor/icons/emblem-photos.png -text
 +eu.etaxonomy.taxeditor.editor/icons/leaf_detail.png -text
  eu.etaxonomy.taxeditor.editor/icons/xper64.png -text
  eu.etaxonomy.taxeditor.editor/p2.inf -text
  eu.etaxonomy.taxeditor.editor/plugin.properties -text
@@@ -447,6 -431,8 +447,8 @@@ eu.etaxonomy.taxeditor.editor/src/main/
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteMisapplicationOperation.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteNameRelationOperation.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteSynonymOperation.java -text
+ eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonBaseOperation.java -text
+ eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonOperation.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/RemoveHomotypicalGroupBasionymOperation.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperation.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptContentProvider.java -text
@@@ -466,11 -452,6 +468,11 @@@ eu.etaxonomy.taxeditor.editor/src/main/
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/handler/OpenRelatedConceptHandler.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/operation/CreateConceptRelationOperation.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/operation/DeleteConceptRelationOperation.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/CreateDerivateContextMenu.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateContentProvider.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateLabelProvider.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateMenuPropertyTester.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDragListener.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDropAdapter.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementTransfer.java -text
@@@ -999,6 -980,8 +1001,8 @@@ eu.etaxonomy.taxeditor.store/icons/impo
  eu.etaxonomy.taxeditor.store/icons/large_image.gif -text
  eu.etaxonomy.taxeditor.store/icons/leaf_detail.png -text
  eu.etaxonomy.taxeditor.store/icons/linkto_help.gif -text
+ eu.etaxonomy.taxeditor.store/icons/lock.png -text
+ eu.etaxonomy.taxeditor.store/icons/lock_open.png -text
  eu.etaxonomy.taxeditor.store/icons/lockedstate.gif -text
  eu.etaxonomy.taxeditor.store/icons/ma_12x12.gif -text
  eu.etaxonomy.taxeditor.store/icons/maximize.gif -text
@@@ -1173,7 -1156,7 +1177,7 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewClassificationWizard.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewCollectionWizard.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewDerivedUnitBaseWizard.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewFieldObservationWizard.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewFieldUnitWizard.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewGrantedAuthorityWizard.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewGroupWizard.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewInstitutionWizard.java -text
@@@ -1242,39 -1225,6 +1246,39 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/TermStore.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/internal/TaxeditorStorePlugin.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/bar/AuthenticatedUserBar.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/ComboDefinedTermController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/EntityCollectionElement.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/EntitySelectionField.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/EntitySelectionFieldController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/LanguageTextFieldController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/NamedAreaFieldController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/NumberFieldController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/PointField.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/PointFieldController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/TextFieldController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/ToggleableTextField.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/ToggleableTextFieldController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/compatibility/ICdmFormElement.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/compatibility/IEntitySelectionElement.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/fieldObservation/FieldObservationDetailsElement.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/fieldObservation/FieldObservationDetailsElementController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/fieldObservation/FieldObservationDetailsSection.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/fieldObservation/FieldObservationDetailsView.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/fieldObservation/FieldObservationGeneralElement.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/fieldObservation/FieldObservationGeneralElementController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/fieldObservation/FieldObservationGeneralSection.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/fieldObservation/GatheringEventDetailsElement.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/fieldObservation/GatheringEventDetailsElementController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/fieldObservation/GatheringEventSection.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/specimen/DerivedUnitDetailsElement.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/specimen/DerivedUnitDetailsElementController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/specimen/DerivedUnitDetailsSection.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/specimen/SpecimenDetailsElement.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/specimen/SpecimenDetailsElementController.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/specimen/SpecimenDetailsSection.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/specimen/SpecimenGeneralSection.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/specimenSearch/SpecimenSearchComposite.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/specimenSearch/SpecimenSearchController.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/EnumComboElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/TermComboElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/LoginDialog.java -text
@@@ -1287,7 -1237,7 +1291,7 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/DerivedUnitSelectionDialog.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/FeatureSelectionDialog.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/FeatureTreeSelectionDialog.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/FieldObservationSelectionDialog.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/FieldUnitSelectionDialog.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/GrantedAuthoritySelectionDialog.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/GroupSelectionDialog.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/InstitutionSelectionDialog.java -text
@@@ -1314,6 -1264,7 +1318,6 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CheckboxElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/DateDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/GatheringEventUnitElement.java -text
 -eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/ICdmFormElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/IEnableableFormElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/IEntityElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/IErrorIntolerableElement.java -text
@@@ -1362,7 -1313,6 +1366,7 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractEntityCollectionSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractIdentifiableEntityDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/EmptyElement.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/ICdmDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/ITaxonBaseDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/agent/InstitutionDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/agent/InstitutionDetailSection.java -text
@@@ -1473,29 -1423,28 +1477,32 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitBaseDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitBaseDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitBaseWizardPage.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitDetailsWizardPage.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitFacadeDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitFacadeDetailSection.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitGeneralDetailElement.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DerivedUnitGeneralDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DeterminationDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DeterminationDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DeterminationEventDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DeterminationHistoryDetailSection.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldObservationDetailElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldObservationDetailSection.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldObservationDetailsWizardPage.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldObservationGeneralWizardPage.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldUnitDetailElement.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldUnitDetailSection.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldUnitGeneralDetailElement.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldUnitGeneralDetailSection.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldUnitWizardPage.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailSection.java -text
 -eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventWizardPage.java -text
 -eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GeneralWizardPage.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailsWizardPage.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GeneralDetailElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GeneralDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/IDerivedUnitFacadeDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/NamedAreaDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/SourceCollectionDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/SpecimenCollectionDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/SpecimenCollectionDetailSection.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/SpecimenDetailsWizardPage.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/SpecimenGeneralWizardPage.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/NomenclaturalReferenceDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/NomenclaturalReferenceDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/ReferenceDetailElement.java -text
@@@ -1537,6 -1486,7 +1544,7 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/AbstractTermBaseDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/DefinedTermDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/DefinedTermDetailSection.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/FeatureDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/NamedAreaDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/NamedAreaDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/NamedAreaLevelDetailSection.java -text
@@@ -1576,12 -1526,11 +1584,13 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/reporting/ReportingViewPart.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/supplementaldata/SupplementalDataViewPart.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/supplementaldata/SupplementalDataViewer.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/org/eclipse/wb/swt/ResourceManager.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/org/eclipse/wb/swt/SWTResourceManager.java -text
  eu.etaxonomy.taxeditor.store/src/main/resources/eu/etaxonomy/cdm/editorApplicationContext.xml -text
  eu.etaxonomy.taxeditor.store/src/main/resources/log4j.properties -text
  eu.etaxonomy.taxeditor.store/src/test/java/eu/etaxonomy/taxeditor/store/NameProtectTitleCacheTest.java -text
  eu.etaxonomy.taxeditor.store/src/test/java/eu/etaxonomy/taxeditor/store/operations/AbstractTaxeditorOperationTestBase.java -text
+ eu.etaxonomy.taxeditor.store/src/test/java/eu/etaxonomy/taxeditor/store/utility/AbstractUtilityTest.java -text
  eu.etaxonomy.taxeditor.store/src/test/resources/eu/etaxonomy/cdm/applicationContext-test.xml -text
  eu.etaxonomy.taxeditor.store/src/test/resources/eu/etaxonomy/cdm/cdm.datasources.xml -text
  eu.etaxonomy.taxeditor.store/src/test/resources/eu/etaxonomy/cdm/cdmfs.xml -text
index e0e3ec3b8f80e48d7f361cdc0f77a2543f675718,0000000000000000000000000000000000000000..628fc1389a63bdae7a909b263edf5bfe8f111e38
mode 100644,000000..100644
--- /dev/null
@@@ -1,1390 -1,0 +1,1398 @@@
 +// $Id$
 +/**
 +* Copyright (C) 2013 EDIT
 +* European Distributed Institute of Taxonomy
 +* http://www.e-taxonomy.eu
 +*
 +* The contents of this file are subject to the Mozilla Public License Version 1.1
 +* See LICENSE.TXT at the top of this package for the full license terms.
 +*/
 +package eu.etaxonomy.taxeditor.dataimport.transientServices;
 +
 +import java.io.IOException;
 +import java.util.Collection;
 +import java.util.EnumSet;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Set;
 +import java.util.UUID;
 +
 +import org.apache.lucene.index.CorruptIndexException;
 +import org.apache.lucene.queryParser.ParseException;
 +import org.hibernate.LockMode;
 +import org.hibernate.Session;
 +import org.hibernate.criterion.Criterion;
 +import org.hibernate.envers.query.criteria.AuditCriterion;
 +
 +import eu.etaxonomy.cdm.api.service.ITaxonService;
 +import eu.etaxonomy.cdm.api.service.TaxaAndNamesSearchMode;
 +import eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator;
 +import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
 +import eu.etaxonomy.cdm.api.service.config.MatchingTaxonConfigurator;
 +import eu.etaxonomy.cdm.api.service.config.SynonymDeletionConfigurator;
 +import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;
 +import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException;
 +import eu.etaxonomy.cdm.api.service.exception.HomotypicalGroupChangeException;
 +import eu.etaxonomy.cdm.api.service.pager.Pager;
 +import eu.etaxonomy.cdm.api.service.search.LuceneMultiSearchException;
 +import eu.etaxonomy.cdm.api.service.search.SearchResult;
 +import eu.etaxonomy.cdm.api.service.util.TaxonRelationshipEdge;
 +import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
 +import eu.etaxonomy.cdm.model.common.Annotation;
 +import eu.etaxonomy.cdm.model.common.ISourceable;
 +import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 +import eu.etaxonomy.cdm.model.common.IdentifiableSource;
 +import eu.etaxonomy.cdm.model.common.LSID;
 +import eu.etaxonomy.cdm.model.common.Language;
 +import eu.etaxonomy.cdm.model.common.Marker;
 +import eu.etaxonomy.cdm.model.common.MarkerType;
 +import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
 +import eu.etaxonomy.cdm.model.common.RelationshipBase;
 +import eu.etaxonomy.cdm.model.common.RelationshipBase.Direction;
 +import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
 +import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 +import eu.etaxonomy.cdm.model.description.Feature;
 +import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
 +import eu.etaxonomy.cdm.model.location.NamedArea;
 +import eu.etaxonomy.cdm.model.media.Media;
 +import eu.etaxonomy.cdm.model.media.MediaRepresentation;
 +import eu.etaxonomy.cdm.model.media.Rights;
 +import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
 +import eu.etaxonomy.cdm.model.name.Rank;
 +import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 +import eu.etaxonomy.cdm.model.reference.Reference;
 +import eu.etaxonomy.cdm.model.taxon.Classification;
 +import eu.etaxonomy.cdm.model.taxon.Synonym;
 +import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
 +import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
 +import eu.etaxonomy.cdm.model.taxon.Taxon;
 +import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 +import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
 +import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
 +import eu.etaxonomy.cdm.model.view.AuditEvent;
 +import eu.etaxonomy.cdm.model.view.AuditEventRecord;
 +import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort;
 +import eu.etaxonomy.cdm.persistence.fetch.CdmFetch;
 +import eu.etaxonomy.cdm.persistence.query.Grouping;
 +import eu.etaxonomy.cdm.persistence.query.MatchMode;
 +import eu.etaxonomy.cdm.persistence.query.OrderHint;
 +import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
 +import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
 +import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
 +
 +/**
 + * @author pplitzner
 + * @date 27.09.2013
 + *
 + */
 +public class TransientTaxonService implements ITaxonService {
 +
 +    private final ITaxonService defaultTaxonService;
 +
 +    /**
 +     * @param defaultTaxonService
 +     */
 +    public TransientTaxonService(ITaxonService defaultTaxonService) {
 +        this.defaultTaxonService = defaultTaxonService;
 +    }
 +
 +    /**
 +     * @param t
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param sort
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IVersionableService#pageAuditEvents(eu.etaxonomy.cdm.model.common.VersionableEntity, java.lang.Integer, java.lang.Integer, eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort, java.util.List)
 +     */
 +    @Override
 +    public Pager<AuditEventRecord<TaxonBase>> pageAuditEvents(TaxonBase t, Integer pageSize, Integer pageNumber, AuditEventSort sort, List<String> propertyPaths) {
 +        return defaultTaxonService.pageAuditEvents(t, pageSize, pageNumber, sort, propertyPaths);
 +    }
 +
 +    /**
 +     * @param annotatedObj
 +     * @param status
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#getAnnotations(eu.etaxonomy.cdm.model.common.AnnotatableEntity, eu.etaxonomy.cdm.model.common.MarkerType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<Annotation> getAnnotations(TaxonBase annotatedObj, MarkerType status, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.getAnnotations(annotatedObj, status, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     *
 +     * @see eu.etaxonomy.cdm.api.service.IService#clear()
 +     */
 +    @Override
 +    public void clear() {
 +        defaultTaxonService.clear();
 +    }
 +
 +    /**
 +     * @param t
 +     * @param lockMode
 +     * @see eu.etaxonomy.cdm.api.service.IService#lock(eu.etaxonomy.cdm.model.common.ICdmBase, org.hibernate.LockMode)
 +     */
 +    @Override
 +    public void lock(TaxonBase t, LockMode lockMode) {
 +        defaultTaxonService.lock(t, lockMode);
 +    }
 +
 +    /**
 +     * @param t
 +     * @param lockMode
 +     * @param propertyPaths
 +     * @see eu.etaxonomy.cdm.api.service.IService#refresh(eu.etaxonomy.cdm.model.common.ICdmBase, org.hibernate.LockMode, java.util.List)
 +     */
 +    @Override
 +    public void refresh(TaxonBase t, LockMode lockMode, List<String> propertyPaths) {
 +        defaultTaxonService.refresh(t, lockMode, propertyPaths);
 +    }
 +
 +    /**
 +     *
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache()
 +     */
 +    @Override
 +    public void updateTitleCache() {
 +        defaultTaxonService.updateTitleCache();
 +    }
 +
 +    /**
 +     * @param t
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IVersionableService#getNextAuditEvent(eu.etaxonomy.cdm.model.common.VersionableEntity)
 +     */
 +    @Override
 +    public AuditEventRecord<TaxonBase> getNextAuditEvent(TaxonBase t) {
 +        return defaultTaxonService.getNextAuditEvent(t);
 +    }
 +
 +    /**
 +     * @param annotatableEntity
 +     * @param technical
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#getMarkers(eu.etaxonomy.cdm.model.common.AnnotatableEntity, java.lang.Boolean, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<Marker> getMarkers(TaxonBase annotatableEntity, Boolean technical, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.getMarkers(annotatableEntity, technical, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param stepSize
 +     * @param cacheStrategy
 +     * @param monitor
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache(java.lang.Class, java.lang.Integer, eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy, eu.etaxonomy.cdm.common.monitor.IProgressMonitor)
 +     */
 +    @Override
 +    public void updateTitleCache(Class<? extends TaxonBase> clazz, Integer stepSize, IIdentifiableEntityCacheStrategy<TaxonBase> cacheStrategy, IProgressMonitor monitor) {
 +        defaultTaxonService.updateTitleCache(clazz, stepSize, cacheStrategy, monitor);
 +    }
 +
 +    /**
 +     * @param t
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IVersionableService#getPreviousAuditEvent(eu.etaxonomy.cdm.model.common.VersionableEntity)
 +     */
 +    @Override
 +    public AuditEventRecord<TaxonBase> getPreviousAuditEvent(TaxonBase t) {
 +        return defaultTaxonService.getPreviousAuditEvent(t);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#count(java.lang.Class)
 +     */
 +    @Override
 +    public int count(Class<? extends TaxonBase> clazz) {
 +        return defaultTaxonService.count(clazz);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param from
 +     * @param to
 +     * @param criteria
 +     * @param pageSize
 +     * @param pageValue
 +     * @param sort
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IVersionableService#pageAuditEvents(java.lang.Class, eu.etaxonomy.cdm.model.view.AuditEvent, eu.etaxonomy.cdm.model.view.AuditEvent, java.util.List, java.lang.Integer, java.lang.Integer, eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort, java.util.List)
 +     */
 +    @Override
 +    public Pager<AuditEventRecord<TaxonBase>> pageAuditEvents(Class<? extends TaxonBase> clazz, AuditEvent from, AuditEvent to, List<AuditCriterion> criteria, Integer pageSize, Integer pageValue, AuditEventSort sort, List<String> propertyPaths) {
 +        return defaultTaxonService.pageAuditEvents(clazz, from, to, criteria, pageSize, pageValue, sort, propertyPaths);
 +    }
 +
 +    /**
 +     * @param lsid
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#find(eu.etaxonomy.cdm.model.common.LSID)
 +     */
 +    @Override
 +    public TaxonBase find(LSID lsid) {
 +        return defaultTaxonService.find(lsid);
 +    }
 +
 +    /**
 +     * @param persistentObject
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#delete(eu.etaxonomy.cdm.model.common.ICdmBase)
 +     */
 +    @Override
 +    public UUID delete(TaxonBase persistentObject) {
 +        return defaultTaxonService.delete(persistentObject);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param technical
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#groupMarkers(java.lang.Class, java.lang.Boolean, java.lang.Integer, java.lang.Integer, java.util.List)
 +     */
 +    @Override
 +    public List<Object[]> groupMarkers(Class<? extends TaxonBase> clazz, Boolean technical, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
 +        return defaultTaxonService.groupMarkers(clazz, technical, pageSize, pageNumber, propertyPaths);
 +    }
 +
 +    /**
 +     * @param uuid
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#exists(java.util.UUID)
 +     */
 +    @Override
 +    public boolean exists(UUID uuid) {
 +        return defaultTaxonService.exists(uuid);
 +    }
 +
 +    /**
 +     * @param limit
 +     * @param start
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getAllSynonyms(int, int)
 +     */
 +    @Override
 +    public List<Synonym> getAllSynonyms(int limit, int start) {
 +        return defaultTaxonService.getAllSynonyms(limit, start);
 +    }
 +
 +    /**
 +     * @param x
 +     * @param y
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#replace(eu.etaxonomy.cdm.model.common.IdentifiableEntity, eu.etaxonomy.cdm.model.common.IdentifiableEntity)
 +     */
 +    @Override
 +    public TaxonBase replace(TaxonBase x, TaxonBase y) {
 +        return defaultTaxonService.replace(x, y);
 +    }
 +
 +    /**
 +     * @param limit
 +     * @param start
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getAllTaxa(int, int)
 +     */
 +    @Override
 +    public List<Taxon> getAllTaxa(int limit, int start) {
 +        return defaultTaxonService.getAllTaxa(limit, start);
 +    }
 +
 +    /**
 +     * @param uuidSet
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#find(java.util.Set)
 +     */
 +    @Override
 +    public List<TaxonBase> find(Set<UUID> uuidSet) {
 +        return defaultTaxonService.find(uuidSet);
 +    }
 +
 +    /**
 +     * @param t
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getSources(eu.etaxonomy.cdm.model.common.IdentifiableEntity, java.lang.Integer, java.lang.Integer, java.util.List)
 +     */
 +    @Override
 +    public Pager<IdentifiableSource> getSources(TaxonBase t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
 +        return defaultTaxonService.getSources(t, pageSize, pageNumber, propertyPaths);
 +    }
 +
 +    /**
 +     * @param sec
 +     * @param cdmFetch
 +     * @param onlyWithChildren
 +     * @return
 +     * @deprecated
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getRootTaxa(eu.etaxonomy.cdm.model.reference.Reference, eu.etaxonomy.cdm.persistence.fetch.CdmFetch, boolean)
 +     */
 +    @Deprecated
 +    @Override
 +    public List<Taxon> getRootTaxa(Reference sec, CdmFetch cdmFetch, boolean onlyWithChildren) {
 +        return defaultTaxonService.getRootTaxa(sec, cdmFetch, onlyWithChildren);
 +    }
 +
 +    /**
 +     * @param uuid
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#find(java.util.UUID)
 +     */
 +    @Override
 +    public TaxonBase find(UUID uuid) {
 +        return defaultTaxonService.find(uuid);
 +    }
 +
 +    /**
 +     * @param rank
 +     * @param sec
 +     * @param onlyWithChildren
 +     * @param withMisapplications
 +     * @param propertyPaths
 +     * @return
 +     * @deprecated
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getRootTaxa(eu.etaxonomy.cdm.model.name.Rank, eu.etaxonomy.cdm.model.reference.Reference, boolean, boolean, java.util.List)
 +     */
 +    @Deprecated
 +    @Override
 +    public List<Taxon> getRootTaxa(Rank rank, Reference sec, boolean onlyWithChildren, boolean withMisapplications, List<String> propertyPaths) {
 +        return defaultTaxonService.getRootTaxa(rank, sec, onlyWithChildren, withMisapplications, propertyPaths);
 +    }
 +
 +    /**
 +     * @param id
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#find(int)
 +     */
 +    @Override
 +    public TaxonBase find(int id) {
 +        return defaultTaxonService.find(id);
 +    }
 +
 +    /**
 +     * @param t
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getRights(eu.etaxonomy.cdm.model.common.IdentifiableEntity, java.lang.Integer, java.lang.Integer, java.util.List)
 +     */
 +    @Override
 +    public Pager<Rights> getRights(TaxonBase t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
 +        return defaultTaxonService.getRights(t, pageSize, pageNumber, propertyPaths);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param technical
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#countMarkers(java.lang.Class, java.lang.Boolean)
 +     */
 +    @Override
 +    public int countMarkers(Class<? extends TaxonBase> clazz, Boolean technical) {
 +        return defaultTaxonService.countMarkers(clazz, technical);
 +    }
 +
 +    /**
 +     * @param idSet
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#findById(java.util.Set)
 +     */
 +    @Override
 +    public List<TaxonBase> findById(Set<Integer> idSet) {
 +        return defaultTaxonService.findById(idSet);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param idInSource
 +     * @param idNamespace
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getSourcedObjectByIdInSource(java.lang.Class, java.lang.String, java.lang.String)
 +     */
 +    @Override
 +    public ISourceable getSourcedObjectByIdInSource(Class clazz, String idInSource, String idNamespace) {
 +        return defaultTaxonService.getSourcedObjectByIdInSource(clazz, idInSource, idNamespace);
 +    }
 +
 +    /**
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#getSession()
 +     */
 +    @Override
 +    public Session getSession() {
 +        return defaultTaxonService.getSession();
 +    }
 +
 +    /**
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getUuidAndTitleCache()
 +     */
 +    @Override
 +    public List<UuidAndTitleCache<TaxonBase>> getUuidAndTitleCache() {
 +        return defaultTaxonService.getUuidAndTitleCache();
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param limit
 +     * @param start
 +     * @param groups
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#group(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public List<Object[]> group(Class<? extends TaxonBase> clazz, Integer limit, Integer start, List<Grouping> groups, List<String> propertyPaths) {
 +        return defaultTaxonService.group(clazz, limit, start, groups, propertyPaths);
 +    }
 +
 +    /**
 +     * @param limit
 +     * @param start
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getAllRelationships(int, int)
 +     */
 +    @Override
 +    public List<RelationshipBase> getAllRelationships(int limit, int start) {
 +        return defaultTaxonService.getAllRelationships(limit, start);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param queryString
 +     * @param matchmode
 +     * @param criteria
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#findByTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<TaxonBase> findByTitle(Class<? extends TaxonBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.findByTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @return
 +     * @deprecated
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getTaxonRelationshipTypeVocabulary()
 +     */
 +    @Deprecated
 +    @Override
 +    public OrderedTermVocabulary<TaxonRelationshipType> getTaxonRelationshipTypeVocabulary() {
 +        return defaultTaxonService.getTaxonRelationshipTypeVocabulary();
 +    }
 +
 +    /**
 +     * @param name
 +     * @param sec
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#searchTaxaByName(java.lang.String, eu.etaxonomy.cdm.model.reference.Reference)
 +     */
 +    @Override
 +    public List<TaxonBase> searchTaxaByName(String name, Reference sec) {
 +        return defaultTaxonService.searchTaxaByName(name, sec);
 +    }
 +
 +    /**
 +     * @param synonym
 +     * @param acceptedTaxon
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#swapSynonymAndAcceptedTaxon(eu.etaxonomy.cdm.model.taxon.Synonym, eu.etaxonomy.cdm.model.taxon.Taxon)
 +     */
 +    @Override
 +    public void swapSynonymAndAcceptedTaxon(Synonym synonym, Taxon acceptedTaxon) {
 +        defaultTaxonService.swapSynonymAndAcceptedTaxon(synonym, acceptedTaxon);
 +    }
 +
 +    /**
 +     * @param type
 +     * @param limit
 +     * @param start
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#list(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public List<TaxonBase> list(Class<? extends TaxonBase> type, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.list(type, limit, start, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param configurator
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#findByTitle(eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator)
 +     */
 +    @Override
 +    public Pager<TaxonBase> findByTitle(IIdentifiableEntityServiceConfigurator<TaxonBase> configurator) {
 +        return defaultTaxonService.findByTitle(configurator);
 +    }
 +
 +    /**
 +     * @param synonym
 +     * @param acceptedTaxon
 +     * @param deleteSynonym
 +     * @param copyCitationInfo
 +     * @param citation
 +     * @param microCitation
 +     * @return
 +     * @throws HomotypicalGroupChangeException
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeSynonymToAcceptedTaxon(eu.etaxonomy.cdm.model.taxon.Synonym, eu.etaxonomy.cdm.model.taxon.Taxon, boolean, boolean, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String)
 +     */
 +    @Override
 +    public Taxon changeSynonymToAcceptedTaxon(Synonym synonym, Taxon acceptedTaxon, boolean deleteSynonym, boolean copyCitationInfo, Reference citation, String microCitation) throws HomotypicalGroupChangeException {
 +        return defaultTaxonService.changeSynonymToAcceptedTaxon(synonym, acceptedTaxon, deleteSynonym, copyCitationInfo, citation, microCitation);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param queryString
 +     * @param matchmode
 +     * @param criteria
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#countByTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List)
 +     */
 +    @Override
 +    public Integer countByTitle(Class<? extends TaxonBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria) {
 +        return defaultTaxonService.countByTitle(clazz, queryString, matchmode, criteria);
 +    }
 +
 +    /**
 +     * @param uuid
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#load(java.util.UUID)
 +     */
 +    @Override
 +    public TaxonBase load(UUID uuid) {
 +        return defaultTaxonService.load(uuid);
 +    }
 +
 +    /**
 +     * @param uuid
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#load(java.util.UUID, java.util.List)
 +     */
 +    @Override
 +    public TaxonBase load(UUID uuid, List<String> propertyPaths) {
 +        return defaultTaxonService.load(uuid, propertyPaths);
 +    }
 +
 +    /**
 +     * @param configurator
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#countByTitle(eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator)
 +     */
 +    @Override
 +    public Integer countByTitle(IIdentifiableEntityServiceConfigurator<TaxonBase> configurator) {
 +        return defaultTaxonService.countByTitle(configurator);
 +    }
 +
 +    /**
 +     * @param transientObject
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#merge(eu.etaxonomy.cdm.model.common.ICdmBase)
 +     */
 +    @Override
 +    public TaxonBase merge(TaxonBase transientObject) {
 +        return defaultTaxonService.merge(transientObject);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param queryString
 +     * @param matchmode
 +     * @param criteria
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#listByTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public List<TaxonBase> listByTitle(Class<? extends TaxonBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.listByTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param type
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#page(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<TaxonBase> page(Class<? extends TaxonBase> type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.page(type, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param persistentObject
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#refresh(eu.etaxonomy.cdm.model.common.ICdmBase)
 +     */
 +    @Override
 +    public UUID refresh(TaxonBase persistentObject) {
 +        return defaultTaxonService.refresh(persistentObject);
 +    }
 +
 +    /**
 +     * @param synonym
 +     * @param toTaxon
 +     * @param taxonRelationshipType
 +     * @param reference
 +     * @param microReference
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeSynonymToRelatedTaxon(eu.etaxonomy.cdm.model.taxon.Synonym, eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String)
 +     */
 +    @Override
 +    public Taxon changeSynonymToRelatedTaxon(Synonym synonym, Taxon toTaxon, TaxonRelationshipType taxonRelationshipType, Reference reference, String microReference) {
 +        return defaultTaxonService.changeSynonymToRelatedTaxon(synonym, toTaxon, taxonRelationshipType, reference, microReference);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param queryString
 +     * @param matchmode
 +     * @param criteria
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#listByReferenceTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public List<TaxonBase> listByReferenceTitle(Class<? extends TaxonBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.listByReferenceTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param tableName
 +     * @param limit
 +     * @param start
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#rows(java.lang.String, int, int)
 +     */
 +    @Override
 +    public List<TaxonBase> rows(String tableName, int limit, int start) {
 +        return defaultTaxonService.rows(tableName, limit, start);
 +    }
 +
 +    /**
 +     * @param newInstances
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#save(java.util.Collection)
 +     */
 +    @Override
 +    public Map<UUID, TaxonBase> save(Collection<TaxonBase> newInstances) {
 +        return null;
 +    }
 +
 +    /**
 +     * @param syn
 +     * @param taxon
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteSynonymRelationships(eu.etaxonomy.cdm.model.taxon.Synonym, eu.etaxonomy.cdm.model.taxon.Taxon)
 +     */
 +    @Override
 +    public long deleteSynonymRelationships(Synonym syn, Taxon taxon) {
 +        return defaultTaxonService.deleteSynonymRelationships(syn, taxon);
 +    }
 +
 +    /**
 +     * @param newInstance
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#save(eu.etaxonomy.cdm.model.common.ICdmBase)
 +     */
 +    @Override
 +    public UUID save(TaxonBase newInstance) {
 +        return null;
 +    }
 +
 +    /**
 +     * @param transientObject
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#saveOrUpdate(eu.etaxonomy.cdm.model.common.ICdmBase)
 +     */
 +    @Override
 +    public UUID saveOrUpdate(TaxonBase transientObject) {
 +        return null;
 +    }
 +
 +    /**
 +     * @param synonym
 +     * @param newHomotypicalGroup
 +     * @param targetTaxon
 +     * @param removeFromOtherTaxa
 +     * @param setBasionymRelationIfApplicable
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeHomotypicalGroupOfSynonym(eu.etaxonomy.cdm.model.taxon.Synonym, eu.etaxonomy.cdm.model.name.HomotypicalGroup, eu.etaxonomy.cdm.model.taxon.Taxon, boolean, boolean)
 +     */
 +    @Override
 +    public void changeHomotypicalGroupOfSynonym(Synonym synonym, HomotypicalGroup newHomotypicalGroup, Taxon targetTaxon, boolean removeFromOtherTaxa, boolean setBasionymRelationIfApplicable) {
 +        defaultTaxonService.changeHomotypicalGroupOfSynonym(synonym, newHomotypicalGroup, targetTaxon, removeFromOtherTaxa, setBasionymRelationIfApplicable);
 +    }
 +
 +    /**
 +     * @param transientObjects
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#saveOrUpdate(java.util.Collection)
 +     */
 +    @Override
 +    public Map<UUID, TaxonBase> saveOrUpdate(Collection<TaxonBase> transientObjects) {
 +        return null;
 +    }
 +
 +    /**
 +     * @param transientObject
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#update(eu.etaxonomy.cdm.model.common.ICdmBase)
 +     */
 +    @Override
 +    public UUID update(TaxonBase transientObject) {
 +        return defaultTaxonService.update(transientObject);
 +    }
 +
 +    /**
 +     * @param example
 +     * @param includeProperties
 +     * @param limit
 +     * @param start
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IService#list(eu.etaxonomy.cdm.model.common.ICdmBase, java.util.Set, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public List<TaxonBase> list(TaxonBase example, Set<String> includeProperties, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.list(example, includeProperties, limit, start, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param oldSynonymRelation
 +     * @param newTaxon
 +     * @param moveHomotypicGroup
 +     * @param newSynonymRelationshipType
 +     * @param newReference
 +     * @param newReferenceDetail
 +     * @param keepReference
 +     * @return
 +     * @throws HomotypicalGroupChangeException
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#moveSynonymToAnotherTaxon(eu.etaxonomy.cdm.model.taxon.SynonymRelationship, eu.etaxonomy.cdm.model.taxon.Taxon, boolean, eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String, boolean)
 +     */
 +    @Override
 +    public SynonymRelationship moveSynonymToAnotherTaxon(SynonymRelationship oldSynonymRelation, Taxon newTaxon, boolean moveHomotypicGroup, SynonymRelationshipType newSynonymRelationshipType, Reference newReference, String newReferenceDetail, boolean keepReference) throws HomotypicalGroupChangeException {
 +        return defaultTaxonService.moveSynonymToAnotherTaxon(oldSynonymRelation, newTaxon, moveHomotypicGroup, newSynonymRelationshipType, newReference, newReferenceDetail, keepReference);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param matchStrategy
 +     * @param mergeStrategy
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#deduplicate(java.lang.Class, eu.etaxonomy.cdm.strategy.match.IMatchStrategy, eu.etaxonomy.cdm.strategy.merge.IMergeStrategy)
 +     */
 +    @Override
 +    public int deduplicate(Class<? extends TaxonBase> clazz, IMatchStrategy matchStrategy, IMergeStrategy mergeStrategy) {
 +        return defaultTaxonService.deduplicate(clazz, matchStrategy, mergeStrategy);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param queryString
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param matchMode
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#findTitleCache(java.lang.Class, java.lang.String, java.lang.Integer, java.lang.Integer, java.util.List, eu.etaxonomy.cdm.persistence.query.MatchMode)
 +     */
 +    @Override
 +    public Pager<TaxonBase> findTitleCache(Class<? extends TaxonBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, MatchMode matchMode) {
 +        return defaultTaxonService.findTitleCache(clazz, queryString, pageSize, pageNumber, orderHints, matchMode);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param type
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#listToTaxonRelationships(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public List<TaxonRelationship> listToTaxonRelationships(Taxon taxon, TaxonRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.listToTaxonRelationships(taxon, type, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param type
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#pageToTaxonRelationships(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<TaxonRelationship> pageToTaxonRelationships(Taxon taxon, TaxonRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.pageToTaxonRelationships(taxon, type, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param type
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#listFromTaxonRelationships(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public List<TaxonRelationship> listFromTaxonRelationships(Taxon taxon, TaxonRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.listFromTaxonRelationships(taxon, type, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param type
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#pageFromTaxonRelationships(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<TaxonRelationship> pageFromTaxonRelationships(Taxon taxon, TaxonRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.pageFromTaxonRelationships(taxon, type, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param includeRelationships
 +     * @param maxDepth
 +     * @param limit
 +     * @param start
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#listRelatedTaxa(eu.etaxonomy.cdm.model.taxon.Taxon, java.util.Set, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.util.List)
 +     */
 +    @Override
 +    public Set<Taxon> listRelatedTaxa(Taxon taxon, Set<TaxonRelationshipEdge> includeRelationships, Integer maxDepth, Integer limit, Integer start, List<String> propertyPaths) {
 +        return defaultTaxonService.listRelatedTaxa(taxon, includeRelationships, maxDepth, limit, start, propertyPaths);
 +    }
 +
 +    /**
 +     * @param taxonBase
 +     * @param limit
 +     * @param start
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#listClassifications(eu.etaxonomy.cdm.model.taxon.TaxonBase, java.lang.Integer, java.lang.Integer, java.util.List)
 +     */
 +    @Override
 +    public List<Classification> listClassifications(TaxonBase taxonBase, Integer limit, Integer start, List<String> propertyPaths) {
 +        return defaultTaxonService.listClassifications(taxonBase, limit, start, propertyPaths);
 +    }
 +
 +    /**
 +     * @param synonym
 +     * @param type
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getSynonyms(eu.etaxonomy.cdm.model.taxon.Synonym, eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<SynonymRelationship> getSynonyms(Synonym synonym, SynonymRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.getSynonyms(synonym, type, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param type
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getSynonyms(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<SynonymRelationship> getSynonyms(Taxon taxon, SynonymRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.getSynonyms(taxon, type, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getHomotypicSynonymsByHomotypicGroup(eu.etaxonomy.cdm.model.taxon.Taxon, java.util.List)
 +     */
 +    @Override
 +    public List<Synonym> getHomotypicSynonymsByHomotypicGroup(Taxon taxon, List<String> propertyPaths) {
 +        return defaultTaxonService.getHomotypicSynonymsByHomotypicGroup(taxon, propertyPaths);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getHeterotypicSynonymyGroups(eu.etaxonomy.cdm.model.taxon.Taxon, java.util.List)
 +     */
 +    @Override
 +    public List<List<Synonym>> getHeterotypicSynonymyGroups(Taxon taxon, List<String> propertyPaths) {
 +        return defaultTaxonService.getHeterotypicSynonymyGroups(taxon, propertyPaths);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param queryString
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#search(java.lang.Class, java.lang.String, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<TaxonBase> search(Class<? extends TaxonBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
 +        return defaultTaxonService.search(clazz, queryString, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param uninomial
 +     * @param infragenericEpithet
 +     * @param specificEpithet
 +     * @param infraspecificEpithet
 +     * @param rank
 +     * @param pageSize
 +     * @param pageNumber
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findTaxaByName(java.lang.Class, java.lang.String, java.lang.String, java.lang.String, java.lang.String, eu.etaxonomy.cdm.model.name.Rank, java.lang.Integer, java.lang.Integer)
 +     */
 +    @Override
 +    public Pager<TaxonBase> findTaxaByName(Class<? extends TaxonBase> clazz, String uninomial, String infragenericEpithet, String specificEpithet, String infraspecificEpithet, Rank rank, Integer pageSize, Integer pageNumber) {
 +        return defaultTaxonService.findTaxaByName(clazz, uninomial, infragenericEpithet, specificEpithet, infraspecificEpithet, rank, pageSize, pageNumber);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param uninomial
 +     * @param infragenericEpithet
 +     * @param specificEpithet
 +     * @param infraspecificEpithet
 +     * @param rank
 +     * @param pageSize
 +     * @param pageNumber
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#listTaxaByName(java.lang.Class, java.lang.String, java.lang.String, java.lang.String, java.lang.String, eu.etaxonomy.cdm.model.name.Rank, java.lang.Integer, java.lang.Integer)
 +     */
 +    @Override
 +    public List<TaxonBase> listTaxaByName(Class<? extends TaxonBase> clazz, String uninomial, String infragenericEpithet, String specificEpithet, String infraspecificEpithet, Rank rank, Integer pageSize, Integer pageNumber) {
 +        return defaultTaxonService.listTaxaByName(clazz, uninomial, infragenericEpithet, specificEpithet, infraspecificEpithet, rank, pageSize, pageNumber);
 +    }
 +
 +    /**
 +     * @param configurator
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findTaxaAndNames(eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator)
 +     */
 +    @Override
 +    public Pager<IdentifiableEntity> findTaxaAndNames(IFindTaxaAndNamesConfigurator configurator) {
 +        return defaultTaxonService.findTaxaAndNames(configurator);
 +    }
 +
 +    /**
 +     * @param queryString
 +     * @param classification
 +     * @param languages
 +     * @param highlightFragments
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @throws CorruptIndexException
 +     * @throws IOException
 +     * @throws ParseException
 +     * @throws LuceneMultiSearchException
 +     * @deprecated
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findByEverythingFullText(java.lang.String, eu.etaxonomy.cdm.model.taxon.Classification, java.util.List, boolean, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Deprecated
 +    @Override
 +    public Pager<SearchResult<TaxonBase>> findByEverythingFullText(String queryString, Classification classification, List<Language> languages, boolean highlightFragments, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws CorruptIndexException, IOException, ParseException, LuceneMultiSearchException {
 +        return defaultTaxonService.findByEverythingFullText(queryString, classification, languages, highlightFragments, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param queryString
 +     * @param classification
 +     * @param languages
 +     * @param highlightFragments
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @throws CorruptIndexException
 +     * @throws IOException
 +     * @throws ParseException
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findByFullText(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.model.taxon.Classification, java.util.List, boolean, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<SearchResult<TaxonBase>> findByFullText(Class<? extends TaxonBase> clazz, String queryString, Classification classification, List<Language> languages, boolean highlightFragments, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws CorruptIndexException, IOException, ParseException {
 +        return defaultTaxonService.findByFullText(clazz, queryString, classification, languages, highlightFragments, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param areaFilter
 +     * @param statusFilter
 +     * @param classification
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @throws IOException
 +     * @throws ParseException
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findByDistribution(java.util.List, java.util.List, eu.etaxonomy.cdm.model.taxon.Classification, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<SearchResult<TaxonBase>> findByDistribution(List<NamedArea> areaFilter, List<PresenceAbsenceTermBase<?>> statusFilter, Classification classification, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws IOException, ParseException {
 +        return defaultTaxonService.findByDistribution(areaFilter, statusFilter, classification, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param searchModes
 +     * @param queryString
 +     * @param classification
 +     * @param namedAreas
 +     * @param distributionStatus
 +     * @param languages
 +     * @param highlightFragments
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @throws CorruptIndexException
 +     * @throws IOException
 +     * @throws ParseException
 +     * @throws LuceneMultiSearchException
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findTaxaAndNamesByFullText(java.util.EnumSet, java.lang.String, eu.etaxonomy.cdm.model.taxon.Classification, java.util.Set, java.util.Set, java.util.List, boolean, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<SearchResult<TaxonBase>> findTaxaAndNamesByFullText(EnumSet<TaxaAndNamesSearchMode> searchModes, String queryString, Classification classification, Set<NamedArea> namedAreas, Set<PresenceAbsenceTermBase<?>> distributionStatus, List<Language> languages, boolean highlightFragments, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws CorruptIndexException, IOException, ParseException, LuceneMultiSearchException {
 +        return defaultTaxonService.findTaxaAndNamesByFullText(searchModes, queryString, classification, namedAreas, distributionStatus, languages, highlightFragments, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param clazz
 +     * @param queryString
 +     * @param classification
 +     * @param features
 +     * @param languages
 +     * @param highlightFragments
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @return
 +     * @throws CorruptIndexException
 +     * @throws IOException
 +     * @throws ParseException
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findByDescriptionElementFullText(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.model.taxon.Classification, java.util.List, java.util.List, boolean, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
 +     */
 +    @Override
 +    public Pager<SearchResult<TaxonBase>> findByDescriptionElementFullText(Class<? extends DescriptionElementBase> clazz, String queryString, Classification classification, List<Feature> features, List<Language> languages, boolean highlightFragments, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws CorruptIndexException, IOException, ParseException {
 +        return defaultTaxonService.findByDescriptionElementFullText(clazz, queryString, classification, features, languages, highlightFragments, pageSize, pageNumber, orderHints, propertyPaths);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param size
 +     * @param height
 +     * @param widthOrDuration
 +     * @param mimeTypes
 +     * @return
 +     * @deprecated
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getAllMedia(eu.etaxonomy.cdm.model.taxon.Taxon, int, int, int, java.lang.String[])
 +     */
 +    @Deprecated
 +    @Override
 +    public List<MediaRepresentation> getAllMedia(Taxon taxon, int size, int height, int widthOrDuration, String[] mimeTypes) {
 +        return defaultTaxonService.getAllMedia(taxon, size, height, widthOrDuration, mimeTypes);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param includeRelationships
 +     * @param limitToGalleries
 +     * @param propertyPath
 +     * @return
 +     * @deprecated
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#listTaxonDescriptionMedia(eu.etaxonomy.cdm.model.taxon.Taxon, java.util.Set, boolean, java.util.List)
 +     */
 +    @Deprecated
 +    @Override
 +    public List<Media> listTaxonDescriptionMedia(Taxon taxon, Set<TaxonRelationshipEdge> includeRelationships, boolean limitToGalleries, List<String> propertyPath) {
 +        return defaultTaxonService.listTaxonDescriptionMedia(taxon, includeRelationships, limitToGalleries, propertyPath);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param includeRelationships
 +     * @param limitToGalleries
 +     * @param includeTaxonDescriptions
 +     * @param includeOccurrences
 +     * @param includeTaxonNameDescriptions
 +     * @param propertyPath
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#listMedia(eu.etaxonomy.cdm.model.taxon.Taxon, java.util.Set, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, java.util.List)
 +     */
 +    @Override
 +    public List<Media> listMedia(Taxon taxon, Set<TaxonRelationshipEdge> includeRelationships, Boolean limitToGalleries, Boolean includeTaxonDescriptions, Boolean includeOccurrences, Boolean includeTaxonNameDescriptions, List<String> propertyPath) {
 +        return defaultTaxonService.listMedia(taxon, includeRelationships, limitToGalleries, includeTaxonDescriptions, includeOccurrences, includeTaxonNameDescriptions, propertyPath);
 +    }
 +
 +    /**
 +     * @param listOfIDs
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findTaxaByID(java.util.Set)
 +     */
 +    @Override
 +    public List<TaxonBase> findTaxaByID(Set<Integer> listOfIDs) {
 +        return defaultTaxonService.findTaxaByID(listOfIDs);
 +    }
 +
 +    /**
 +     * @param uuid
 +     * @param propertyPaths
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findTaxonByUuid(java.util.UUID, java.util.List)
 +     */
 +    @Override
 +    public TaxonBase findTaxonByUuid(UUID uuid, List<String> propertyPaths) {
 +        return defaultTaxonService.findTaxonByUuid(uuid, propertyPaths);
 +    }
 +
 +    /**
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#countAllRelationships()
 +     */
 +    @Override
 +    public int countAllRelationships() {
 +        return defaultTaxonService.countAllRelationships();
 +    }
 +
 +    /**
 +     * @param propertyPath
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findIdenticalTaxonNames(java.util.List)
 +     */
 +    @Override
 +    public List<TaxonNameBase> findIdenticalTaxonNames(List<String> propertyPath) {
 +        return defaultTaxonService.findIdenticalTaxonNames(propertyPath);
 +    }
 +
 +    /**
 +     * @param propertyPath
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findIdenticalTaxonNameIds(java.util.List)
 +     */
 +    @Override
 +    public List<TaxonNameBase> findIdenticalTaxonNameIds(List<String> propertyPath) {
 +        return defaultTaxonService.findIdenticalTaxonNameIds(propertyPath);
 +    }
 +
 +    /**
 +     * @param name
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getPhylumName(eu.etaxonomy.cdm.model.name.TaxonNameBase)
 +     */
 +    @Override
 +    public String getPhylumName(TaxonNameBase name) {
 +        return defaultTaxonService.getPhylumName(name);
 +    }
 +
 +    /**
 +     * @param syn
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteSynonymRelationships(eu.etaxonomy.cdm.model.taxon.Synonym)
 +     */
 +    @Override
 +    public long deleteSynonymRelationships(Synonym syn) {
 +        return defaultTaxonService.deleteSynonymRelationships(syn);
 +    }
 +
 +    /**
 +     * @param taxonBase
 +     * @param type
 +     * @param pageSize
 +     * @param pageNumber
 +     * @param orderHints
 +     * @param propertyPaths
 +     * @param direction
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#listSynonymRelationships(eu.etaxonomy.cdm.model.taxon.TaxonBase, eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List, eu.etaxonomy.cdm.model.common.RelationshipBase.Direction)
 +     */
 +    @Override
 +    public List<SynonymRelationship> listSynonymRelationships(TaxonBase taxonBase, SynonymRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths, Direction direction) {
 +        return defaultTaxonService.listSynonymRelationships(taxonBase, type, pageSize, pageNumber, orderHints, propertyPaths, direction);
 +    }
 +
 +    /**
 +     * @param taxonName
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findBestMatchingTaxon(java.lang.String)
 +     */
 +    @Override
 +    public Taxon findBestMatchingTaxon(String taxonName) {
 +        return defaultTaxonService.findBestMatchingTaxon(taxonName);
 +    }
 +
 +    /**
 +     * @param config
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findBestMatchingTaxon(eu.etaxonomy.cdm.api.service.config.MatchingTaxonConfigurator)
 +     */
 +    @Override
 +    public Taxon findBestMatchingTaxon(MatchingTaxonConfigurator config) {
 +        return defaultTaxonService.findBestMatchingTaxon(config);
 +    }
 +
 +    /**
 +     * @param taxonName
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findBestMatchingSynonym(java.lang.String)
 +     */
 +    @Override
 +    public Synonym findBestMatchingSynonym(String taxonName) {
 +        return defaultTaxonService.findBestMatchingSynonym(taxonName);
 +    }
 +
 +    /**
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getUuidAndTitleCacheTaxon()
 +     */
 +    @Override
 +    public List<UuidAndTitleCache<TaxonBase>> getUuidAndTitleCacheTaxon() {
 +        return defaultTaxonService.getUuidAndTitleCacheTaxon();
 +    }
 +
 +    /**
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getUuidAndTitleCacheSynonym()
 +     */
 +    @Override
 +    public List<UuidAndTitleCache<TaxonBase>> getUuidAndTitleCacheSynonym() {
 +        return defaultTaxonService.getUuidAndTitleCacheSynonym();
 +    }
 +
 +    /**
 +     * @param configurator
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findTaxaAndNamesForEditor(eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator)
 +     */
 +    @Override
 +    public List<UuidAndTitleCache<TaxonBase>> findTaxaAndNamesForEditor(IFindTaxaAndNamesConfigurator configurator) {
 +        return defaultTaxonService.findTaxaAndNamesForEditor(configurator);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param tree
 +     * @param type
 +     * @param doWithMisappliedNames
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#createInferredSynonyms(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.Classification, eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType, boolean)
 +     */
 +    @Override
 +    public List<Synonym> createInferredSynonyms(Taxon taxon, Classification tree, SynonymRelationshipType type, boolean doWithMisappliedNames) {
 +        return defaultTaxonService.createInferredSynonyms(taxon, tree, type, doWithMisappliedNames);
 +    }
 +
 +    /**
 +     * @param taxon
 +     * @param tree
 +     * @param doWithMisappliedNames
 +     * @return
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#createAllInferredSynonyms(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.Classification, boolean)
 +     */
 +    @Override
 +    public List<Synonym> createAllInferredSynonyms(Taxon taxon, Classification tree, boolean doWithMisappliedNames) {
 +        return defaultTaxonService.createAllInferredSynonyms(taxon, tree, doWithMisappliedNames);
 +    }
 +
 +    /* (non-Javadoc)
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteSynonym(eu.etaxonomy.cdm.model.taxon.Synonym, eu.etaxonomy.cdm.api.service.config.SynonymDeletionConfigurator)
 +     */
 +    @Override
 +    public void deleteSynonym(Synonym arg0, SynonymDeletionConfigurator arg1) {
 +        defaultTaxonService.deleteSynonym(arg0, arg1);
 +    }
 +
 +    /* (non-Javadoc)
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteSynonym(eu.etaxonomy.cdm.model.taxon.Synonym, eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.api.service.config.SynonymDeletionConfigurator)
 +     */
 +    @Override
 +    public void deleteSynonym(Synonym arg0, Taxon arg1, SynonymDeletionConfigurator arg2) {
 +        defaultTaxonService.deleteSynonym(arg0, arg1, arg2);
 +    }
 +
 +    /* (non-Javadoc)
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteTaxon(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator, eu.etaxonomy.cdm.model.taxon.Classification)
 +     */
 +    @Override
 +    public UUID deleteTaxon(Taxon arg0, TaxonDeletionConfigurator arg1, Classification arg2)
 +            throws DataChangeNoRollbackException {
 +        return defaultTaxonService.deleteTaxon(arg0, arg1, arg2);
 +    }
 +
++    /* (non-Javadoc)
++     * @see eu.etaxonomy.cdm.api.service.ITaxonService#getSynonymsByHomotypicGroup(eu.etaxonomy.cdm.model.taxon.Taxon, java.util.List)
++     */
++    @Override
++    public List<List<Synonym>> getSynonymsByHomotypicGroup(Taxon taxon, List<String> propertyPaths) {
++        return defaultTaxonService.getSynonymsByHomotypicGroup(taxon, propertyPaths);
++    }
++
 +
 +
 +}
index 327a7c858efefbb6bba02c8126772a69b46f5459,d618fb1dd82f52b341431e39adae5ddf60b61484..ddc7082a68860e418dc34b80ce5e4d663ecbc6a1
@@@ -63,7 -63,6 +63,7 @@@
              point="org.eclipse.ui.views">
           <view
                 allowMultiple="false"
 +               category="eu.etaxonomy.taxeditor.editor.category"
                 class="eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart"
                 icon="icons/address-book-new.png"
                 id="eu.etaxonomy.taxeditor.editor.view.descriptive"
                 restorable="true">
           </view>
            <view
 -               allowMultiple="false"
 -               class="eu.etaxonomy.taxeditor.editor.view.uses.UsesViewPart"
 -               icon="icons/leaf.png"
 -               id="eu.etaxonomy.taxeditor.editor.view.uses"
 -               name="Uses"
 -               restorable="true">
 +                allowMultiple="false"
 +                category="eu.etaxonomy.taxeditor.editor.category"
 +                class="eu.etaxonomy.taxeditor.editor.view.uses.UsesViewPart"
 +                icon="icons/leaf.png"
 +                id="eu.etaxonomy.taxeditor.editor.view.uses"
 +                name="Uses"
 +                restorable="true">
           </view>
           <view
                 allowMultiple="false"
 +               category="eu.etaxonomy.taxeditor.editor.category"
                 class="eu.etaxonomy.taxeditor.editor.view.media.MediaViewPart"
                 icon="icons/camera-photo.png"
                 id="eu.etaxonomy.taxeditor.editor.view.media"
                 restorable="true">
           </view>
           <view
 +               category="eu.etaxonomy.taxeditor.editor.category"
                 class="eu.etaxonomy.taxeditor.editor.view.concept.ConceptViewPart"
                 id="eu.etaxonomy.taxeditor.editor.view.concept"
                 name="Concept Relations"
                 restorable="true">
           </view>
           <view
 +               category="eu.etaxonomy.taxeditor.editor.category"
                 class="eu.etaxonomy.taxeditor.editor.view.concept.graph.ConceptGraphView"
                 icon="icons/address-book-new.png"
                 id="eu.etaxonomy.taxeditor.editor.view.concept.graph"
                 name="Concept Graph"
                 restorable="true">
           </view>
 +         <view
 +               allowMultiple="false"
 +               category="eu.etaxonomy.taxeditor.editor.category"
 +               class="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView"
 +               icon="icons/leaf_detail.png"
 +               id="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView"
 +               name="Derivate View"
 +               restorable="true">
 +         </view>
 +         <category
 +               id="eu.etaxonomy.taxeditor.editor.category"
 +               name="Taxonomic Editor">
 +         </category>
        </extension>
     <extension
           point="org.eclipse.ui.elementFactories">
                 style="push">
           </command>
        </menuContribution>
 +      <menuContribution
 +            locationURI="popup:eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView">
 +         <menu
 +               label="New Derivate">
 +            <dynamic
 +                  class="eu.etaxonomy.taxeditor.editor.view.derivate.CreateDerivateContextMenu"
 +                  id="eu.etaxonomy.taxeditor.editor.view.derivate.CreateDerivateContextMenu">
 +            </dynamic>
 +            <visibleWhen
 +                  checkEnabled="true">
 +               <reference
 +                     definitionId="isSpecimenOrObservation">
 +               </reference>
 +            </visibleWhen>
 +         </menu>
 +      </menuContribution>
        
        
        
                 <reference
                       definitionId="isTaxonBase">
                 </reference>
-                <not>
+               <not>
                    <reference
                          definitionId="isAcceptedTaxon">
                    </reference>
              </test>
           </with>
        </definition>
 +      <definition
 +            id="isSpecimenOrObservation">
 +         <with
 +               variable="selection">
 +            <test
 +                  property="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester.isSpecimenOrObservation">
 +            </test>
 +         </with>
 +      </definition>
     </extension>
     <extension
           point="org.eclipse.core.expressions.propertyTesters">
              properties="isGroup"
              type="eu.etaxonomy.taxeditor.bulkeditor.BulkEditor">
        </propertyTester>
 +      <propertyTester
 +            class="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester"
 +            id="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester"
 +            namespace="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester"
 +            properties="isSpecimenOrObservation"
 +            type="org.eclipse.jface.viewers.TreeSelection">
 +      </propertyTester>
     </extension>
     <extension
           point="org.eclipse.ui.bindings">   
index 059990f6bebca7972e9720a438545c7e14e8e9a6,059990f6bebca7972e9720a438545c7e14e8e9a6..2600f04779d0a1754b5f1e0f44740bd583023dea
@@@ -9,10 -9,10 +9,6 @@@
   */\r
  package eu.etaxonomy.taxeditor.editor.definedterm;\r
  \r
--import java.util.HashSet;\r
--import java.util.List;\r
--import java.util.Set;\r
--\r
  import org.eclipse.core.runtime.IProgressMonitor;\r
  import org.eclipse.jface.action.GroupMarker;\r
  import org.eclipse.jface.action.MenuManager;\r
@@@ -38,13 -38,13 +34,8 @@@ import org.eclipse.ui.part.EditorPart
  \r
  import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
  import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
--import eu.etaxonomy.cdm.api.service.IVocabularyService;\r
  import eu.etaxonomy.cdm.model.common.CdmBase;\r
--import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
--import eu.etaxonomy.cdm.model.common.TermType;\r
--import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
  import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
--import eu.etaxonomy.taxeditor.editor.definedterm.input.AbstractDefinedTermEditorInput;\r
  import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;\r
  import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;\r
  import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
index e7ca0c28d174320d12426ac6b0604bb7371f557a,e7ca0c28d174320d12426ac6b0604bb7371f557a..d0ad5df8072a396b7b60ce4573cdc7e8a0d3a270
@@@ -17,9 -17,9 +17,7 @@@ import java.util.SortedSet
  import org.eclipse.jface.viewers.ITreeContentProvider;\r
  import org.eclipse.jface.viewers.Viewer;\r
  \r
--import eu.etaxonomy.cdm.model.common.DefinedTerm;\r
  import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
--import eu.etaxonomy.cdm.model.common.TermBase;\r
  import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
  import eu.etaxonomy.taxeditor.store.CdmStore;\r
  \r
index 7e3e8f9eb53b7493b5683dda0c8ec5de9fbf1919,7e3e8f9eb53b7493b5683dda0c8ec5de9fbf1919..3be304f230f7d1d18ed4bb7a3c1bcb580092b0b4
@@@ -9,11 -9,11 +9,9 @@@
  */\r
  package eu.etaxonomy.taxeditor.editor.definedterm;\r
  \r
--import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;\r
--import org.eclipse.jface.viewers.StyledString.Styler;\r
--import org.eclipse.jface.viewers.LabelProvider;\r
  import org.eclipse.jface.viewers.StyledCellLabelProvider;\r
  import org.eclipse.jface.viewers.StyledString;\r
++import org.eclipse.jface.viewers.StyledString.Styler;\r
  import org.eclipse.jface.viewers.ViewerCell;\r
  import org.eclipse.swt.SWT;\r
  import org.eclipse.swt.custom.StyleRange;\r
@@@ -21,10 -21,10 +19,8 @@@ import org.eclipse.swt.graphics.Color
  import org.eclipse.swt.graphics.TextStyle;\r
  import org.eclipse.swt.widgets.Display;\r
  \r
--import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
  import eu.etaxonomy.cdm.model.common.TermBase;\r
  import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
--import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;\r
  \r
  /**\r
   * @author l.morris\r
index d60d40a78386439a93c6566578fa6ac12734cb57,d60d40a78386439a93c6566578fa6ac12734cb57..f3e09bac07b8070eff0d8c907f18701314b11e97
@@@ -18,9 -18,9 +18,7 @@@ import org.eclipse.core.commands.operat
  import org.eclipse.jface.viewers.IStructuredSelection;\r
  import org.eclipse.ui.handlers.HandlerUtil;\r
  \r
--import eu.etaxonomy.cdm.model.common.DefinedTerm;\r
  import eu.etaxonomy.cdm.model.common.TermBase;\r
--import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
  import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermEditor;\r
  import eu.etaxonomy.taxeditor.editor.definedterm.operation.CreateDefinedTermOperation;\r
  import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;\r
index fb7e01f3939295bd74c84a7c6822c183b48bb6d8,fb7e01f3939295bd74c84a7c6822c183b48bb6d8..12f349be1b30cd0e1a01c53f051c0901f05c2205
@@@ -15,11 -15,11 +15,8 @@@ import org.eclipse.core.commands.Execut
  import org.eclipse.core.commands.IHandler;\r
  import org.eclipse.core.commands.common.NotDefinedException;\r
  import org.eclipse.core.commands.operations.IUndoContext;\r
--import org.eclipse.jface.viewers.IStructuredSelection;\r
  import org.eclipse.ui.handlers.HandlerUtil;\r
  \r
--import eu.etaxonomy.cdm.model.common.TermType;\r
--import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
  import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermEditor;\r
  import eu.etaxonomy.taxeditor.editor.definedterm.operation.CreateTermVocabularyOperation;\r
  import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;\r
index 40bc987fa695fad7c7623a35f7b99f9864718761,40bc987fa695fad7c7623a35f7b99f9864718761..de5d40a13ebb84b80d63c7398a8b4b9c19ca3c65
@@@ -19,10 -19,10 +19,7 @@@ import org.eclipse.core.commands.operat
  import org.eclipse.jface.viewers.IStructuredSelection;\r
  import org.eclipse.ui.handlers.HandlerUtil;\r
  \r
--import eu.etaxonomy.cdm.model.common.DefinedTerm;\r
--import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
  import eu.etaxonomy.cdm.model.common.TermBase;\r
--import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
  import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermEditor;\r
  import eu.etaxonomy.taxeditor.editor.definedterm.operation.DeleteTermBaseOperation;\r
  import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;\r
index cad587c2b0fc97115a231414322731d1d0fbf797,cad587c2b0fc97115a231414322731d1d0fbf797..7d365453c4194097d5efaa317a12f49dbe206964
@@@ -9,8 -9,8 +9,6 @@@
  */\r
  package eu.etaxonomy.taxeditor.editor.definedterm.operation;\r
  \r
--import java.net.URI;\r
--\r
  import org.eclipse.core.commands.ExecutionException;\r
  import org.eclipse.core.commands.operations.IUndoContext;\r
  import org.eclipse.core.runtime.IAdaptable;\r
@@@ -18,11 -18,11 +16,7 @@@ import org.eclipse.core.runtime.IProgre
  import org.eclipse.core.runtime.IStatus;\r
  \r
  import eu.etaxonomy.cdm.api.service.IVocabularyService;\r
--import eu.etaxonomy.cdm.model.common.DefinedTerm;\r
--import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
--import eu.etaxonomy.cdm.model.common.TermType;\r
  import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
--import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermEditor;\r
  import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;\r
  import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;\r
  import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
index c5bbd9c4ec4a1f9319e4fcc8b8fd0377eb325fe7,c5bbd9c4ec4a1f9319e4fcc8b8fd0377eb325fe7..b76da8e6801588cd4e4966bc3863173743770304
@@@ -18,7 -18,7 +18,6 @@@ import org.eclipse.core.runtime.Status
  \r
  import eu.etaxonomy.cdm.api.service.ITermService;\r
  import eu.etaxonomy.cdm.api.service.IVocabularyService;\r
--import eu.etaxonomy.cdm.model.common.DefinedTerm;\r
  import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
  import eu.etaxonomy.cdm.model.common.TermBase;\r
  import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
index b68a85061f85aabeffa98465391227c5bfb7762b,b68a85061f85aabeffa98465391227c5bfb7762b..b14c4cdcf74a45c5c4e66768fc3092b5d2d6e0f1
@@@ -21,8 -21,8 +21,6 @@@ import org.eclipse.core.runtime.Status
  import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
  import eu.etaxonomy.cdm.model.common.TermBase;\r
  import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
--import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
--import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
  import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;\r
  import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
  import eu.etaxonomy.taxeditor.store.StoreUtil;\r
index 9b3b75663d000154b8d1f18744876be8440240f9,9b3b75663d000154b8d1f18744876be8440240f9..3ca24a788f303bd812c5455e5a1f10bbb2a75de7
@@@ -12,14 -12,14 +12,12 @@@ package eu.etaxonomy.taxeditor.io.wizar
  
  import java.io.File;
  import java.net.URI;
--import java.net.URISyntaxException;
  
  import org.eclipse.jface.viewers.IStructuredSelection;
  import org.eclipse.ui.IWorkbench;
  
  import eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator;
  import eu.etaxonomy.taxeditor.store.CdmStore;
--import eu.etaxonomy.taxeditor.store.StoreUtil;
  
  /**
   * <p>JaxbExportWizard class.</p>
index 2a5e8b381ffad43cb0b8ea76c8acc988d903e3db,eca9d8369f5d9301f3240f36af940436ec546a87..e1559c3be6d430f4fbc157625d52871e39c918c9
@@@ -17,6 -17,8 +17,7 @@@ import org.eclipse.core.runtime.IStatus
  import org.eclipse.core.runtime.Status;
  
  import eu.etaxonomy.cdm.model.common.CdmBase;
 -import eu.etaxonomy.cdm.model.common.ITreeNode;
+ import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  
@@@ -33,7 -35,7 +34,7 @@@ public abstract class AbstractPostOpera
        /**
         * 
         */
-       private IPostOperationEnabled postOperationEnabled;
+       protected IPostOperationEnabled postOperationEnabled;
        
        /** 
         * A reference to the taxon the concrete operation is working on 
@@@ -43,7 -45,7 +44,7 @@@
        /**
         * A reference to the taxons TaxonNode
         */
-       protected TaxonNode taxonNode;
+       protected ITaxonTreeNode taxonNode;
  
        protected UUID parentNodeUuid;
  
        public IPostOperationEnabled getPostOperationEnabled() {
                return postOperationEnabled;
        }
+       
+       
  }
index 7254819d9880116e879ac70dbe829eaf4f4cf69a,0545633720267c1c95b2687e067e4c8db5f04acb..80feebd088c5b0d2e437a26c773938f64fc1023d
@@@ -10,7 -10,8 +10,7 @@@
  
  package eu.etaxonomy.taxeditor.preference;
  
--import eu.etaxonomy.cdm.model.common.IDefinedTerm;
+ import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
  
  /**
   * <p>IPreferenceKeys interface.</p>
@@@ -109,9 -110,9 +109,9 @@@ public interface IPreferenceKeys 
        public static final String OPENURL_IMAGE_MAX_HEIGHT = "eu.etaxonomy.taxeditor.openUrlImageMaxHeight";
  
        /**
-        * Whether the occurrence bulk editor should show {@link FieldObservation} objects
+        * Whether the occurrence bulk editor should show {@link FieldUnit} objects
         */
-       public static final String BULK_EDITOR_OCCURRENCE_SHOW_FIELD_OBSERVATIONS = "eu.etaxonomy.taxeditor.bulkeditor.occurrence.showFieldObservations";
+       public static final String BULK_EDITOR_OCCURRENCE_SHOW_FIELD_UNITS = "eu.etaxonomy.taxeditor.bulkeditor.occurrence.showFieldUnits";
  
        public static final String SEARCH_OPEN_RESULTS_IN_SEPARATE_WINDOWS = "eu.etaxonomy.taxeditor.navigation.search.openResultInSeparateWindows";
  
index 586dbfc0502730ee507419eaec24b46cbf52668c,586dbfc0502730ee507419eaec24b46cbf52668c..0c1235fa4f869f8e9aeea85c6f314347b00df985
@@@ -9,7 -9,7 +9,6 @@@
  
  package eu.etaxonomy.taxeditor.store;
  
--import java.io.Serializable;
  import java.lang.reflect.InvocationTargetException;
  import java.lang.reflect.Method;
  import java.lang.reflect.Type;
@@@ -35,7 -35,7 +34,6 @@@ import eu.etaxonomy.cdm.ext.geo.IEditGe
  import eu.etaxonomy.cdm.model.common.CdmBase;
  import eu.etaxonomy.cdm.model.common.Language;
  import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
--import eu.etaxonomy.cdm.persistence.hibernate.permission.Operation;
  import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
  import eu.etaxonomy.taxeditor.io.ExportManager;
  import eu.etaxonomy.taxeditor.io.ImportManager;
index 76a730a1bcbd7fc4bd90293a4bb28dd568542828,76a730a1bcbd7fc4bd90293a4bb28dd568542828..42c6e74930cf78578a5035d6f33747be26b750c0
@@@ -13,13 -13,13 +13,7 @@@ package eu.etaxonomy.taxeditor.store
  import java.util.Observable;
  
  import org.eclipse.core.runtime.IProgressMonitor;
--import org.eclipse.ui.IEditorPart;
  import org.eclipse.ui.IMemento;
--import org.eclipse.ui.IWorkbenchPage;
--import org.eclipse.ui.IWorkbenchPart;
--import org.eclipse.ui.IWorkbenchWindow;
--import org.eclipse.ui.editors.text.EditorsUI;
--import org.eclipse.ui.handlers.HandlerUtil;
  import org.springframework.security.authentication.BadCredentialsException;
  import org.springframework.security.authentication.LockedException;
  import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
index 99c227519e13d0b8b474dd22bc16ad4b3e377276,04f64ab05238c1e5da7357e0d7d3c9d2e4327678..05df291ba4976995b60f7d1197fb31d087479ae1
@@@ -1,9 -1,9 +1,9 @@@
  // $Id$
  /**
   * Copyright (C) 2007 EDIT
-  * European Distributed Institute of Taxonomy 
+  * European Distributed Institute of Taxonomy
   * http://www.e-taxonomy.eu
-  * 
+  *
   * The contents of this file are subject to the Mozilla Public License Version 1.1
   * See LICENSE.TXT at the top of this package for the full license terms.
   */
@@@ -13,7 -13,9 +13,9 @@@ package eu.etaxonomy.taxeditor.ui.combo
  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.Collection;
+ import java.util.LinkedHashMap;
  import java.util.List;
+ import java.util.Map.Entry;
  
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.events.SelectionEvent;
@@@ -22,18 -24,18 +24,18 @@@ import org.eclipse.swt.graphics.Color
  import org.eclipse.swt.widgets.Combo;
  import org.eclipse.swt.widgets.Label;
  
- import eu.etaxonomy.cdm.model.common.IDefinedTerm;
  import eu.etaxonomy.cdm.model.common.IEnumTerm;
  import eu.etaxonomy.cdm.model.common.OriginalSourceType;
  import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
  import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
  import eu.etaxonomy.cdm.model.reference.ReferenceType;
+ import eu.etaxonomy.taxeditor.model.AbstractUtility;
  import eu.etaxonomy.taxeditor.preference.Resources;
  import eu.etaxonomy.taxeditor.store.StoreUtil;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
  import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
  import eu.etaxonomy.taxeditor.ui.element.ISelectable;
  import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
   * <p>
   * Abstract AbstractEnumComboElement class.
   * </p>
-  * 
+  *
   * @author n.hoffmann
   * @created Mar 16, 2010
   * @version 1.0
   */
- public class EnumComboElement<T extends IEnumTerm> extends
+ public class EnumComboElement<T extends IEnumTerm<T>> extends
                AbstractCdmFormElement implements SelectionListener,
                IEnableableFormElement, ISelectable {
  
        private static CdmEnumDataHolder[] cdmEnumDataHolders = {
                new CdmEnumDataHolder<NomenclaturalCode>(){
-                       
                        @Override
                        public String getName() {
                                return "Nomenclatural Code";
@@@ -68,7 -70,7 +70,7 @@@
                        public Class<NomenclaturalCode> getClazz() {
                                return NomenclaturalCode.class;
                        }
-                       
                },
                new CdmEnumDataHolder<ReferenceType>(){
  
@@@ -86,7 -88,7 +88,7 @@@
                        public Class<ReferenceType> getClazz() {
                                return ReferenceType.class;
                        }
-                       
                },
                new CdmEnumDataHolder<SpecimenOrObservationType>(){
  
                        public Class<SpecimenOrObservationType> getClazz() {
                                return SpecimenOrObservationType.class;
                        }
-                       
                },
                new CdmEnumDataHolder<OriginalSourceType>(){
  
                        public Class<OriginalSourceType> getClazz() {
                                return OriginalSourceType.class;
                        }
-                       
                }
-               
        };
-       
        private static final int DEFAULT_VISIBLE_ITEMS = 10;
  
        protected T selection;
  
        protected List<T> elementTypeList = new ArrayList<T>();
  
-       private Label label;
+       private final Label label;
        protected Combo combo;
  
-       private Class<T> enumType;
+       private final Class<T> enumType;
  
        /**
         * <p>
         * Constructor for AbstractEnumComboElement.
         * </p>
-        * 
+        *
         * @param formFactory
         *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
         *            object.
         * populateTypes
         * </p>
         */
-       private void populateTypes(){
-               for(T enumElement : getElementsForClass(enumType)){
-                       elementTypeList.add(enumElement);
-                       combo.add(((Enum) enumElement).name());
-               }
+     private void populateTypes(){
+         Collection<T> elementsForClass = getElementsForClass(enumType);
+         // special hierarchical order for specimens
+         if(enumType.equals(SpecimenOrObservationType.class)){
+             LinkedHashMap<T, String> orderedTerms = AbstractUtility.orderTerms(elementsForClass);
+             for(Entry<T, String> keyLabelPair : orderedTerms.entrySet()){
+                 elementTypeList.add(keyLabelPair.getKey());
+                 combo.add(keyLabelPair.getValue());
+             }
+         }
+         // default order
+         else{
+             for(T enumElement : getElementsForClass(enumType)){
+                 elementTypeList.add(enumElement);
+                 combo.add(((Enum) enumElement).name());
+             }
+         }
        }
  
        /**
         * <p>
         * Setter for the field <code>selection</code>.
         * </p>
-        * 
+        *
         * @param selection
         *            the selection to set
         */
         * <p>
         * addSelectionListener
         * </p>
-        * 
+        *
         * @param listener
         *            a {@link org.eclipse.swt.events.SelectionListener} object.
         */
         * <p>
         * removeSelectionListener
         * </p>
-        * 
+        *
         * @param listener
         *            a {@link org.eclipse.swt.events.SelectionListener} object.
         */
        }
  
        /** {@inheritDoc} */
-       public void setSelected(boolean selected) {
+       @Override
+     public void setSelected(boolean selected) {
                setBackground(selected ? SELECTED : getPersistentBackground());
        }
  
         * <p>
         * Getter for the field <code>selection</code>.
         * </p>
-        * 
+        *
         * @return the selection
         */
        public T getSelection() {
        }
  
        /** {@inheritDoc} */
-       public void setEnabled(boolean enabled) {
+       @Override
+     public void setEnabled(boolean enabled) {
                combo.setEnabled(enabled);
        }
  
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
         * .events.SelectionEvent)
         */
        /** {@inheritDoc} */
-       public void widgetSelected(SelectionEvent e) {
+       @Override
+     public void widgetSelected(SelectionEvent e) {
                selection = elementTypeList.get(combo.getSelectionIndex());
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
        }
  
        /** {@inheritDoc} */
-       public void setIrrelevant(boolean irrelevant) {
+       @Override
+     public void setIrrelevant(boolean irrelevant) {
                String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT
                                : Resources.COLOR_COMPOSITE_BACKGROUND;
  
        }
  
        /** {@inheritDoc} */
-       public void widgetDefaultSelected(SelectionEvent e) {
+       @Override
+     public void widgetDefaultSelected(SelectionEvent e) {
        }
-       
        public void setVisibleItemCount(int visibleItems){
                combo.setVisibleItemCount(visibleItems);
        }
-       
        private Collection<T> getElementsForClass(Class<T> clazz){
                CdmEnumDataHolder<T> dataHolder = getCdmEnumDataHolderForClass(clazz);
                if (dataHolder != null) {
-                       return dataHolder.getElements(); 
+                       return dataHolder.getElements();
                }
                return null;
        }
-       
        private CdmEnumDataHolder<T> getCdmEnumDataHolderForClass(Class<T> clazz){
                for (CdmEnumDataHolder dataHolder : cdmEnumDataHolders) {
                        if (dataHolder.getClazz().equals(clazz)){
                }
                return null;
        }
-       
        private interface CdmEnumDataHolder<T> {
                Class<T> getClazz();
                String getName();
index d9727902a7c5f96df5b847f9231a47a4d9ae4fbe,171df7231870c61ab6e7b7822587245deb579f2c..5e3e5c1ee568b3aeaefd8a49d7297ba95a520e62
@@@ -1,9 -1,9 +1,9 @@@
  // $Id$
  /**
  * Copyright (C) 2007 EDIT
 -* European Distributed Institute of Taxonomy
 +* European Distributed Institute of Taxonomy 
  * http://www.e-taxonomy.eu
 -*
 +* 
  * The contents of this file are subject to the Mozilla Public License Version 1.1
  * See LICENSE.TXT at the top of this package for the full license terms.
  */
@@@ -66,14 -66,14 +66,14 @@@ public abstract class AbstractFilteredC
        protected List<UuidAndTitleCache<T>> model;
        private final Set<T> transientCdmObjects = new HashSet<T>();
        private final String settings;
 -
 +      
        protected T cdmBaseToBeFiltered;
 -
 +      
        /**
         * <p>Constructor for AbstractFilteredCdmResourceSelectionDialog.</p>
         *
         * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
 -       * @param conversation
 +       * @param conversation 
         * @param title a {@link java.lang.String} object.
         * @param multi a boolean.
         * @param settings a {@link java.lang.String} object.
                setTitle(title);
                setMessage("Use * for wildcard, or ? to see all entries");
                this.settings = settings;
 -
 +              
                this.conversation = conversation;
 -
 +              
                init();
 -
 +              
                initModel();
 -
 +              
                String objectTitle = getTitle(cdmObject);
                if (objectTitle != null) {
                        setInitialPattern(objectTitle);
                }
 -
 +              
                setListLabelProvider(createListLabelProvider());
                setDetailsLabelProvider(createDetailsLabelProvider());
 -
 +              
                setSelectionHistory(new ResourceSelectionHistory());
        }
 -
 +      
        /**
         * By default, we are returning the standard list label provider
 -       *
 -       * Override in subclasses if you want different behavior
 -       *
 +       * 
 +       * Override in subclasses if you want different behavior 
 +       * 
         * @return
         */
        protected ILabelProvider createDetailsLabelProvider() {
        }
  
        /**
 -       *
 +       * 
         * @return
         */
        protected ILabelProvider createListLabelProvider() {
         * Will run before initModel()
         */
        protected void init() {
 -
 +              
        }
 -
 +      
        /**
         * <p>getSelectionFromDialog</p>
         *
        protected static <TYPE extends CdmBase> TYPE getSelectionFromDialog(AbstractFilteredCdmResourceSelectionDialog<TYPE> dialog) {
                //dialog.setInitialPattern("");
                int result = dialog.open();
 -
 +              
                if (result == Window.CANCEL) {
                        return null;
                }
 -
 +              
                UUID uuid = dialog.getSelectedUuidAndTitleCache().getUuid();
                if(uuid == null){
                        return null;
 -              }
 +              }       
                return dialog.getCdmObjectByUuid(uuid);
        }
 -
 +      
        /**
         * Check if object was created during the life of this dialog. If not,
         * retrieve it from the CdmStore.
                }
                return getPersistentObject(cdmUuid);
        }
 -
 +      
        /**
         * <p>getPersistentObject</p>
         *
                if(cdmObject == null){
                        return "";
                }
 -
 +              
                if (cdmObject instanceof IIdentifiableEntity) {
 -                      return ((IIdentifiableEntity) cdmObject).getTitleCache();
 +                      return ((IIdentifiableEntity) cdmObject).getTitleCache();                       
                }
 -
 +              
                throw new IllegalArgumentException("Generic method only" +
                                " supports cdmObject of type IIdentifiableEntity." +
                                " Please implement specific method in subclass.");
        }
 -
 +      
  
        /** {@inheritDoc} */
        @Override
                filterExcludedObjects();
                super.refresh();
        }
 -
 +      
        /**
         * <p>initModel</p>
         */
                        public boolean equalsFilter(ItemsFilter filter) {
                                return false;
                        }
 -
 +                      
                        @Override
                        public boolean isConsistentItem(Object item) {
                                return false;
                                }
                                return text != null ? matches(text) : false;
                        }
 -
 +                      
                };
        }
 -
 +      
  
        /**
         * Set the filter input to the Agent's title cache
         * @param cdmObject a T object.
         */
        protected void setPattern(T cdmObject) {
 -              // FilteredSelection does some very tricky caching to make sure it
 -              // runs with high performance.
 +              // FilteredSelection does some very tricky caching to make sure it 
 +              // runs with high performance. 
                // This works for most use cases, but we want to change the model while the dialog is open
                // and all the clever caching prevents the content provider from knowing that the model has changed
 -              // I am aware, that this is a hack, but the FilteredSelectionDialog API does not offer a convenient
 +              // I am aware, that this is a hack, but the FilteredSelectionDialog API does not offer a convenient 
                // way to solve the problem.
                try {
                        Field lastCompletedFilter = this.getClass().getSuperclass().getSuperclass().getDeclaredField("lastCompletedFilter");
                } catch (IllegalAccessException e) {
                        AbstractUtility.error(getClass(), e);
                }
 -
 -              // this also is not the nicest way to do it.
 +              
 +              // this also is not the nicest way to do it. 
                // I am still amazed, that FilteredSelectionDialog does not offer any methods to change its data
                // once it was opened. Am I doing it wrong?
                String pattern = getTitle(cdmObject);
                ((Text) getPatternControl()).setText(pattern);
        }
 -
 +      
        /* (non-Javadoc)
        * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#fillContentProvider(org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.AbstractContentProvider, org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter, org.eclipse.core.runtime.IProgressMonitor)
        */
                ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
                throws CoreException {
                try {
 -                      if(model != null){
 +                      if(model != null){                              
                                progressMonitor.beginTask("Looking for entities", model.size());
                                for(UuidAndTitleCache<T> element : model){
                                        contentProvider.add(element, itemsFilter);
        protected Comparator getItemsComparator() {
                return new Comparator<UuidAndTitleCache>() {
                        @Override
 -            public int compare(UuidAndTitleCache entity1,
 +                      public int compare(UuidAndTitleCache entity1,
                                        UuidAndTitleCache entity2) {
                                Collator collator = Collator.getInstance();
                                return collator.compare(entity1.getTitleCache(), entity2.getTitleCache());
        protected IStatus validateItem(Object item) {
                return Status.OK_STATUS;
        }
 -
 +      
        /**
         * <p>getSelectedUuidAndTitleCache</p>
         *
                Object[] result = getResult();
                return result[0] == null ? null : (UuidAndTitleCache) result[0];
        }
 -
 +      
        /**
         * <p>Getter for the field <code>settings</code>.</p>
         *
                }
                return settings;
        }
 -
 +      
        /**
 -       *
 +       * 
         * @author n.hoffmann
         * @created Oct 19, 2009
         * @version 1.0
            * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#restoreItemFromMemento(org.eclipse.ui.IMemento)
                */
                @Override
 -        protected Object restoreItemFromMemento(IMemento element) {
 +              protected Object restoreItemFromMemento(IMemento element) {
                        return element.getString("resource"); //$NON-NLS-1$
                }
                /*
                 *      org.eclipse.ui.IMemento)
                 */
                @Override
 -        protected void storeItemToMemento(Object item, IMemento element) {
 +              protected void storeItemToMemento(Object item, IMemento element) {
                        element.putString("resource", item.toString()); //$NON-NLS-1$
                }
        }
 -
 +      
        /**
         * <p>getNewWizardLinkText</p>
         *
         * @return a {@link java.lang.String} object.
         */
        protected abstract String getNewWizardLinkText();
 -
 +      
        /**
         * <p>getNewEntityWizard</p>
 -       * @param parameter
 +       * @param parameter 
         * @return a {@link eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard} object.
         */
        protected abstract AbstractNewEntityWizard getNewEntityWizard(String parameter);
 -
 +      
        public class FilteredCdmResourceLabelProvider extends LabelProvider {
                @Override
 -        public String getText(Object element) {
 +              public String getText(Object element) {
                        if (element == null) {
                                return null;
                        }
                        return ((UuidAndTitleCache) element).getTitleCache();
 -              }
 +              }                       
        };
  
        /* (non-Javadoc)
                }
                return null;
        }
 -
 +      
        protected SelectionListener getNewWizardLinkSelectionListener(){
                return new SelectionAdapter() {
 -
 +                      
                        /* (non-Javadoc)
                         * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
                         */
                                AbstractNewEntityWizard wizard = getNewEntityWizard(e.text);
  
                                wizard.init(null, null);
 -                              WizardDialog dialog = new WizardDialog(getShell(), wizard);
 -                              int status = dialog.open();
 -
 -                              if (status == IStatus.OK) {
 +                              if(wizard.getEntity() != null) {
 +                                      WizardDialog dialog = new WizardDialog(getShell(), wizard);
 +                                      int status = dialog.open();
  
 -                                      T entity = (T) wizard.getEntity();
 +                                      if (status == IStatus.OK) {
  
 -//                                    addObjectToModel(teamOrPerson);
 -                                      refresh();
 -                                      setPattern(entity);
 -                                      getConversationHolder().bind();
 +                                              T entity = (T) wizard.getEntity();
 +                                              refresh();
 +                                              setPattern(entity);
 +                                              getConversationHolder().bind();
 +                                      }
+                                       //FIXME : Need to make sure this is a stable fix (ticket 3822)
+                                       getConversationHolder().commit();
                                }
                        }
                };
        }
 -
 +      
        /**
         * <p>getConversationHolder</p>
         *
         * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
         */
        @Override
 -    public ConversationHolder getConversationHolder() {
 +      public ConversationHolder getConversationHolder() {
                return conversation;
        }
 -
 +      
        /** {@inheritDoc} */
        @Override
 -    public void update(CdmDataChangeMap changeEvents) {}
 +      public void update(CdmDataChangeMap changeEvents) {}
  
        /**
 -       * Don't want to add for example a taxon or synonym to itself
 -       * so filter the list to remove the taxon in question
 +       * Don't want to add for example a taxon or synonym to itself 
 +       * so filter the list to remove the taxon in question 
         * (<code>cdmBaseToBeFiltered</code>)
         * so it is not available in the filtered list.
         */
        private void filterExcludedObjects() {
                if (model != null && cdmBaseToBeFiltered != null) {
 -
 +                      
                        UuidAndTitleCache uuidAndTitleCacheToRemove = null;
 -
 +                                              
                        for (UuidAndTitleCache uuidAndTitleCache : model){
                                if ((cdmBaseToBeFiltered.getUuid()).equals(uuidAndTitleCache.getUuid())) {
                                        uuidAndTitleCacheToRemove = uuidAndTitleCache;
 -                              }
 +                              }                               
                        }
                        model.remove(uuidAndTitleCacheToRemove);
                }
index ee3fed4560c42d41d753b70a0f9b4178114d59af,abfe38db919230e183e29068d2585ddfc56eb9c4..cbd7249d5d328e0f0315b3677ccc275ffd25e09b
@@@ -95,24 -95,6 +95,24 @@@ import eu.etaxonomy.cdm.model.taxon.Tax
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  import eu.etaxonomy.cdm.strategy.parser.ParserProblem;
  import eu.etaxonomy.taxeditor.model.AbstractUtility;
 +import eu.etaxonomy.taxeditor.ui.campanula.basicFields.NamedAreaFieldController;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.FieldObservationDetailsElement;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.FieldObservationDetailsElementController;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.FieldObservationDetailsSection;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.FieldObservationGeneralElement;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.FieldObservationGeneralElementController;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.FieldObservationGeneralSection;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.GatheringEventDetailsElement;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.GatheringEventDetailsElementController;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.GatheringEventSection;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.specimen.DerivedUnitDetailsElement;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.specimen.DerivedUnitDetailsElementController;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.specimen.DerivedUnitDetailsSection;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.specimen.SpecimenDetailsElement;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.specimen.SpecimenDetailsElementController;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.specimen.SpecimenDetailsSection;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.specimen.SpecimenGeneralSection;
  import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement;
  import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
  import eu.etaxonomy.taxeditor.ui.element.MinMaxTextSection.UnitType;
@@@ -215,16 -197,18 +215,18 @@@ import eu.etaxonomy.taxeditor.ui.sectio
  import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitFacadeDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitFacadeDetailSection;
+ import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailElement;
+ import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationEventDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationHistoryDetailSection;
- import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationDetailElement;
- import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationDetailSection;
+ import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitDetailElement;
+ import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitDetailSection;
+ import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralDetailElement;
+ import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
- import eu.etaxonomy.taxeditor.ui.section.occurrence.GeneralDetailElement;
- import eu.etaxonomy.taxeditor.ui.section.occurrence.GeneralDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.NamedAreaDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.SourceCollectionDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.SpecimenCollectionDetailElement;
@@@ -265,6 -249,7 +267,7 @@@ import eu.etaxonomy.taxeditor.ui.sectio
  import eu.etaxonomy.taxeditor.ui.section.userecords.UseRecordDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.vocabulary.DefinedTermDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.vocabulary.DefinedTermDetailSection;
+ import eu.etaxonomy.taxeditor.ui.section.vocabulary.FeatureDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.vocabulary.NamedAreaDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailSection;
@@@ -283,372 -268,372 +286,372 @@@ import eu.etaxonomy.taxeditor.ui.select
   */
  public class CdmFormFactory extends FormToolkit {
  
 -      private BoldFontHolder2 boldFontHolder2;
 -      private MouseListener selectionMouseHandler;
 -      private FocusListener selectionFocusHandler;
 +    private BoldFontHolder2 boldFontHolder2;
 +    private MouseListener selectionMouseHandler;
 +    private FocusListener selectionFocusHandler;
  
      private final Set<SelectionListener> selectionListenerList = new HashSet<SelectionListener>();
  
 -      private final List<IPropertyChangeListener> propertyChangeListeners = new ArrayList<IPropertyChangeListener>();
 +    private final List<IPropertyChangeListener> propertyChangeListeners = new ArrayList<IPropertyChangeListener>();
  
 -      private final int orientation = Window.getDefaultOrientation();
 -      private ISelectionProvider selectionProvider;
 +    private final int orientation = Window.getDefaultOrientation();
 +    private ISelectionProvider selectionProvider;
  
 -      /** Constant <code>EMPTY_SELECTION</code> */
 -      public static ISelection EMPTY_SELECTION = new ISelection() {
 -              @Override
 -              public boolean isEmpty() {
 -                      return true;
 -              }
 -      };
 +    /** Constant <code>EMPTY_SELECTION</code> */
 +    public static ISelection EMPTY_SELECTION = new ISelection() {
 +        @Override
 +        public boolean isEmpty() {
 +            return true;
 +        }
 +    };
  
 -      /**
 -       *
 -       * @author n.hoffmann
 -       * @date Jan 25, 2010
 -       *
 -       */
 -      private class SelectionMouseHandler extends MouseAdapter {
 -              @Override
 -              public void mouseDown(MouseEvent e) {
 -                      notifySelectionListeners(e);
 -              }
 -      }
 +    /**
 +     *
 +     * @author n.hoffmann
 +     * @date Jan 25, 2010
 +     *
 +     */
 +    private class SelectionMouseHandler extends MouseAdapter {
 +        @Override
 +        public void mouseDown(MouseEvent e) {
 +            notifySelectionListeners(e);
 +        }
 +    }
  
 -      /**
 -       *
 -       * @author n.hoffmann
 -       * @date Jan 25, 2010
 -       *
 -       */
 -      private class SelectionFocusHandler extends FocusAdapter {
 -              @Override
 -              public void focusGained(FocusEvent e) {
 -                      notifySelectionListeners(e);
 -              }
 -      }
 +    /**
 +     *
 +     * @author n.hoffmann
 +     * @date Jan 25, 2010
 +     *
 +     */
 +    private class SelectionFocusHandler extends FocusAdapter {
 +        @Override
 +        public void focusGained(FocusEvent e) {
 +            notifySelectionListeners(e);
 +        }
 +    }
  
 -      private void notifySelectionListeners(TypedEvent e) {
 -              Event event = new Event();
 -              event.widget = e.widget;
 -              SelectionEvent selectionEvent = new SelectionEvent(event);
 +    private void notifySelectionListeners(TypedEvent e) {
 +        Event event = new Event();
 +        event.widget = e.widget;
 +        SelectionEvent selectionEvent = new SelectionEvent(event);
  
          for (SelectionListener listener : selectionListenerList) {
              listener.widgetSelected(selectionEvent);
 -              }
 -      }
 +        }
 +    }
  
 -      /**
 -       * <p>
 -       * Constructor for CdmFormFactory.
 -       * </p>
 -       *
 -       * @param display
 -       *            a {@link org.eclipse.swt.widgets.Display} object.
 -       * @param selectionProvider
 -       *            a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
 -       */
 -      public CdmFormFactory(Display display, ISelectionProvider selectionProvider) {
 -              super(display);
 -              this.selectionProvider = selectionProvider;
 -              init();
 -      }
 +    /**
 +     * <p>
 +     * Constructor for CdmFormFactory.
 +     * </p>
 +     *
 +     * @param display
 +     *            a {@link org.eclipse.swt.widgets.Display} object.
 +     * @param selectionProvider
 +     *            a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
 +     */
 +    public CdmFormFactory(Display display, ISelectionProvider selectionProvider) {
 +        super(display);
 +        this.selectionProvider = selectionProvider;
 +        init();
 +    }
  
 -      /**
 -       * <p>
 -       * Constructor for CdmFormFactory.
 -       * </p>
 -       *
 -       * @param display
 -       *            a {@link org.eclipse.swt.widgets.Display} object.
 -       */
 -      public CdmFormFactory(Display display) {
 -              super(display);
 -              init();
 -      }
 +    /**
 +     * <p>
 +     * Constructor for CdmFormFactory.
 +     * </p>
 +     *
 +     * @param display
 +     *            a {@link org.eclipse.swt.widgets.Display} object.
 +     */
 +    public CdmFormFactory(Display display) {
 +        super(display);
 +        init();
 +    }
  
 -      /**
 +    /**
         *
         */
 -      private void init() {
 -              boldFontHolder2 = new BoldFontHolder2();
 -              selectionMouseHandler = new SelectionMouseHandler();
 -              selectionFocusHandler = new SelectionFocusHandler();
 -      }
 +    private void init() {
 +        boldFontHolder2 = new BoldFontHolder2();
 +        selectionMouseHandler = new SelectionMouseHandler();
 +        selectionFocusHandler = new SelectionFocusHandler();
 +    }
  
 -      /**
 -       * Creates an instance initialized with the correct selectionProvider
 -       *
 -       * Make sure to remove the instance when the entityComposite disposes via
 -       * destroySelectionArbitrator(..)
 -       *
 -       * @param entityElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.IEntityElement}
 -       *            object.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator}
 -       *         object.
 -       */
 +    /**
 +     * Creates an instance initialized with the correct selectionProvider
 +     *
 +     * Make sure to remove the instance when the entityComposite disposes via
 +     * destroySelectionArbitrator(..)
 +     *
 +     * @param entityElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.IEntityElement}
 +     *            object.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator}
 +     *         object.
 +     */
      public SelectionArbitrator createSelectionArbitrator(IEntityElement entityElement) {
          SelectionArbitrator selectionArbitrator = new SelectionArbitrator(entityElement);
 -              selectionArbitrator.addSelectionProvider(selectionProvider);
 -              selectionProvider.addSelectionChangedListener(selectionArbitrator);
 -              addSelectionListener(selectionArbitrator);
 -              return selectionArbitrator;
 -      }
 +        selectionArbitrator.addSelectionProvider(selectionProvider);
 +        selectionProvider.addSelectionChangedListener(selectionArbitrator);
 +        addSelectionListener(selectionArbitrator);
 +        return selectionArbitrator;
 +    }
  
 -      /**
 -       * <p>
 -       * destroySelectionArbitrator
 -       * </p>
 -       *
 -       * @param selectionArbitrator
 +    /**
 +     * <p>
 +     * destroySelectionArbitrator
 +     * </p>
 +     *
 +     * @param selectionArbitrator
       *            a
       *            {@link eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator}
 -       *            object.
 -       */
 +     *            object.
 +     */
      public void destroySelectionArbitrator(SelectionArbitrator selectionArbitrator) {
 -              removeSelectionListener(selectionArbitrator);
 -              if (selectionProvider != null) {
 +        removeSelectionListener(selectionArbitrator);
 +        if (selectionProvider != null) {
              selectionProvider.removeSelectionChangedListener(selectionArbitrator);
 -              } else {
 +        } else {
              AbstractUtility.error(this.getClass(),
                      "Tried to destroy a selection listener from this factories listeners but was null", null);
 -              }
 -      }
 -
 -      /** {@inheritDoc} */
 -      @Override
 -      public void adapt(Composite composite) {
 -              composite.addMouseListener(selectionMouseHandler);
 -              super.adapt(composite);
 -      }
 +        }
 +    }
  
 -      /**
 -       * <p>
 +    /**
 +     * <p>
       * Adapts the {@link AbstractCdmFormElement}:<br>
       * - sets the {@link IPropertyChangeListener}s handled by this class
 -       * </p>
 -       *
 -       * @param formElement
 -       *            a
 -       *            {@link eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement}
 -       *            object.
 -       */
 -      public void adapt(AbstractCdmFormElement formElement) {
 -              formElement.setPropertyChangeListeners(propertyChangeListeners);
 -      }
 +     * </p>
 +     *
 +     * @param formElement
 +     *            a
 +     *            {@link eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement}
 +     *            object.
 +     */
 +    public void adapt(AbstractCdmFormElement formElement) {
 +        formElement.setPropertyChangeListeners(propertyChangeListeners);
 +    }
  
 -      /** {@inheritDoc} */
 -      @Override
 -      public void adapt(Control control, boolean trackFocus, boolean trackKeyboard) {
 -              if (trackFocus) {
 -                      control.addFocusListener(selectionFocusHandler);
 -              }
 -              super.adapt(control, trackFocus, trackKeyboard);
 -      }
 +    /** {@inheritDoc} */
 +    @Override
 +    public void adapt(Control control, boolean trackFocus, boolean trackKeyboard) {
 +        if (trackFocus) {
 +            control.addFocusListener(selectionFocusHandler);
 +        }
 +        super.adapt(control, trackFocus, trackKeyboard);
 +    }
  
 -      /**
 -       * <p>
 -       * destroyElement
 -       * </p>
 -       *
 -       * @param formElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       */
 -      public void destroyElement(ICdmFormElement formElement) {
 -              // return if element was not initialized
 -              if (formElement == null) {
 -                      return;
 -              }
 -              // destroy selection arbitrator, if any
 -              if (formElement instanceof ISelectableElement) {
 +    /** {@inheritDoc} */
 +    @Override
 +    public void adapt(Composite composite) {
 +        composite.addMouseListener(selectionMouseHandler);
 +        super.adapt(composite);
 +    }
 +
 +    /**
 +     * <p>
 +     * destroyElement
 +     * </p>
 +     *
 +     * @param formElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     */
 +    public void destroyElement(ICdmFormElement formElement) {
 +        // return if element was not initialized
 +        if (formElement == null) {
 +            return;
 +        }
 +        // destroy selection arbitrator, if any
 +        if (formElement instanceof ISelectableElement) {
              destroySelectionArbitrator(((ISelectableElement) formElement).getSelectionArbitrator());
 -              }
 -              // remove this element form its parents list of elements
 -              // ICdmFormElement parentElement = formElement.getParentElement();
 -              // if(parentElement != null){
 -              // parentElement.removeElement(formElement);
 -              // }
 -              // call destroy on child elements recursively
 -              for (ICdmFormElement childElement : formElement.getElements()) {
 -                      destroyElement(childElement);
 -              }
 -              // dispose of the controls
 -              for (Control control : formElement.getControls()) {
 -                      // we added the layoutComposite of the parental element as the
 -                      // layout composite to this formElement
 -                      // but we do not want to destroy it.
 -                      if (control.equals(formElement.getLayoutComposite())) {
 -                              continue;
 -                      } else {
 -                              control.dispose();
 -                              control = null;
 -                      }
 -              }
 -      }
 +        }
 +        // remove this element form its parents list of elements
 +        // ICdmFormElement parentElement = formElement.getParentElement();
 +        // if(parentElement != null){
 +        // parentElement.removeElement(formElement);
 +        // }
 +        // call destroy on child elements recursively
 +        for (ICdmFormElement childElement : formElement.getElements()) {
 +            destroyElement(childElement);
 +        }
 +        // dispose of the controls
 +        for (Control control : formElement.getControls()) {
 +            // we added the layoutComposite of the parental element as the
 +            // layout composite to this formElement
 +            // but we do not want to destroy it.
 +            if (control.equals(formElement.getLayoutComposite())) {
 +                continue;
 +            } else {
 +                control.dispose();
 +                control = null;
 +            }
 +        }
 +    }
  
 -      /**
 -       * <p>
 -       * createEmptyCell
 -       * </p>
 -       *
 -       * @param parent
 -       *            a {@link org.eclipse.swt.widgets.Composite} object.
 -       * @return a {@link org.eclipse.swt.widgets.Label} object.
 -       */
 -      public Label createEmptyCell(Composite parent) {
 -              return this.createLabel(parent, null);
 -      }
 +    /**
 +     * <p>
 +     * createEmptyCell
 +     * </p>
 +     *
 +     * @param parent
 +     *            a {@link org.eclipse.swt.widgets.Composite} object.
 +     * @return a {@link org.eclipse.swt.widgets.Label} object.
 +     */
 +    public Label createEmptyCell(Composite parent) {
 +        return this.createLabel(parent, null);
 +    }
  
 -      /**
 -       * <p>
 -       * createMultilineTextWithLabel
 -       * </p>
 -       *
 -       * @param labelString
 -       *            a {@link java.lang.String} object.
 -       * @param textHeight
 -       *            a int.
 -       * @param style
 -       *            a int.
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createMultilineTextWithLabel
 +     * </p>
 +     *
 +     * @param labelString
 +     *            a {@link java.lang.String} object.
 +     * @param textHeight
 +     *            a int.
 +     * @param style
 +     *            a int.
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement}
 +     *         object.
 +     */
      public TextWithLabelElement createMultilineTextWithLabel(ICdmFormElement parentElement, String labelString,
              int textHeight, int style) {
          TextWithLabelElement element = new TextWithLabelElement(this, parentElement, labelString, "", textHeight, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createMultiLanguageTextElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param labelString
 -       *            a {@link java.lang.String} object.
 -       * @param multilanguageText
 -       *            a {@link java.util.Map} object.
 -       * @param textHeight
 -       *            a int.
 -       * @param style
 -       *            a int.
 -       * @return a
 -       *         {@link eu.etaxonomy.taxeditor.ui.element.MultilanguageTextElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createMultiLanguageTextElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param labelString
 +     *            a {@link java.lang.String} object.
 +     * @param multilanguageText
 +     *            a {@link java.util.Map} object.
 +     * @param textHeight
 +     *            a int.
 +     * @param style
 +     *            a int.
 +     * @return a
 +     *         {@link eu.etaxonomy.taxeditor.ui.element.MultilanguageTextElement}
 +     *         object.
 +     */
      public MultilanguageTextElement createMultiLanguageTextElement(ICdmFormElement parentElement, String labelString,
              Map<Language, LanguageString> multilanguageText, int textHeight, int style) {
          MultilanguageTextElement element = new MultilanguageTextElement(this, parentElement, labelString,
                  multilanguageText, textHeight, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
      public KeyStatementElement createKeyStatementElement(ICdmFormElement parentElement, String labelString,
 -                      KeyStatement keyStatement, int textHeight, int style) {
 +            KeyStatement keyStatement, int textHeight, int style) {
          KeyStatementElement element = new KeyStatementElement(this, parentElement, labelString, keyStatement,
                  textHeight, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createTextWithLabelElement
 -       * </p>
 -       *
 -       * @param labelString
 -       *            a {@link java.lang.String} object.
 -       * @param initialText
 -       *            a {@link java.lang.String} object.
 -       * @param style
 -       *            a int.
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createTextWithLabelElement
 +     * </p>
 +     *
 +     * @param labelString
 +     *            a {@link java.lang.String} object.
 +     * @param initialText
 +     *            a {@link java.lang.String} object.
 +     * @param style
 +     *            a int.
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement}
 +     *         object.
 +     */
      public TextWithLabelElement createTextWithLabelElement(ICdmFormElement parentElement, String labelString,
 -                      String initialText, int style) {
 +            String initialText, int style) {
          TextWithLabelElement element = new TextWithLabelElement(this, parentElement, labelString, initialText, null,
                  style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
      public UriWithLabelElement createUriWithLabelElement(ICdmFormElement parentElement, String labelString,
              URI initialUri, int style) {
          UriWithLabelElement element = new UriWithLabelElement(this, parentElement, labelString, initialUri, null, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * @param element
 -       * @param string
 -       * @param uri
 -       * @param style
 -       * @return
 -       */
 +    /**
 +     * @param element
 +     * @param string
 +     * @param uri
 +     * @param style
 +     * @return
 +     */
      public OpenUrlSelectorElement createOpenUrlSelectorElement(ICdmFormElement parentElement, String labelString,
 -                      IOpenUrlEnabled openUrlEnabled, int style) {
 +            IOpenUrlEnabled openUrlEnabled, int style) {
          OpenUrlSelectorElement element = new OpenUrlSelectorElement(this, parentElement, labelString, openUrlEnabled,
                  style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       *
 -       * @param parentElement
 -       * @param labelString
 -       * @param conversationEnabled
 -       * @param user
 -       * @param style
 -       * @return
 -       */
 +    /**
 +     *
 +     * @param parentElement
 +     * @param labelString
 +     * @param conversationEnabled
 +     * @param user
 +     * @param style
 +     * @return
 +     */
      public EditPasswordElement createEditPasswordElement(ICdmFormElement parentElement, String labelString,
 -                      ConversationHolder conversation, User user, int style) {
 +            ConversationHolder conversation, User user, int style) {
          EditPasswordElement element = new EditPasswordElement(this, parentElement, labelString, user, conversation);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createIntegerTextWithLabelElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param labelString
 -       *            a {@link java.lang.String} object.
 -       * @param initialInteger
 -       *            a {@link java.lang.Integer} object.
 -       * @param style
 -       *            a int.
 +    /**
 +     * <p>
 +     * createIntegerTextWithLabelElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param labelString
 +     *            a {@link java.lang.String} object.
 +     * @param initialInteger
 +     *            a {@link java.lang.Integer} object.
 +     * @param style
 +     *            a int.
       * @return a
       *         {@link eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement}
 -       *         object.
 -       */
 +     *         object.
 +     */
        public NumberWithLabelElement createNumberTextWithLabelElement(
                        ICdmFormElement parentElement, String labelString,
                        Number initialNumber, int style) {
                return element;
        }
  
 -
 -      /**
 -       * <p>
 -       * createLanguageStringWithLabelElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param labelString
 -       *            a {@link java.lang.String} object.
 -       * @param languageString
 -       *            a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
 -       * @param style
 -       *            a int.
 -       * @return a
 -       *         {@link eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement}
 -       *         object.
 -       */
 -    public LanguageStringWithLabelElement createLanguageStringWithLabelElement(ICdmFormElement parentElement,
 -            String labelString, LanguageString languageString, int style) {
 -        LanguageStringWithLabelElement element = new LanguageStringWithLabelElement(this, parentElement, labelString,
 -                languageString, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 -
 -      /**
 -       * <p>
 -       * createLanguageStringWithLabelElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param labelString
 -       *            a {@link java.lang.String} object.
 -       * @param languageString
 -       *            a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
 -       * @param height
 -       *            a int.
 -       * @param style
 -       *            a int.
 -       * @return a
 -       *         {@link eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createLanguageStringWithLabelElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param labelString
 +     *            a {@link java.lang.String} object.
 +     * @param languageString
 +     *            a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
 +     * @param style
 +     *            a int.
 +     * @return a
 +     *         {@link eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement}
 +     *         object.
 +     */
 +    public LanguageStringWithLabelElement createLanguageStringWithLabelElement(ICdmFormElement parentElement,
 +            String labelString, LanguageString languageString, int style) {
 +        LanguageStringWithLabelElement element = new LanguageStringWithLabelElement(this, parentElement, labelString,
 +                languageString, style);
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
 +
 +    /**
 +     * <p>
 +     * createLanguageStringWithLabelElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param labelString
 +     *            a {@link java.lang.String} object.
 +     * @param languageString
 +     *            a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
 +     * @param height
 +     *            a int.
 +     * @param style
 +     *            a int.
 +     * @return a
 +     *         {@link eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement}
 +     *         object.
 +     */
      public LanguageStringWithLabelElement createLanguageStringWithLabelElement(ICdmFormElement parentElement,
              String labelString, LanguageString languageString, int height, int style) {
          LanguageStringWithLabelElement element = new LanguageStringWithLabelElement(this, parentElement, labelString,
                  languageString, height, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createTextElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param initialText
 -       *            a {@link java.lang.String} object.
 -       * @param style
 -       *            a int.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createTextElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param initialText
 +     *            a {@link java.lang.String} object.
 +     * @param style
 +     *            a int.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement}
 +     *         object.
 +     */
      public TextWithLabelElement createTextElement(ICdmFormElement parentElement, String initialText, int style) {
          TextWithLabelElement element = new TextWithLabelElement(this, parentElement, null, initialText, null, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createKeyValueViewerElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param keyHeading
 -       *            a {@link java.lang.String} object.
 -       * @param valueHeading
 -       *            a {@link java.lang.String} object.
 -       * @param map
 -       *            a {@link java.util.Map} object.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.element.KeyValueViewerElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createKeyValueViewerElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param keyHeading
 +     *            a {@link java.lang.String} object.
 +     * @param valueHeading
 +     *            a {@link java.lang.String} object.
 +     * @param map
 +     *            a {@link java.util.Map} object.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.element.KeyValueViewerElement}
 +     *         object.
 +     */
      public KeyValueViewerElement createKeyValueViewerElement(ICdmFormElement parentElement, String keyHeading,
 -                      String valueHeading, Map<Object, Object> map) {
 +            String valueHeading, Map<Object, Object> map) {
          KeyValueViewerElement element = new KeyValueViewerElement(this, parentElement, keyHeading, valueHeading, map);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createTermComboElement
 -       * </p>
 -       *
 -       * @param termComboType
 -       *            a
 -       *            {@link eu.eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.TermComboType}
 -       *            object.
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param labelString
 -       *            a {@link java.lang.String} object.
 -       * @param selection
 -       *            a {@link eu.etaxonomy.cdm.model.common.DefinedTermBase}
 -       *            object.
 -       * @param style
 -       *            a int.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.combo.TermComboElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createTermComboElement
 +     * </p>
 +     *
 +     * @param termComboType
 +     *            a
 +     *            {@link eu.eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.TermComboType}
 +     *            object.
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param labelString
 +     *            a {@link java.lang.String} object.
 +     * @param selection
 +     *            a {@link eu.etaxonomy.cdm.model.common.DefinedTermBase}
 +     *            object.
 +     * @param style
 +     *            a int.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.combo.TermComboElement}
 +     *         object.
 +     */
  
      public <T extends DefinedTermBase> TermComboElement<T> createTermComboElement(Class<T> termComboType,
              ICdmFormElement parentElement, String labelString, T selection, int style) {
          TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termComboType, labelString,
                  selection, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
        /**
         * <p>
                return element;
        }
  
 -      /**
 -       * <p>
 -       * createEnumComboElement
 -       * </p>
 -       *
 -       * @param enumComboType
 -       *            a
 -       *            {@link eu.eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.EnumComboType}
 -       *            object.
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param style
 -       *            a int.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.term.AbstractEnumComboElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createEnumComboElement
 +     * </p>
 +     *
 +     * @param enumComboType
 +     *            a
 +     *            {@link eu.eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.EnumComboType}
 +     *            object.
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param style
 +     *            a int.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.term.AbstractEnumComboElement}
 +     *         object.
 +     */
-       public <T extends IEnumTerm> EnumComboElement<T> createEnumComboElement(
+       public <T extends IEnumTerm<T>> EnumComboElement<T> createEnumComboElement(
                        Class<T> enumComboType, ICdmFormElement parentElement,
                        int style) {
 -              EnumComboElement<T> element = new EnumComboElement<T>(this, parentElement, enumComboType, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        EnumComboElement<T> element = new EnumComboElement<T>(this, parentElement, enumComboType, style);
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createBrowserElement
 -       * </p>
 -       *
 -       * @param imageUri
 -       *            a {@link java.net.URI} object.
 -       * @param style
 -       *            a int.
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 +    /**
 +     * <p>
 +     * createBrowserElement
 +     * </p>
 +     *
 +     * @param imageUri
 +     *            a {@link java.net.URI} object.
 +     * @param style
 +     *            a int.
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
       * @return a {@link eu.etaxonomy.taxeditor.ui.element.BrowserElement}
       *         object.
 -       */
 +     */
      public BrowserElement createBrowserElement(ICdmFormElement parentElement, URI imageUri, int style) {
          BrowserElement element = new BrowserElement(this, parentElement, imageUri, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createImageElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param imageUri
 -       *            a {@link java.net.URI} object.
 -       * @param style
 -       *            a int.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.element.ImageElement} object.
 -       */
 +    /**
 +     * <p>
 +     * createImageElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param imageUri
 +     *            a {@link java.net.URI} object.
 +     * @param style
 +     *            a int.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.element.ImageElement} object.
 +     */
      public ImageElement createImageElement(ICdmFormElement parentElement, URI imageUri, int style) {
          ImageElement element = new ImageElement(this, parentElement, imageUri, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createTextActionElement
 -       * </p>
 -       *
 -       * @param labelString
 -       *            a {@link java.lang.String} object.
 -       * @param initialText
 -       *            a {@link java.lang.String} object.
 -       * @param style
 -       *            a int.
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param buttonLabel
 -       *            a {@link java.lang.String} object.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.element.TextActionElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createTextActionElement
 +     * </p>
 +     *
 +     * @param labelString
 +     *            a {@link java.lang.String} object.
 +     * @param initialText
 +     *            a {@link java.lang.String} object.
 +     * @param style
 +     *            a int.
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param buttonLabel
 +     *            a {@link java.lang.String} object.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.element.TextActionElement}
 +     *         object.
 +     */
      public TextActionElement createTextActionElement(ICdmFormElement parentElement, String labelString,
 -                      String buttonLabel, String initialText, int style) {
 +            String buttonLabel, String initialText, int style) {
          TextActionElement element = new TextActionElement(this, parentElement, labelString, buttonLabel, initialText,
                  style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createCheckbox
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param label
 -       *            a {@link java.lang.String} object.
 -       * @param initialState
 -       *            a boolean.
 -       * @param style
 -       *            a int.
 +    /**
 +     * <p>
 +     * createCheckbox
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param label
 +     *            a {@link java.lang.String} object.
 +     * @param initialState
 +     *            a boolean.
 +     * @param style
 +     *            a int.
       * @return a {@link eu.etaxonomy.taxeditor.ui.element.CheckboxElement}
       *         object.
 -       */
 +     */
      public CheckboxElement createCheckbox(ICdmFormElement parentElement, String label, boolean initialState, int style) {
          CheckboxElement element = new CheckboxElement(this, parentElement, label, initialState, style | orientation);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * Creates a section as a part of the form.
 -       *
 -       * @return the section widget
 -       * @param section
 +    /**
 +     * Creates a section as a part of the form.
 +     *
 +     * @return the section widget
 +     * @param section
       *            a
       *            {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection}
 -       *            object.
 -       */
 -      public Section adapt(AbstractFormSection section) {
 -              section.setMenu(section.getLayoutComposite().getMenu());
 -              adapt(section, true, true);
 +     *            object.
 +     */
 +    public Section adapt(AbstractFormSection section) {
 +        section.setMenu(section.getLayoutComposite().getMenu());
 +        adapt(section, true, true);
  
 -              // handle focus and property change events for cdm use
 -              section.addFocusListener(selectionFocusHandler);
 -              section.setPropertyChangeListeners(propertyChangeListeners);
 +        // handle focus and property change events for cdm use
 +        section.addFocusListener(selectionFocusHandler);
 +        section.setPropertyChangeListeners(propertyChangeListeners);
  
 -              if (section.getToggle() != null) {
 +        if (section.getToggle() != null) {
              section.getToggle().setHoverDecorationColor(getColors().getColor(IFormColors.TB_TOGGLE_HOVER));
              section.getToggle().setDecorationColor(getColors().getColor(IFormColors.TB_TOGGLE));
 -              }
 +        }
  
          section.setFont(boldFontHolder2.getBoldFont(section.getLayoutComposite().getFont()));
  
          if ((section.getStyle() & ExpandableComposite.TITLE_BAR) != 0
                  || (section.getStyle() & ExpandableComposite.SHORT_TITLE_BAR) != 0) {
 -                      getColors().initializeSectionToolBarColors();
 +            getColors().initializeSectionToolBarColors();
              section.setTitleBarBackground(getColors().getColor(IFormColors.TB_BG));
              section.setTitleBarBorderColor(getColors().getColor(IFormColors.TB_BORDER));
 -              }
 -              // call setTitleBarForeground regardless as it also sets the label color
 +        }
 +        // call setTitleBarForeground regardless as it also sets the label color
          section.setTitleBarForeground(getColors().getColor(IFormColors.TB_TOGGLE));
 -              return section;
 -      }
 +        return section;
 +    }
  
 -      private class BoldFontHolder2 {
 -              private Font normalFont;
 +    private class BoldFontHolder2 {
 +        private Font normalFont;
  
 -              private Font boldFont;
 +        private Font boldFont;
  
 -              public BoldFontHolder2() {
 -              }
 +        public BoldFontHolder2() {
 +        }
  
 -              public Font getBoldFont(Font font) {
 -                      createBoldFont(font);
 -                      return boldFont;
 -              }
 +        public Font getBoldFont(Font font) {
 +            createBoldFont(font);
 +            return boldFont;
 +        }
  
 -              private void createBoldFont(Font font) {
 -                      if (normalFont == null || !normalFont.equals(font)) {
 -                              normalFont = font;
 -                              dispose();
 -                      }
 -                      if (boldFont == null) {
 +        private void createBoldFont(Font font) {
 +            if (normalFont == null || !normalFont.equals(font)) {
 +                normalFont = font;
 +                dispose();
 +            }
 +            if (boldFont == null) {
                  boldFont = FormFonts.getInstance().getBoldFont(getColors().getDisplay(), normalFont);
 -                      }
 -              }
 +            }
 +        }
  
 -              public void dispose() {
 -                      if (boldFont != null) {
 +        public void dispose() {
 +            if (boldFont != null) {
                  FormFonts.getInstance().markFinished(boldFont, getColors().getDisplay());
 -                              boldFont = null;
 -                      }
 -              }
 -      }
 +                boldFont = null;
 +            }
 +        }
 +    }
  
 -      /**
 -       * <p>
 -       * createToggleableTextField
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param labelString
 -       *            a {@link java.lang.String} object.
 -       * @param initialText
 -       *            a {@link java.lang.String} object.
 -       * @param initialState
 -       *            a boolean.
 -       * @param style
 -       *            a int.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createToggleableTextField
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param labelString
 +     *            a {@link java.lang.String} object.
 +     * @param initialText
 +     *            a {@link java.lang.String} object.
 +     * @param initialState
 +     *            a boolean.
 +     * @param style
 +     *            a int.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement}
 +     *         object.
 +     */
      public ToggleableTextElement createToggleableTextField(ICdmFormElement parentElement, String labelString,
 -                      String initialText, boolean initialState, int style) {
 +            String initialText, boolean initialState, int style) {
          ToggleableTextElement element = new ToggleableTextElement(this, parentElement, labelString, initialText,
                  initialState, style | orientation);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createTimePeriodElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param labelString
 -       *            a {@link java.lang.String} object.
 -       * @param timePeriod
 -       *            a {@link eu.etaxonomy.cdm.model.common.TimePeriod} object.
 -       * @param style
 -       *            a int.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.element.TimePeriodElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createTimePeriodElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param labelString
 +     *            a {@link java.lang.String} object.
 +     * @param timePeriod
 +     *            a {@link eu.etaxonomy.cdm.model.common.TimePeriod} object.
 +     * @param style
 +     *            a int.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.element.TimePeriodElement}
 +     *         object.
 +     */
      public TimePeriodElement createTimePeriodElement(ICdmFormElement parentElement, String labelString,
 -                      TimePeriod timePeriod, int style) {
 +            TimePeriod timePeriod, int style) {
          TimePeriodElement element = new TimePeriodElement(this, parentElement, labelString, timePeriod, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
        /**
         * <p>
                return element;
        }
  
 -      /**
 -       * <p>
 -       * createPointElement
 -       * </p>
 -       *
 -       * @param style
 -       *            a int.
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param point
 -       *            a {@link eu.etaxonomy.cdm.model.location.Point} object.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.element.PointElement} object.
 -       */
 +    /**
 +     * <p>
 +     * createPointElement
 +     * </p>
 +     *
 +     * @param style
 +     *            a int.
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param point
 +     *            a {@link eu.etaxonomy.cdm.model.location.Point} object.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.element.PointElement} object.
 +     */
      public PointElement createPointElement(ICdmFormElement parentElement, Point point, int style) {
          PointElement element = new PointElement(this, parentElement, point, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createDateDetailSection
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param style
 -       *            a int.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.element.DateDetailSection}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createDateDetailSection
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param style
 +     *            a int.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.element.DateDetailSection}
 +     *         object.
 +     */
      public DateDetailSection createDateDetailSection(ICdmFormElement parentElement, int style) {
          DateDetailSection section = new DateDetailSection(this, parentElement, style);
 -              parentElement.addElement(section);
 -              adapt(section);
 -              return section;
 -      }
 +        parentElement.addElement(section);
 +        adapt(section);
 +        return section;
 +    }
  
        /**
         * <p>
                return section;
        }
  
 -      /**
 -       * <p>
 -       * createPartialElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param labelString
 -       *            a {@link java.lang.String} object.
 -       * @param partial
 -       *            a {@link org.joda.time.Partial} object.
 -       * @param style
 -       *            a int.
 +    /**
 +     * <p>
 +     * createPartialElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param labelString
 +     *            a {@link java.lang.String} object.
 +     * @param partial
 +     *            a {@link org.joda.time.Partial} object.
 +     * @param style
 +     *            a int.
       * @return a {@link eu.etaxonomy.taxeditor.ui.element.PartialElement}
       *         object.
 -       */
 +     */
      public PartialElement createPartialElement(ICdmFormElement parentElement, String labelString, Partial partial,
              int style) {
          PartialElement element = new PartialElement(this, parentElement, labelString, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * addSelectionListener
 -       * </p>
 -       *
 -       * @param listener
 -       *            a {@link org.eclipse.swt.events.SelectionListener} object.
 -       */
 -      public void addSelectionListener(SelectionListener listener) {
 -              selectionListenerList.add(listener);
 -      }
 +    /**
 +     * <p>
 +     * addSelectionListener
 +     * </p>
 +     *
 +     * @param listener
 +     *            a {@link org.eclipse.swt.events.SelectionListener} object.
 +     */
 +    public void addSelectionListener(SelectionListener listener) {
 +        selectionListenerList.add(listener);
 +    }
  
 -      /**
 -       * <p>
 -       * removeSelectionListener
 -       * </p>
 -       *
 -       * @param listener
 -       *            a {@link org.eclipse.swt.events.SelectionListener} object.
 -       */
 -      public void removeSelectionListener(SelectionListener listener) {
 -              if (listener == null) {
 +    /**
 +     * <p>
 +     * removeSelectionListener
 +     * </p>
 +     *
 +     * @param listener
 +     *            a {@link org.eclipse.swt.events.SelectionListener} object.
 +     */
 +    public void removeSelectionListener(SelectionListener listener) {
 +        if (listener == null) {
              AbstractUtility.error(this.getClass(),
                      "Tried to remove a selection listener from this factories listeners but was null", null);
 -              } else {
 -                      selectionListenerList.remove(listener);
 -              }
 -      }
 +        } else {
 +            selectionListenerList.remove(listener);
 +        }
 +    }
  
 -      /**
 -       * <p>
 -       * addPropertyChangeListener
 -       * </p>
 -       *
 -       * @param listener
 -       *            a {@link org.eclipse.jface.util.IPropertyChangeListener}
 -       *            object.
 -       */
 -      public void addPropertyChangeListener(IPropertyChangeListener listener) {
 -              if(propertyChangeListeners.contains(listener)){
 -                      return;
 -              }
 -              propertyChangeListeners.add(0, listener);
 -      }
 +    /**
 +     * <p>
 +     * addPropertyChangeListener
 +     * </p>
 +     *
 +     * @param listener
 +     *            a {@link org.eclipse.jface.util.IPropertyChangeListener}
 +     *            object.
 +     */
 +    public void addPropertyChangeListener(IPropertyChangeListener listener) {
 +        if (propertyChangeListeners.contains(listener)) {
 +            return;
 +        }
 +        propertyChangeListeners.add(0, listener);
 +    }
  
 -      /**
 -       * <p>
 -       * removePropertyChangeListener
 -       * </p>
 -       *
 -       * @param listener
 -       *            a {@link org.eclipse.jface.util.IPropertyChangeListener}
 -       *            object.
 -       */
 -      public void removePropertyChangeListener(IPropertyChangeListener listener) {
 -              propertyChangeListeners.remove(listener);
 -      }
 +    /**
 +     * <p>
 +     * removePropertyChangeListener
 +     * </p>
 +     *
 +     * @param listener
 +     *            a {@link org.eclipse.jface.util.IPropertyChangeListener}
 +     *            object.
 +     */
 +    public void removePropertyChangeListener(IPropertyChangeListener listener) {
 +        propertyChangeListeners.remove(listener);
 +    }
  
 -      /**
 -       * <p>
 -       * createHorizontalSeparator
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param style
 -       *            a int.
 -       * @return a {@link org.eclipse.swt.widgets.Label} object.
 -       */
 +    /**
 +     * @return the propertyChangeListeners
 +     */
 +    public List<IPropertyChangeListener> getPropertyChangeListeners() {
 +        return propertyChangeListeners;
 +    }
 +
 +    /**
 +     * <p>
 +     * createHorizontalSeparator
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param style
 +     *            a int.
 +     * @return a {@link org.eclipse.swt.widgets.Label} object.
 +     */
      public Label createHorizontalSeparator(ICdmFormElement parentElement, int style) {
          Label separator = this.createSeparator(parentElement.getLayoutComposite(), SWT.HORIZONTAL | style);
 -              separator.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
 -              return separator;
 -      }
 +        separator.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
 +        return separator;
 +    }
  
 -      /**
 -       * <p>
 -       * createVersionElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param entity
 -       *            a {@link eu.etaxonomy.cdm.model.common.VersionableEntity}
 -       *            object.
 -       * @param style
 -       *            a int.
 -       * @return a
 -       *         {@link eu.etaxonomy.taxeditor.ui.section.supplemental.VersionElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createVersionElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param entity
 +     *            a {@link eu.etaxonomy.cdm.model.common.VersionableEntity}
 +     *            object.
 +     * @param style
 +     *            a int.
 +     * @return a
 +     *         {@link eu.etaxonomy.taxeditor.ui.section.supplemental.VersionElement}
 +     *         object.
 +     */
      public VersionElement createVersionElement(ICdmFormElement parentElement, VersionableEntity entity, int style) {
          VersionElement element = new VersionElement(this, parentElement, entity, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * @param cdmBaseSection
 -       * @param object
 -       * @param style
 -       * @return
 -       */
 +    /**
 +     * @param cdmBaseSection
 +     * @param object
 +     * @param style
 +     * @return
 +     */
      public CdmBaseElement createCdmBaseElement(ICdmFormElement parentElement, CdmBase entity, int style) {
          CdmBaseElement element = new CdmBaseElement(this, parentElement, entity, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 -
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createVersionSection
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param style
 -       *            a int.
 -       * @return a
 -       *         {@link eu.etaxonomy.taxeditor.ui.section.supplemental.VersionSection}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createVersionSection
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param style
 +     *            a int.
 +     * @return a
 +     *         {@link eu.etaxonomy.taxeditor.ui.section.supplemental.VersionSection}
 +     *         object.
 +     */
      public VersionSection createVersionSection(ICdmFormElement parentElement, int style) {
 -              VersionSection section = new VersionSection(this, parentElement, style);
 -              parentElement.addElement(section);
 -              adapt(section);
 -              return section;
 -      }
 +        VersionSection section = new VersionSection(this, parentElement, style);
 +        parentElement.addElement(section);
 +        adapt(section);
 +        return section;
 +    }
  
 -      /**
 -       * @param parent
 -       * @param i
 -       * @return
 -       */
 -      public CdmBaseSection createCdmBaseSection(ICdmFormElement parentElement, int style) {
 -              CdmBaseSection section = new CdmBaseSection(this, parentElement, style);
 -              parentElement.addElement(section);
 -              adapt(section);
 -              return section;
 -      }
 +    /**
 +     * @param parent
 +     * @param i
 +     * @return
 +     */
 +    public CdmBaseSection createCdmBaseSection(ICdmFormElement parentElement, int style) {
 +        CdmBaseSection section = new CdmBaseSection(this, parentElement, style);
 +        parentElement.addElement(section);
 +        adapt(section);
 +        return section;
 +    }
  
 -      /**
 -       * <p>
 -       * createEmptyElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @return a {@link eu.etaxonomy.taxeditor.ui.section.EmptyElement} object.
 -       */
 -      public EmptyElement createEmptyElement(ICdmFormElement parentElement) {
 +    /**
 +     * <p>
 +     * createEmptyElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @return a {@link eu.etaxonomy.taxeditor.ui.section.EmptyElement} object.
 +     */
 +    public EmptyElement createEmptyElement(ICdmFormElement parentElement) {
          EmptyElement element = new EmptyElement(this, parentElement, null, SWT.NULL);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * createHeadlineSection
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @return a
 -       *         {@link eu.etaxonomy.taxeditor.ui.section.supplemental.HeadlineSection}
 -       *         object.
 -       */
 -      public HeadlineSection createHeadlineSection(ICdmFormElement parentElement) {
 +    /**
 +     * <p>
 +     * createHeadlineSection
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @return a
 +     *         {@link eu.etaxonomy.taxeditor.ui.section.supplemental.HeadlineSection}
 +     *         object.
 +     */
 +    public HeadlineSection createHeadlineSection(ICdmFormElement parentElement) {
          HeadlineSection section = new HeadlineSection(this, parentElement, SWT.NULL);
 -              parentElement.addElement(section);
 -              adapt(section);
 -              return section;
 -      }
 +        parentElement.addElement(section);
 +        adapt(section);
 +        return section;
 +    }
  
 -      /**
 -       * <p>
 -       * createParsingMessageElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param parserProblem
 -       *            a {@link eu.etaxonomy.cdm.strategy.parser.ParserProblem}
 -       *            object.
 -       * @param style
 -       *            a int.
 -       * @return a
 -       *         {@link eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessageElement}
 -       *         object.
 -       */
 +    /**
 +     * <p>
 +     * createParsingMessageElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param parserProblem
 +     *            a {@link eu.etaxonomy.cdm.strategy.parser.ParserProblem}
 +     *            object.
 +     * @param style
 +     *            a int.
 +     * @return a
 +     *         {@link eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessageElement}
 +     *         object.
 +     */
      public ParsingMessageElement createParsingMessageElement(ICdmFormElement parentElement,
              ParserProblem parserProblem, int style) {
          ParsingMessageElement element = new ParsingMessageElement(this, parentElement, parserProblem, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
      public AbstractFormSection createDefinedTermDetailSection(Class definedTermClass, ConversationHolder conversation,
              ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
          AbstractFormSection section = new DefinedTermDetailSection(this, definedTermClass, conversation, parentElement,
                  selectionProvider, style);
  
 -              parentElement.addElement(section);
 -              adapt(section);
 -              return section;
 +        parentElement.addElement(section);
 +        adapt(section);
 +        return section;
  
 -      }
 +    }
  
      /**
       * @param definedTermClass
       * @param style
       * @return
       */
-     public AbstractCdmDetailElement createDefinedTermDetailElement(Class definedTermClass, AbstractCdmDetailSection parentElement, int style) {
+     public AbstractCdmDetailElement createDefinedTermDetailElement(Class definedTermClass,
+             AbstractCdmDetailSection parentElement, int style) {
          AbstractCdmDetailElement element = null;
  
          if (NamedArea.class.isAssignableFrom(definedTermClass)) {
              element = new eu.etaxonomy.taxeditor.ui.section.vocabulary.NamedAreaDetailElement(this, parentElement);
+         } else if (definedTermClass.equals(Feature.class)) {
+             element = new FeatureDetailElement(this, parentElement);
          } else {
              element = new DefinedTermDetailElement(this, parentElement);
          }
          return section;
      }
  
-     public FieldObservationDetailSection createFieldObservationDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-         FieldObservationDetailSection section = new FieldObservationDetailSection(this, conversation, parentElement, selectionProvider, style);
+     public FieldUnitDetailSection createFieldUnitDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+         FieldUnitDetailSection section = new FieldUnitDetailSection(this, conversation, parentElement, selectionProvider, style);
          addAndAdaptSection(parentElement, section);
          return section;
      }
          return section;
      }
  
-     public GeneralDetailSection createGeneralDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-         GeneralDetailSection section = new GeneralDetailSection(this, conversation, parentElement, selectionProvider, style);
+     public FieldUnitGeneralDetailSection createFieldUnitGeneralDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+         FieldUnitGeneralDetailSection section = new FieldUnitGeneralDetailSection(this, conversation, parentElement, selectionProvider, style);
+         addAndAdaptSection(parentElement, section);
+         return section;
+     }
+     public DerivedUnitGeneralDetailSection createDerivedUnitGeneralDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+         DerivedUnitGeneralDetailSection section = new DerivedUnitGeneralDetailSection(this, conversation, parentElement, selectionProvider, style);
          addAndAdaptSection(parentElement, section);
          return section;
      }
          return section;
      }
  
 +    public GatheringEventDetailSection createGatheringSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
 +        GatheringEventDetailSection section = new GatheringEventDetailSection(this, conversation, parentElement, selectionProvider, style);
 +        addAndAdaptSection(parentElement, section);
 +        return section;
 +    }
  
      public NamedAreaDetailSection createNamedAreaDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
          NamedAreaDetailSection section = new NamedAreaDetailSection(this, conversation, parentElement, selectionProvider, style);
          return section;
      }
  
 -    public DerivedUnitGeneralDetailSection createFOSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
 -        DerivedUnitGeneralDetailSection section = new DerivedUnitGeneralDetailSection(this, conversation, parentElement, selectionProvider, style);
 -        addAndAdaptSection(parentElement, section);
 -        return section;
 -              }
 -
 -    public GatheringEventDetailSection createGatheringSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
 -        GatheringEventDetailSection section = new GatheringEventDetailSection(this, conversation, parentElement, selectionProvider, style);
 -        addAndAdaptSection(parentElement, section);
 -        return section;
 -    }
 -
 -    public FieldUnitDetailSection createFODetailsSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
 -        FieldUnitDetailSection section = new FieldUnitDetailSection(this, conversation, parentElement, selectionProvider, style);
 -        addAndAdaptSection(parentElement, section);
 -        return section;
 -              }
 -
      private void addAndAdaptSection(ICdmFormElement parentElement, AbstractFormSection<?> section) {
 -              parentElement.addElement(section);
 -              adapt(section);
 -      }
 +        parentElement.addElement(section);
 +        adapt(section);
 +    }
  
      //--------DetailElements------------
  
      }
  
  
-     public GeneralDetailElement createGeneralDetailElement(ICdmFormElement parentElement){
-         GeneralDetailElement element = new GeneralDetailElement(this, parentElement);
+     public FieldUnitGeneralDetailElement createFieldUnitGeneralDetailElement(ICdmFormElement parentElement){
+         FieldUnitGeneralDetailElement element = new FieldUnitGeneralDetailElement(this, parentElement);
+         addAndAdaptElement(parentElement, element);
+         return element;
+     }
+     public DerivedUnitGeneralDetailElement createDerivedUnitGeneralDetailElement(ICdmFormElement parentElement){
+         DerivedUnitGeneralDetailElement element = new DerivedUnitGeneralDetailElement(this, parentElement);
          addAndAdaptElement(parentElement, element);
          return element;
      }
  
 +
      public GatheringEventDetailElement createGatheringEventDetailElement(ICdmFormElement parentElement) {
          GatheringEventDetailElement element = new GatheringEventDetailElement(this, parentElement);
          addAndAdaptElement(parentElement, element);
          return element;
 -              }
 +    }
  
-     public FieldObservationDetailElement createFieldObservationDetailElement(ICdmFormElement parentElement) {
-         FieldObservationDetailElement element = new FieldObservationDetailElement(this, parentElement);
+     public FieldUnitDetailElement createFieldUnitDetailElement(ICdmFormElement parentElement) {
+         FieldUnitDetailElement element = new FieldUnitDetailElement(this, parentElement);
          addAndAdaptElement(parentElement, element);
          return element;
 -              }
 +    }
 +
  
      public DerivedUnitBaseDetailElement createDerivedUnitBaseDetailElement(ICdmFormElement parentElement) {
          DerivedUnitBaseDetailElement element = new DerivedUnitBaseDetailElement(this, parentElement);
          addAndAdaptElement(parentElement, element);
 -              return element;
 -      }
 +        return element;
 +    }
  
      public DeterminationDetailElement createDeterminationDetailElement(ICdmFormElement parentElement) {
          DeterminationDetailElement element = new DeterminationDetailElement(this, parentElement);
          addAndAdaptElement(parentElement, element);
          return element;
 -      }
 +    }
  
 -      /**
 -       * @param parentElement
 +    /**
 +     * @param parentElement
       * @param element
 -       */
 +     */
      private void addAndAdaptElement(ICdmFormElement parentElement, AbstractCdmDetailElement<?> element) {
          adapt(element);
          parentElement.addElement(element);
          GroupsByUserDetailSection section = new GroupsByUserDetailSection(this, conversation, parentElement, style);
          addAndAdaptSection(parentElement, section);
          return section;
 -              }
 +    }
  
      public TaxonomicScopeSection createTaxonomicScopeSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
          TaxonomicScopeSection section = new TaxonomicScopeSection(this, conversation, parentElement, style);
          addAndAdaptSection(parentElement, section);
 -              return section;
 -      }
 +        return section;
 +    }
  
 -      /**
 -       * <p>
 -       * createEntityCollectionElement
 -       * </p>
 -       *
 -       * @param removeListener
 -       *            a {@link org.eclipse.swt.events.SelectionListener} object.
 -       * @param style
 -       *            a int.
 -       * @param parentElement
 +    /**
 +     * <p>
 +     * createEntityCollectionElement
 +     * </p>
 +     *
 +     * @param removeListener
 +     *            a {@link org.eclipse.swt.events.SelectionListener} object.
 +     * @param style
 +     *            a int.
 +     * @param parentElement
       *            a
       *            {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection}
 -       *            object.
 -       * @param versionableEntity
 -       *            a {@link eu.etaxonomy.cdm.model.common.IVersionableEntity}
 -       *            object.
 -       * @param backgroundColor
 -       *            a {@link org.eclipse.swt.graphics.Color} object.
 -       * @return a
 -       *         {@link eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement}
 -       *         object.
 -       */
 +     *            object.
 +     * @param versionableEntity
 +     *            a {@link eu.etaxonomy.cdm.model.common.IVersionableEntity}
 +     *            object.
 +     * @param backgroundColor
 +     *            a {@link org.eclipse.swt.graphics.Color} object.
 +     * @return a
 +     *         {@link eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement}
 +     *         object.
 +     */
      public AbstractEntityCollectionElement createEntityCollectionElement(AbstractFormSection parentElement,
              Object versionableEntity, SelectionListener removeListener, Color backgroundColor, int style) {
 -              AbstractEntityCollectionElement element = null;
 +        AbstractEntityCollectionElement element = null;
  
 -              Object entity = HibernateProxyHelper.deproxy(versionableEntity);
 +        Object entity = HibernateProxyHelper.deproxy(versionableEntity);
  
 -              if (entity instanceof Annotation) {
 +        if (entity instanceof Annotation) {
              element = new AnnotationElement(this, parentElement, (Annotation) entity, removeListener, style);
 -              } else if (entity instanceof Person) {
 +        } else if (entity instanceof Person) {
              element = new TeamMemberElement(this, parentElement, (Person) entity, removeListener, style);
 -              } else if (entity instanceof Credit) {
 +        } else if (entity instanceof Credit) {
              element = new CreditElement(this, parentElement, (Credit) entity, removeListener, style);
 -              } else if (entity instanceof Extension) {
 +        } else if (entity instanceof Extension) {
              element = new ExtensionElement(this, parentElement, (Extension) entity, removeListener, style);
 -              } else if (entity instanceof Marker) {
 +        } else if (entity instanceof Marker) {
              element = new MarkerElement(this, parentElement, (Marker) entity, removeListener, style);
 -              } else if (entity instanceof Media) {
 +        } else if (entity instanceof Media) {
              element = new MediaElement(this, parentElement, (Media) entity, removeListener, style);
 -              } else if (entity instanceof MediaRepresentation) {
 +        } else if (entity instanceof MediaRepresentation) {
              element = new MediaRepresentationElement(this, parentElement, (MediaRepresentation) entity, removeListener,
                      style);
 -              } else if (entity instanceof ImageFile) {
 +        } else if (entity instanceof ImageFile) {
              element = new ImageFileElement(this, parentElement, (ImageFile) entity, removeListener, style);
 -              } else if (entity instanceof MediaRepresentationPart){
 +        } else if (entity instanceof MediaRepresentationPart) {
              element = new MediaRepresentationPartElement(this, parentElement, (MediaRepresentationPart) entity,
                      removeListener, style);
 -              } else if (entity instanceof NomenclaturalStatus) {
 +        } else if (entity instanceof NomenclaturalStatus) {
              element = new NomenclaturalStatusElement(this, parentElement, (NomenclaturalStatus) entity, removeListener,
                      style);
 -              } else if (entity instanceof Rights) {
 +        } else if (entity instanceof Rights) {
              element = new RightsElement(this, parentElement, (Rights) entity, removeListener, style);
          } else if (entity instanceof DescriptionElementSource) {
              element = new DescriptionElementSourceElement(this, parentElement, (DescriptionElementSource) entity,
 -                                      removeListener, style);
 -              } else if (entity instanceof IdentifiableSource) {
 +                    removeListener, style);
 +        } else if (entity instanceof IdentifiableSource) {
              element = new IdentifiableSourceElement(this, parentElement, (IdentifiableSource) entity, removeListener,
                      style);
                } else if (entity instanceof DefinedTerm) {
                                        break;
  
                        }
 -              } else if (entity instanceof Reference) {
 +        } else if (entity instanceof Reference) {
              element = new DescriptionSourceElement(this, parentElement, (Reference) entity, removeListener, style);
 -              } else if (entity instanceof NameTypeDesignation) {
 +        } else if (entity instanceof NameTypeDesignation) {
              element = new NameTypeDesignationElement(this, parentElement, (NameTypeDesignation) entity, removeListener,
                      style);
 -              } else if (entity instanceof NameRelationship) {
 +        } else if (entity instanceof NameRelationship) {
              element = new NameRelationshipDetailElement(this, parentElement, (NameRelationship) entity, removeListener,
                      style);
 -              } else if (entity instanceof SpecimenTypeDesignation) {
 +        } else if (entity instanceof SpecimenTypeDesignation) {
              element = new SpecimenTypeDesignationElement(this, parentElement, (SpecimenTypeDesignation) entity,
                      removeListener, style);
 -              } else if (entity instanceof StateData) {
 +        } else if (entity instanceof StateData) {
              element = new StateDataElement(this, parentElement, (StateData) entity, removeListener, style);
 -              } else if (entity instanceof StatisticalMeasurementValue) {
 +        } else if (entity instanceof StatisticalMeasurementValue) {
              element = new StatisticalMeasurementValueElement(this, parentElement, (StatisticalMeasurementValue) entity,
 -                                      removeListener, style);
 -              } else if (entity instanceof DerivedUnit) {
 -                      switch(((DerivedUnit)entity).getRecordBasis()) {
 +                    removeListener, style);
 +        } else if (entity instanceof DerivedUnit) {
 +              switch(((DerivedUnit)entity).getRecordBasis()) {
                                case LivingSpecimen:
                                case PreservedSpecimen:
                                case OtherSpecimen:
                                                                style);
                        }
  
 -              } else if (entity instanceof NamedArea) {
 +        } else if (entity instanceof NamedArea) {
              element = new NamedAreaDetailElement(this, parentElement, (NamedArea) entity, removeListener, style);
 -              } else if (entity instanceof DeterminationEvent) {
 -            element = new DeterminationEventDetailElement(this, parentElement, (DeterminationEvent) entity,
 -                    removeListener, style);
 -              } else if (entity instanceof User) {
 +        } else if (entity instanceof DeterminationEvent) {
 +            element = new DeterminationEventDetailElement(this, parentElement, (DeterminationEvent) entity, removeListener, style);
 +        } else if (entity instanceof User) {
              element = new MemberDetailElement(this, parentElement, (User) entity, removeListener, style);
 -              } else if (entity instanceof GrantedAuthority) {
 +        } else if (entity instanceof GrantedAuthority) {
              element = new GrantedAuthorityCollectionElement(this, parentElement, (GrantedAuthorityImpl) entity,
                      removeListener, style);
 -              } else if (entity instanceof Group) {
 +        } else if (entity instanceof Group) {
              element = new GroupsByUserDetailElement(this, parentElement, (Group) entity, removeListener, style);
 -              } else if (entity instanceof Taxon) {
 +        } else if (entity instanceof Taxon) {
              element = new TaxonDetailElement(this, parentElement, (Taxon) entity, removeListener, style);
 -              } else if (entity instanceof DescriptionElementBase) {
 -                      // this is the special case for protologs, maybe we can do this
 -                      // differently when API improves
 -                      DescriptionElementBase descriptionElement = (DescriptionElementBase) entity;
 -                      if (descriptionElement.getFeature().equals(Feature.PROTOLOGUE())) {
 +        } else if (entity instanceof DescriptionElementBase) {
 +            // this is the special case for protologs, maybe we can do this
 +            // differently when API improves
 +            DescriptionElementBase descriptionElement = (DescriptionElementBase) entity;
 +            if (descriptionElement.getFeature().equals(Feature.PROTOLOGUE())) {
                  element = new ProtologueElement(this, parentElement, descriptionElement, removeListener, style);
 -                      }
 -              }
 +            }
 +        }
  
 -              if (element == null) {
 +        if (element == null) {
              AbstractUtility.errorDialog("No element for entity", this,
                      "Could not generate element for entity. Looks like the case is not handled already. Check implementation. Entity: "
 -                                                                      + entity, null);
 -
 -              }
 +                            + entity, null);
 +        }
  
          else if (backgroundColor != null && !backgroundColor.isDisposed()) {
 -                      element.setPersistentBackground(backgroundColor);
 -              }
 +            element.setPersistentBackground(backgroundColor);
 +            adapt(element);
 +            parentElement.addElement(element);
 +        }
  
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        return element;
 +    }
  
 -      /**
 -       * <p>
 -       * Creates a selection element for the given type T.
 -       * </p>
 -       * <p>
 -       *      <strong>Selection elements not handled by this method:</strong>
 -       *      <ul>
 +    public void createNamedAreaFieldController(AbstractFormSection parentElement, NamedArea namedArea, SelectionListener removeListener){
 +//        Object entity = HibernateProxyHelper.deproxy(versionableEntity); TODO deproxy necessary??
 +        NamedAreaFieldController element = new NamedAreaFieldController(this, parentElement, namedArea, removeListener, SWT.NONE);
 +        adapt(element);
 +        parentElement.addElement(element);
 +    }
 +
 +    /**
 +     * <p>
 +     * Creates a selection element for the given type T.
 +     * </p>
 +     * <p>
 +     * <strong>Selection elements not handled by this method:</strong>
 +     * <ul>
       * <li>{@link TaxonNodeSelectionElement} see
       * {@link #createTaxonNodeSelectionElement(ConversationHolder, ICdmFormElement, String, TaxonNode, int, int)}
       * </li>
       * <li>{@link NomenclaturalAuthorTeamSelectionElement} see
       * {@link #createNomenclaturalAuthorTeamSelectionElement(ConversationHolder, ICdmFormElement, String, Team, int, int)}
       * </li>
 -       *      </ul>
 -       * </p>
 -       *
 -       * @param clazz
 +     * </ul>
 +     * </p>
 +     *
 +     * @param clazz
       *            a {@link Class} object of the type that you want the selection
       *            element to handle
 -       * @param parentElement
 +     * @param parentElement
       *            a {@link ICdmFormElement} object.
 -       * @param labelString
 -       *            a {@link String} object.
 -       * @param selectionType
 -       * @param selection
 -       *            a {@link ICdmBase} object.
 -       * @param style
 -       *            a int.
 -       * @param conversation
 -       *            a {@link ConversationHolder} object.
 +     * @param labelString
 +     *            a {@link String} object.
 +     * @param selectionType
 +     * @param selection
 +     *            a {@link ICdmBase} object.
 +     * @param style
 +     *            a int.
 +     * @param conversation
 +     *            a {@link ConversationHolder} object.
       * @return a {@link EntitySelectionElement} object.
 -       */
 +     */
      public <T extends ICdmBase> EntitySelectionElement<T> createSelectionElement(Class<T> clazz,
              ConversationHolder conversation, ICdmFormElement parentElement, String labelString, T selection, int mode,
              int style) {
          EntitySelectionElement<T> element = new EntitySelectionElement<T>(this, conversation, parentElement, clazz,
                  labelString, selection, mode, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
      public TaxonNodeSelectionElement createTaxonNodeSelectionElement(ConversationHolder conversation,
              ICdmFormElement parentElement, String labelString, TaxonNode selection, int mode, int style) {
          TaxonNodeSelectionElement element = new TaxonNodeSelectionElement(this, conversation, parentElement,
                  labelString, selection, mode, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      public NomenclaturalAuthorTeamSelectionElement createNomenclaturalAuthorTeamSelectionElement(
 +    public NomenclaturalAuthorTeamSelectionElement createNomenclaturalAuthorTeamSelectionElement(
              ConversationHolder conversation, ICdmFormElement parentElement, String labelString, Team selection,
              int mode, int style) {
          NomenclaturalAuthorTeamSelectionElement element = new NomenclaturalAuthorTeamSelectionElement(this,
                  conversation, parentElement, labelString, selection, mode, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 -
 +        adapt(element);
 +        parentElement.addElement(element);
 +        return element;
 +    }
  
 -      /** {@inheritDoc} */
 -      public LabelElement createLabel(ICdmFormElement parentElement, String text) {
 -              LabelElement labelElement = new LabelElement(this, parentElement, text);
 -              adapt(labelElement);
 -              parentElement.addElement(labelElement);
 -              return labelElement;
 -      }
 +    /** {@inheritDoc} */
 +    public LabelElement createLabel(ICdmFormElement parentElement, String text) {
 +        LabelElement labelElement = new LabelElement(this, parentElement, text);
 +        adapt(labelElement);
 +        parentElement.addElement(labelElement);
 +        return labelElement;
 +    }
  
 -      /**
 -       * <p>
 -       * Getter for the field <code>selectionProvider</code>.
 -       * </p>
 -       *
 -       * @return a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
 -       */
 -      public ISelectionProvider getSelectionProvider() {
 -              return selectionProvider;
 -      }
 +    /**
 +     * <p>
 +     * Getter for the field <code>selectionProvider</code>.
 +     * </p>
 +     *
 +     * @return a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
 +     */
 +    public ISelectionProvider getSelectionProvider() {
 +        return selectionProvider;
 +    }
  
 -      /**
 -       * <p>
 -       * createDetailedDescriptionDetailElement
 -       * </p>
 -       *
 -       * @param parentElement
 -       *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 -       *            object.
 -       * @param entity
 -       *            a
 -       *            {@link eu.etaxonomy.cdm.model.description.DescriptionElementBase}
 -       *            object.
 -       * @param style
 -       *            a int.
 -       * @return a
 -       *         {@link eu.etaxonomy.taxeditor.ui.section.description.detail.AbstractDetailedDescriptionDetailElement}
 -       *         object.
 -       */
 -      public AbstractDetailedDescriptionDetailElement createDetailedDescriptionDetailElement(
 +    /**
 +     * <p>
 +     * createDetailedDescriptionDetailElement
 +     * </p>
 +     *
 +     * @param parentElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     * @param entity
 +     *            a
 +     *            {@link eu.etaxonomy.cdm.model.description.DescriptionElementBase}
 +     *            object.
 +     * @param style
 +     *            a int.
 +     * @return a
 +     *         {@link eu.etaxonomy.taxeditor.ui.section.description.detail.AbstractDetailedDescriptionDetailElement}
 +     *         object.
 +     */
 +    public AbstractDetailedDescriptionDetailElement createDetailedDescriptionDetailElement(
              ICdmFormElement parentElement, DescriptionElementBase entity, int style) {
 -              AbstractDetailedDescriptionDetailElement detailedDescriptionElement = null;
 +        AbstractDetailedDescriptionDetailElement detailedDescriptionElement = null;
  
 -              if (entity instanceof CategoricalData) {
 +        if (entity instanceof CategoricalData) {
              detailedDescriptionElement = new CategoricalDataDetailElement(this, parentElement,
                      (CategoricalData) entity, style);
 -              } else if (entity instanceof CommonTaxonName) {
 +        } else if (entity instanceof CommonTaxonName) {
              detailedDescriptionElement = new CommonNameDetailElement(this, parentElement, (CommonTaxonName) entity,
                      style);
 -              } else if (entity instanceof Distribution) {
 +        } else if (entity instanceof Distribution) {
              detailedDescriptionElement = new DistributionDetailElement(this, parentElement, (Distribution) entity,
                      style);
 -              } else if (entity instanceof IndividualsAssociation) {
 +        } else if (entity instanceof IndividualsAssociation) {
              detailedDescriptionElement = new IndividualsAssociationDetailElement(this, parentElement,
                      (IndividualsAssociation) entity, style);
 -              } else if (entity instanceof QuantitativeData) {
 +        } else if (entity instanceof QuantitativeData) {
              detailedDescriptionElement = new QuantitativeDataDetailElement(this, parentElement,
                      (QuantitativeData) entity, style);
 -              } else if (entity instanceof TaxonInteraction) {
 +        } else if (entity instanceof TaxonInteraction) {
              detailedDescriptionElement = new TaxonInteractionDetailElement(this, parentElement,
                      (TaxonInteraction) entity, style);
 -              } else if (entity instanceof TextData) {
 +        } else if (entity instanceof TextData) {
              detailedDescriptionElement = new TextDataDetailElement(this, parentElement, (TextData) entity, style);
 -              } else {
 +        } else {
              throw new IllegalStateException("There is no interface for the given description element");
 -              }
 -              adapt(detailedDescriptionElement);
 -              parentElement.addElement(detailedDescriptionElement);
 -              return detailedDescriptionElement;
 +        }
 +        adapt(detailedDescriptionElement);
 +        parentElement.addElement(detailedDescriptionElement);
 +        return detailedDescriptionElement;
  
 -      }
 +    }
  
 -      /**
 -       * Creates a styled text as a part of the form.
 -       *
 -       * @param parent
 -       *            the text parent
 -       * @param value
 -       *            the text initial value
 -       * @param style
 -       *            the text style
 -       * @return the text widget
 -       */
 -      public StyledText createStyledText(Composite parent, String value, int style) {
 +    /**
 +     * Creates a styled text as a part of the form.
 +     *
 +     * @param parent
 +     *            the text parent
 +     * @param value
 +     *            the text initial value
 +     * @param style
 +     *            the text style
 +     * @return the text widget
 +     */
 +    public StyledText createStyledText(Composite parent, String value, int style) {
          StyledText text = new StyledText(parent, getBorderStyle() | style | getOrientation());
          if (value != null) {
 -                      text.setText(value);
 +            text.setText(value);
          }
 -              text.setForeground(getColors().getForeground());
 -              text.setBackground(getColors().getBackground());
 -              // text.addFocusListener(visibilityHandler);
 -              return text;
 -      }
 +        text.setForeground(getColors().getForeground());
 +        text.setBackground(getColors().getBackground());
 +        // text.addFocusListener(visibilityHandler);
 +        return text;
 +    }
 +
 +
 +
 +    /**
 +     * @param conversationHolder
 +     * @param parent
 +     * @param detailsViewer
 +     * @param i
 +     * @return
 +     */
 +    public FieldObservationGeneralSection createFieldObservationGeneralSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
 +        FieldObservationGeneralSection section = new FieldObservationGeneralSection(this, conversation, parentElement, selectionProvider, style);
 +        addAndAdaptSection(parentElement, section);
 +        return section;
 +    }
 +    /**
 +     * @param conversationHolder
 +     * @param parent
 +     * @param detailsViewer
 +     * @param i
 +     * @return
 +     */
 +    public GatheringEventSection createGatheringEventSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
 +        GatheringEventSection section = new GatheringEventSection(this, conversation, parentElement, selectionProvider, style);
 +        addAndAdaptSection(parentElement, section);
 +        return section;
 +    }
 +    /**
 +     * @param conversationHolder
 +     * @param parent
 +     * @param detailsViewer
 +     * @param i
 +     * @return
 +     */
 +    public FieldObservationDetailsSection createFieldObservationDetailsSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
 +        FieldObservationDetailsSection section = new FieldObservationDetailsSection(this, conversation, parentElement, selectionProvider, style);
 +        addAndAdaptSection(parentElement, section);
 +        return section;
 +    }
 +
 +    public SpecimenGeneralSection createSpecimenSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
 +        SpecimenGeneralSection section = new SpecimenGeneralSection(this, conversation, parentElement, selectionProvider, style);
 +        addAndAdaptSection(parentElement, section);
 +        return section;
 +    }
 +
 +    public SpecimenDetailsSection createSpecimenDetailsSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
 +        SpecimenDetailsSection section = new SpecimenDetailsSection(this, conversation, parentElement, selectionProvider, style);
 +        addAndAdaptSection(parentElement, section);
 +        return section;
 +    }
 +
 +    public DerivedUnitDetailsSection createDerivedUnitDetailsSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
 +        DerivedUnitDetailsSection section = new DerivedUnitDetailsSection(this, conversation, parentElement, selectionProvider, style);
 +        addAndAdaptSection(parentElement, section);
 +        return section;
 +    }
 +
 +    public FieldObservationGeneralElementController createSpecimenGeneralElementController(ICdmFormElement parentElement){
 +        return createFieldObservationGeneralElementController_internal(parentElement, true, false);
 +    }
 +
 +    public SpecimenDetailsElementController createSpecimenDetailsElementController(ICdmFormElement parentElement){
 +        SpecimenDetailsElement element = new SpecimenDetailsElement(parentElement.getLayoutComposite(), SWT.NONE);
 +        element.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2,1));
 +        SpecimenDetailsElementController controller = new SpecimenDetailsElementController(element, this, parentElement);
 +        addAndAdaptElement(parentElement, controller);
 +        return controller;
 +    }
 +
 +    public DerivedUnitDetailsElementController createDerivedUnitDetailsElementController(ICdmFormElement parentElement){
 +        DerivedUnitDetailsElement element = new DerivedUnitDetailsElement(parentElement.getLayoutComposite(), SWT.NONE);
 +        element.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2,1));
 +        DerivedUnitDetailsElementController controller = new DerivedUnitDetailsElementController(element, this, parentElement);
 +        addAndAdaptElement(parentElement, controller);
 +        return controller;
 +    }
 +
 +    public FieldObservationGeneralElementController createSpecimenGeneralElementControllerWizard(ICdmFormElement parentElement){
 +        return createFieldObservationGeneralElementController_internal(parentElement, true, true);
 +    }
  
 +    public FieldObservationGeneralElementController createFieldObservationGeneralElementControllerWizard(ICdmFormElement parentElement){
 +        return createFieldObservationGeneralElementController_internal(parentElement, false, true);
 +    }
  
 +    public FieldObservationGeneralElementController createFieldObservationGeneralElementController(ICdmFormElement parentElement){
 +        return createFieldObservationGeneralElementController_internal(parentElement, false, false);
 +    }
  
 +    private FieldObservationGeneralElementController createFieldObservationGeneralElementController_internal(ICdmFormElement parentElement, boolean isSpecimen, boolean isWizard){
 +        FieldObservationGeneralElement element = new FieldObservationGeneralElement(parentElement.getLayoutComposite(), SWT.NONE);
 +        element.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2,1));
 +        FieldObservationGeneralElementController controller = new FieldObservationGeneralElementController(element, this, parentElement, isSpecimen, isWizard);
 +        addAndAdaptElement(parentElement, controller);
 +        return controller;
 +    }
  
 +    public GatheringEventDetailsElementController createGatheringEventDetailsElementController(ICdmFormElement parentElement) {
 +        GatheringEventDetailsElement element = new GatheringEventDetailsElement(parentElement.getLayoutComposite(), SWT.NONE);
 +        element.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2,1));
 +        GatheringEventDetailsElementController controller = new GatheringEventDetailsElementController(element, this, parentElement);
 +        adapt(controller);
 +        parentElement.addElement(controller);
 +        return controller;
 +    }
  
 +    public FieldObservationDetailsElementController createFieldObservationDetailsElementController(ICdmFormElement parentElement) {
 +        FieldObservationDetailsElement element = new FieldObservationDetailsElement(parentElement.getLayoutComposite(), SWT.NONE);
 +        element.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2,1));
 +        FieldObservationDetailsElementController controller = new FieldObservationDetailsElementController(element, this, parentElement);
 +        addAndAdaptElement(parentElement, controller);
 +        return controller;
 +    }
  
  }
index 6b9c75458fc267c45f4edf8dfe82130a4ec02a41,7f4582fde58791d6aabe82160252edd647a5fc0f..723b795c49dd6cc0d27c27ac898d29f8cfbe520a
@@@ -13,7 -13,6 +13,7 @@@ package eu.etaxonomy.taxeditor.ui.eleme
  import org.eclipse.jface.util.PropertyChangeEvent;
  
  import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  
  /**
   * <p>
@@@ -60,15 -59,20 +60,19 @@@ public class MinMaxTextSection extends 
                this.unitType = unitType;
                getLayoutComposite().setLayout(LayoutConstants.LAYOUT(2, false));
  
-               text_minVal = formFactory.createNumberTextWithLabelElement(this,
-                               "Min : ", getMinimum(), style);
-               text_maxVal = formFactory.createNumberTextWithLabelElement(this,
-                               "Max : ", getMaximum(), style);
+               switch(unitType) {
+                       case ELEVATION:
+                               text_minVal = formFactory.createNumberTextWithLabelElement(this, "Min [m] : ", getMinimum(), style);
+                               text_maxVal = formFactory.createNumberTextWithLabelElement(this, "Max [m] : ", getMaximum(), style);    
+                               break;
+                       default:
+                               text_minVal = formFactory.createNumberTextWithLabelElement(this, "Min [m] : ", getMinimum(), style);
+                               text_maxVal = formFactory.createNumberTextWithLabelElement(this, "Max [m] : ", getMaximum(), style);                                                            
+                               break;                  
+               }
                text_freeText = formFactory.createTextWithLabelElement(this,
                                "Freetext : ", getFreetext(), style);
  
 -
                formFactory.addPropertyChangeListener(this);
        }
  
        private void updateMinimum() {
                switch(unitType) {
                case ELEVATION:
-                       getEntity().setAbsoluteElevation(text_minVal.getInteger());
+                       getEntity().setAbsoluteElevation(text_minVal.getDouble().intValue());
                        break;
                case DIST_TO_GROUND:
                        getEntity().setDistanceToGround(text_minVal.getDouble());
        private void updateMaximum() {
                switch(unitType) {
                case ELEVATION:
-                       getEntity().setAbsoluteElevationMax(text_maxVal.getInteger());
+                       getEntity().setAbsoluteElevationMax(text_maxVal.getDouble().intValue());
                        break;
                case DIST_TO_GROUND:
                        getEntity().setDistanceToGroundMax(text_maxVal.getDouble());
index d441b0b2fe51f9fabbfab3d6d0abad4cc0f09e3c,b8c8ed1d0e3c8cffd98eb8eab1dc6510bc9d4b18..4a9e649cb58a61c2a5aba2dbd7ae0f46e36d34ef
@@@ -1,23 -1,21 +1,22 @@@
  // $Id$
  /**
  * Copyright (C) 2007 EDIT
 -* European Distributed Institute of Taxonomy 
 +* European Distributed Institute of Taxonomy
  * http://www.e-taxonomy.eu
 -* 
 +*
  * The contents of this file are subject to the Mozilla Public License Version 1.1
  * See LICENSE.TXT at the top of this package for the full license terms.
  */
  
  package eu.etaxonomy.taxeditor.ui.element;
  
+ import org.apache.commons.lang.StringUtils;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.events.ModifyEvent;
  import org.eclipse.swt.widgets.Display;
  
- import eu.etaxonomy.cdm.common.CdmUtils;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  
  /**
   * <p>NumberWithLabelElement class.</p>
   *
@@@ -29,7 -27,7 +28,7 @@@ public class NumberWithLabelElement ext
  
        private Float start;
        private Float end;
 -      
 +
        private NumberFormatException exception;
  
        /**
@@@ -47,8 -45,8 +46,8 @@@
                super(toolkit, parentElement, labelString, null, null, style);
                setNumber(initialNumber);
        }
 -      
 -      
 +
 +
        /**
         * <p>setNumber</p>
         *
@@@ -57,7 -55,7 +56,7 @@@
        public void setNumber(Number number) {
                super.setText(getStringRepresentation(number));
        }
 -      
 +
        /**
         * <p>getInteger</p>
         *
@@@ -67,7 -65,7 +66,7 @@@
                String text = super.getText().trim();
                return text.equals("") ? 0 : new Integer(text);
        }
 -      
 +
        /**
         * <p>getFloat</p>
         *
@@@ -77,7 -75,7 +76,7 @@@
                String text = super.getText();
                return new Float(text);
        }
 -      
 +
        /**
         * <p>getDouble</p>
         *
        private String getStringRepresentation(Object number){
                if(number != null){
                        return number.toString();
 -              }               
 +              }
                return null;
        }
 -      
 +
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
         */
        @Override
        public void modifyText(ModifyEvent event) {
                String value = text.getText();
-               if(CdmUtils.isEmpty(value)){
+               if(StringUtils.isBlank(value)){
                        text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
                        return;
                }
 -              
 +
                try{
 -                      
 +
                        Float number = Float.parseFloat(value);
 -                      
 +
                        if((start != null && number < start) || (end != null && number > end)){
                                throw new NumberFormatException("You entered a number that is not within the allowed bounds.");
                        }
 -                      
 +
                }catch(NumberFormatException e){
                        text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
                        firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
                        exception = e;
                        return;
                }
 -              
 +
                exception = null;
                text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
 -              
 +
                super.modifyText(event);
        }
 -      
 +
        /**
         * <p>setLimits</p>
         *
        public void setLimits(int numberOfDigits, Integer start, Integer end){
                setLimits(numberOfDigits, start.floatValue(), end.floatValue());
        }
 -      
 +
        /**
         * <p>setLimits</p>
         *
                this.start = start;
                this.end = end;
        }
 -      
 +
        /**
         * <p>Getter for the field <code>exception</code>.</p>
         *
index 5054fa74918693da3685935ad30e239d8a879a39,e2b2fadb91c974b723885e201a787b370f1a3a94..e74e40ba31d91417ce516cd1c05587d3baeb9256
@@@ -1,9 -1,9 +1,9 @@@
  // $Id$
  /**
  * Copyright (C) 2007 EDIT
- * European Distributed Institute of Taxonomy 
+ * European Distributed Institute of Taxonomy
  * http://www.e-taxonomy.eu
- * 
+ *
  * The contents of this file are subject to the Mozilla Public License Version 1.1
  * See LICENSE.TXT at the top of this package for the full license terms.
  */
@@@ -26,9 -26,9 +26,10 @@@ import org.eclipse.swt.widgets.Composit
  import org.eclipse.swt.widgets.Label;
  import org.eclipse.swt.widgets.Text;
  
+ import eu.etaxonomy.taxeditor.model.ImageResources;
  import eu.etaxonomy.taxeditor.preference.Resources;
  import eu.etaxonomy.taxeditor.store.StoreUtil;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  
  /**
   * When the button is pressed, this textfield may be edited.
   */
  public class ToggleableTextElement extends AbstractCdmFormElement implements SelectionListener, ModifyListener, IEnableableFormElement, ISelectable {
  
-       private Text text_cache;
-       private Button button_toggle;
-       
+       private final Text text_cache;
+       private final Button button_toggle;
        private boolean state;
-       private Set<SelectionListener> selectionListener = new HashSet<SelectionListener>();
-       private Label label;
-       private Composite container;
-       
+       private final Set<SelectionListener> selectionListener = new HashSet<SelectionListener>();
+       private final Label label;
+       private final Composite container;
        /**
         * <p>Constructor for ToggleableTextElement.</p>
         *
        protected ToggleableTextElement(CdmFormFactory formFactory, ICdmFormElement parentElement,
                        String labelString, String initialText, boolean initialState, int style) {
                super(formFactory, parentElement);
-               
                label = formFactory.createLabel(getLayoutComposite(), labelString, style);
                addControl(label);
-               
-               container = formFactory.createComposite(getLayoutComposite(), SWT.WRAP);                
+               container = formFactory.createComposite(getLayoutComposite(), SWT.WRAP);
                container.setLayout(LayoutConstants.LAYOUT(2, false));
                container.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
                addControl(container);
-               
                text_cache = formFactory.createText(container, initialText, SWT.WRAP | SWT.MULTI);
                addControl(text_cache);
                text_cache.addModifyListener(this);
                text_cache.addKeyListener( new KeyAdapter(){
                        @Override
                        public void keyPressed(KeyEvent e) {
-                       if(e.character == SWT.CR)
-                               e.doit = false;
+                       if(e.character == SWT.CR) {
+                 e.doit = false;
+             }
                        }
                });
-               
                button_toggle = formFactory.createButton(container, "Edit", SWT.TOGGLE);
+               button_toggle.setText("");
+               button_toggle.setImage(ImageResources.getImage(ImageResources.LOCK_ICON));
                addControl(button_toggle);
                button_toggle.addSelectionListener(this);
-               
                setState(initialState);
        }
  
                if(text != null){
                        // store current caret position
                        int caretPosition = text_cache.getCaretPosition();
-                       
                        text_cache.removeModifyListener(this);
                        text_cache.setText(text);
                        text_cache.addModifyListener(this);
        public String getText(){
                return text_cache.getText();
        }
-       
        /**
         * <p>Setter for the field <code>state</code>.</p>
         *
         * @param state a boolean.
         */
        public void setState(boolean state) {
+           if(state){
+               button_toggle.setImage(ImageResources.getImage(ImageResources.LOCK_OPEN_ICON));
+           }
+           else{
+               button_toggle.setImage(ImageResources.getImage(ImageResources.LOCK_ICON));
+           }
                this.state = state;
                setEnabled(state);
        }
-       
        /** {@inheritDoc} */
-       public void setEnabled(boolean enabled) {
+       @Override
+     public void setEnabled(boolean enabled) {
                text_cache.setEnabled(enabled);
                String symbolicName = enabled ? Resources.COLOR_FONT_DEFAULT : Resources.COLOR_TEXT_DISABLED;
                text_cache.setForeground(StoreUtil.getColor(symbolicName));
        public boolean getState(){
                return state;
        }
-       
        /* (non-Javadoc)
         * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
         */
        /** {@inheritDoc} */
-       public void widgetSelected(SelectionEvent e) {
+       @Override
+     public void widgetSelected(SelectionEvent e) {
                setState(button_toggle.getSelection());
                for(SelectionListener listener : selectionListener){
                        listener.widgetSelected(e);
                }
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
        }
-       
        /**
         * <p>addSelectionListener</p>
         *
        public void addSelectionListener(SelectionListener listener){
                selectionListener.add(listener);
        }
-       
        /**
         * <p>removeSelectionListener</p>
         *
        public void removeSelectionListener(SelectionListener listener){
                selectionListener.remove(listener);
        }
-       
        /** {@inheritDoc} */
-       public void widgetDefaultSelected(SelectionEvent e) {}
+       @Override
+     public void widgetDefaultSelected(SelectionEvent e) {}
  
        /** {@inheritDoc} */
-       public void modifyText(ModifyEvent e) {
+       @Override
+     public void modifyText(ModifyEvent e) {
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
        }
  
        /** {@inheritDoc} */
-       public void setIrrelevant(boolean irrelevant) {
+       @Override
+     public void setIrrelevant(boolean irrelevant) {
                String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT : Resources.COLOR_COMPOSITE_BACKGROUND;
-               
                Color color = getColor(colorId);
                text_cache.setBackground(color);
        }
-       
        /** {@inheritDoc} */
        @Override
        public void setBackground(Color color) {
                label.setBackground(color);
                container.setBackground(color);
        }
-       
        @Override
        public void setSelected(boolean selected) {
                setBackground(selected ? SELECTED : getPersistentBackground());
index 228a42c0091d76608f4720208c89f2198f3fbe36,638dda420f9931d9633eab05e8f8dd1e668c56af..e1cab9bef2730c53de590bf817d493323a527df6
@@@ -8,21 -8,21 +8,20 @@@
  */
  package eu.etaxonomy.taxeditor.ui.group.grantedauthority;
  
--import org.eclipse.swt.widgets.Composite;
--import org.eclipse.swt.widgets.Button;
--import org.eclipse.swt.widgets.Display;
  import org.eclipse.swt.SWT;
++import org.eclipse.swt.events.MouseAdapter;
++import org.eclipse.swt.events.MouseEvent;
++import org.eclipse.swt.events.MouseTrackAdapter;
  import org.eclipse.swt.layout.RowLayout;
++import org.eclipse.swt.widgets.Button;
++import org.eclipse.swt.widgets.Composite;
++import org.eclipse.swt.widgets.Display;
  
  import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
  import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
  import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthority;
  import eu.etaxonomy.cdm.persistence.hibernate.permission.Operation;
  
--import org.eclipse.swt.events.MouseAdapter;
--import org.eclipse.swt.events.MouseEvent;
--import org.eclipse.swt.events.MouseTrackAdapter;
--
  
  /**
   * Widget for editing {@link Operation} objects, consisting of 4 checkboxes for CREATE, UPDATE, READ, DELETE operations.
@@@ -69,7 -69,7 +68,7 @@@ public class CRUDOperationChooser exten
                                                cdmAuthority.getOperation().remove(CRUD.CREATE);
                                        }
                                        if(viewer != null) {
-                                               viewer.updateGrantedAuthority(grantedAuthorityI, cdmAuthority);
+                                               grantedAuthorityI = viewer.updateGrantedAuthority(grantedAuthorityI, cdmAuthority);
                                                parent.setDirty(true);
                                        }
                                        
@@@ -94,7 -94,7 +93,7 @@@
                                                cdmAuthority.getOperation().remove(CRUD.READ);
                                        }
                                        if(viewer != null) {
-                                               viewer.updateGrantedAuthority(grantedAuthorityI, cdmAuthority);
+                                               grantedAuthorityI = viewer.updateGrantedAuthority(grantedAuthorityI, cdmAuthority);
                                                parent.setDirty(true);
                                        }
                                        
                                                cdmAuthority.getOperation().remove(CRUD.DELETE);
                                        }
                                        if(viewer != null) {
-                                               viewer.updateGrantedAuthority(grantedAuthorityI, cdmAuthority);
+                                               grantedAuthorityI = viewer.updateGrantedAuthority(grantedAuthorityI, cdmAuthority);
                                                parent.setDirty(true);
                                        }
                                        
                                                cdmAuthority.getOperation().remove(CRUD.UPDATE);
                                        }
                                        if(viewer != null) {
-                                               viewer.updateGrantedAuthority(grantedAuthorityI, cdmAuthority);
+                                               grantedAuthorityI = viewer.updateGrantedAuthority(grantedAuthorityI, cdmAuthority);
                                                parent.setDirty(true);
                                        }
                                        
index cc4210f13d91fcc4fb711e6eb9cc183157042363,cc4210f13d91fcc4fb711e6eb9cc183157042363..08a0faeaabd2a16962599a04abea6d80a5f0202a
@@@ -10,25 -10,25 +10,23 @@@ package eu.etaxonomy.taxeditor.ui.group
  
  import org.eclipse.nebula.widgets.compositetable.CompositeTable;
  import org.eclipse.nebula.widgets.compositetable.IRowContentProvider;
--
++import org.eclipse.swt.SWT;
++import org.eclipse.swt.dnd.DND;
++import org.eclipse.swt.dnd.DropTarget;
++import org.eclipse.swt.dnd.Transfer;
  import org.eclipse.swt.events.DisposeEvent;
  import org.eclipse.swt.events.DisposeListener;
++import org.eclipse.swt.layout.GridData;
++import org.eclipse.swt.layout.GridLayout;
  import org.eclipse.swt.widgets.Composite;
++import org.eclipse.swt.widgets.Control;
  import org.eclipse.swt.widgets.Display;
++import org.eclipse.swt.widgets.Label;
  import org.eclipse.ui.forms.widgets.FormToolkit;
--import org.eclipse.swt.SWT;
--import org.eclipse.swt.widgets.Control;
  
  import eu.etaxonomy.taxeditor.dnd.CdmAuthorityTableDropTargetListener;
  import eu.etaxonomy.taxeditor.dnd.transfer.TaxonNodeTransfer;
  
--import org.eclipse.swt.dnd.DropTarget;
--import org.eclipse.swt.dnd.DND;
--import org.eclipse.swt.dnd.Transfer;
--import org.eclipse.swt.layout.GridLayout;
--import org.eclipse.swt.widgets.Label;
--import org.eclipse.swt.layout.GridData;
--
  /**
   * Composite class which consists of a {@link CompositeTable} built specifically
   * for creating / editing CDM Authority objects
index 701b73923ae4d4f182ff729dd5b35edabf3467e2,10e025b7736aa495ce0fb6e71b83fc35c6f07854..cb910b32c9960407c9c3ae5f7c7b6c3c5b05f61a
@@@ -23,12 -23,12 +23,12 @@@ import org.eclipse.swt.widgets.Control
  import org.springframework.security.core.GrantedAuthority;
  
  import eu.etaxonomy.cdm.model.common.CdmBase;
--import eu.etaxonomy.cdm.model.common.Group;
--import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
--import eu.etaxonomy.taxeditor.store.StoreUtil;
  import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
++import eu.etaxonomy.cdm.model.common.Group;
  import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
  import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthority;
++import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
++import eu.etaxonomy.taxeditor.store.StoreUtil;
  
  
  
@@@ -177,7 -177,7 +177,7 @@@ public class CdmAuthorityCompositeViewe
         * @param grantedAuthorityI to update.
         * @param cdmAuthority to use in updating the granted authority object.
         */
-       public void updateGrantedAuthority(GrantedAuthorityImpl grantedAuthorityI, CdmAuthority cdmAuthority) {
+       public GrantedAuthorityImpl updateGrantedAuthority(GrantedAuthorityImpl grantedAuthorityI, CdmAuthority cdmAuthority) {
                if(grantedAuthorityI.getAuthority().equals(cdmAuthority.getAuthority())) {
                        
                } else {
                                // we can't really 'update' the granted authority.
                                // so we first add the new authority (hope no exception) is thrown
                                // and then remove the old one.
-                               group.addGrantedAuthority(cdmAuthority.asNewGrantedAuthority());
+                               GrantedAuthorityImpl gai = cdmAuthority.asNewGrantedAuthority();
+                               group.addGrantedAuthority(gai);
                                group.removeGrantedAuthority(grantedAuthorityI);
-                               dirtyMarkerEditor.changed(grantedAuthorityI);                           
+                               dirtyMarkerEditor.changed(grantedAuthorityI);
+                               return gai;
                        } catch(Exception e) {
                                // Not a CDM Authority
                                //e.printStackTrace();
                        }
-               }               
+               }
+               return grantedAuthorityI;
        }
        
        /**
index 9d545f0e95d85c1ac17071d52a13367c8b3504b2,9d545f0e95d85c1ac17071d52a13367c8b3504b2..16068ddbf779e92cf55bf98ec12d85bbc4ba1477
@@@ -8,25 -8,25 +8,23 @@@
  */
  package eu.etaxonomy.taxeditor.ui.group.grantedauthority;
  
++import org.eclipse.swt.SWT;
  import org.eclipse.swt.events.DisposeEvent;
  import org.eclipse.swt.events.DisposeListener;
++import org.eclipse.swt.events.MouseAdapter;
++import org.eclipse.swt.events.MouseEvent;
++import org.eclipse.swt.layout.GridData;
++import org.eclipse.swt.layout.GridLayout;
++import org.eclipse.swt.widgets.Button;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.Display;
--import org.eclipse.ui.forms.widgets.FormToolkit;
--import org.eclipse.swt.layout.GridLayout;
  import org.eclipse.swt.widgets.Label;
--import org.eclipse.swt.SWT;
--
--import org.eclipse.swt.widgets.Button;
--import org.eclipse.swt.layout.GridData;
++import org.eclipse.ui.forms.widgets.FormToolkit;
  
  import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
  import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthority;
  import eu.etaxonomy.taxeditor.model.ImageResources;
  
--import org.eclipse.swt.events.MouseAdapter;
--import org.eclipse.swt.events.MouseEvent;
--
  
  /**
   * Row widget for editing a single CDM Authority
index a47133bc4b4faad2a8b13c08d46810b6b88f5294,a47133bc4b4faad2a8b13c08d46810b6b88f5294..ee844900a0bd91fa556c4a414674a5d0b9c20a9f
@@@ -8,16 -8,16 +8,16 @@@
  */
  package eu.etaxonomy.taxeditor.ui.group.grantedauthority;
  
++import org.eclipse.swt.SWT;
++import org.eclipse.swt.custom.CLabel;
  import org.eclipse.swt.events.DisposeEvent;
  import org.eclipse.swt.events.DisposeListener;
++import org.eclipse.swt.layout.GridData;
++import org.eclipse.swt.layout.GridLayout;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.Display;
--import org.eclipse.ui.forms.widgets.FormToolkit;
--import org.eclipse.swt.layout.GridLayout;
  import org.eclipse.swt.widgets.Label;
--import org.eclipse.swt.SWT;
--import org.eclipse.swt.layout.GridData;
--import org.eclipse.swt.custom.CLabel;
++import org.eclipse.ui.forms.widgets.FormToolkit;
  
  /**
   * Table header widget for {@link CdmAuthorityComposite}
index 544bc6ea37b0a187bb1c769c6cbb573c05e57d78,838fd1c7762820204b2c29171ffc2d213f62d81f..0ef043a6b3b43e4e1001d03fa3713069c4feda74
@@@ -1,13 -1,13 +1,13 @@@
  /**
-  * 
+  *
   */
  package eu.etaxonomy.taxeditor.ui.section;
  
  import java.util.Arrays;
  
  import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
  
  /**
   *
   */
  public abstract class AbstractIdentifiableEntityDetailElement<T extends IIdentifiableEntity> extends
-               AbstractCdmDetailElement<T> {
-       protected ToggleableTextElement toggleable_cache;
-       
-       public AbstractIdentifiableEntityDetailElement(CdmFormFactory formFactory,
-                       ICdmFormElement formElement) {
-               super(formFactory, formElement);
-       }
-       
-       public void updateToggleableCacheField(){
-               if(! getEntity().isProtectedTitleCache()){
-                       toggleable_cache.setText(getEntity().generateTitle());
-               }
-       }
-       
-       protected void handleToggleableCacheField(){
-               boolean pushedState = toggleable_cache.getState();
-               
-               getEntity().setTitleCache(toggleable_cache.getText(),
-                               pushedState);
-               setIrrelevant(pushedState,
-                               Arrays.asList(new Object[] { toggleable_cache }));
-               updateToggleableCacheField();
-       }       
+         AbstractCdmDetailElement<T> {
+     protected ToggleableTextElement toggleable_cache;
+     public AbstractIdentifiableEntityDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
+         super(formFactory, formElement);
+     }
+     public void updateToggleableCacheField() {
+         if (!getEntity().isProtectedTitleCache()) {
+             toggleable_cache.setText(getEntity().generateTitle());
+         }
+     }
+     protected void handleToggleableCacheField() {
+         boolean pushedState = toggleable_cache.getState();
+         getEntity().setTitleCache(toggleable_cache.getText(), pushedState);
+         setIrrelevant(pushedState, Arrays.asList(new Object[] { toggleable_cache }));
+         updateToggleableCacheField();
+     }
  }
index 946aa45701440be2a72441dc54c0cba750913de3,3b7ccac5e9faf755501ca7dc44a0ff6e2ce5f15a..d79ad1f4eeef1bdda6bf597f09c8f01e7dad6824
@@@ -14,8 -14,8 +14,8 @@@ import org.eclipse.swt.SWT
  
  import eu.etaxonomy.cdm.model.description.DescriptionBase;
  import eu.etaxonomy.cdm.model.description.FeatureTree;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
  import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
@@@ -65,9 -65,8 +65,8 @@@ public class DescriptionDetailElement e
                }
                else if(eventSource == selection_featureTree){
                        FeatureTree featureTree = selection_featureTree.getSelection();
-                       //FIXME:3.3MC---- 
-                       //getEntity().setDescriptiveSystem(featureTree.getDistinctFeatures());
-                       //FIXME:3.3MC----
+                       //descriptive system is not available anymore since v3.3 
+ //                    getEntity().setDescriptiveSystem(featureTree.getDistinctFeatures());
                }
        }
  }
index 05a9ee0be1f4197ea03269d7e91cce57c097b21d,97525567ad0f0da64d778389197808f96f107b0d..717c2894a8c3421a34d348850181532edacf83ef
@@@ -7,8 -7,8 +7,8 @@@ import eu.etaxonomy.cdm.model.descripti
  import eu.etaxonomy.cdm.model.description.PolytomousKey;
  import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.KeyStatementElement;
  import eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
@@@ -56,7 -56,7 +56,7 @@@ public class PolytomousKeyNodeDetailEle
  
                        selection_feature = formFactory
                                        .createSelectionElement(Feature.class,
-                                                       getConversationHolder(), formElement, "Feature",
+                                                       getConversationHolder(), formElement, "Character",
                                                        parent.getFeature(),
                                                        EntitySelectionElement.EDITABLE | EntitySelectionElement.DELETABLE, style);
                }
index 1bc96387291137eada9ce254a92dd666524852d8,9778af4d957c47203e289528cdb4d83f7705c0df..4abbb14a7e820a2cc7088508b8e48baa35539a2d
@@@ -14,11 -14,14 +14,14 @@@ import org.eclipse.ui.forms.widgets.Exp
  
  import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
  import eu.etaxonomy.cdm.api.facade.MethodNotSupportedByDerivedUnitTypeException;
+ import eu.etaxonomy.cdm.model.common.DefinedTerm;
  import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+ import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
  import eu.etaxonomy.taxeditor.model.AbstractUtility;
  import eu.etaxonomy.taxeditor.store.CdmStore;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
+ import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
  import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
@@@ -46,9 -49,7 +49,7 @@@ public class DerivedUnitBaseDetailEleme
  
        private TextWithLabelElement text_exsicatum;
  
-       //FIXME:3.3MC----
- //    private TermComboElement<PreservationMethod> combo_preservationMethod;
-       //FIXME:3.3MC----
+       private TermComboElement<DefinedTerm> combo_preservationMethod;
  
        private SpecimenCollectionDetailSection section_duplicates;
  
          text_barcode = formFactory.createTextWithLabelElement(formElement, "Barcode", entity.getBarcode(), style);
          text_catalogNumber = formFactory.createTextWithLabelElement(formElement, "Catalog Number", entity.getCatalogNumber(), style);
  
-       //FIXME:3.3MC----
//            try {
//            combo_preservationMethod = formFactory.createTermComboElement(PreservationMethod.class, formElement, "Preservation Method", entity.getPreservationMethod(), style);
- //            } catch (MethodNotSupportedByDerivedUnitTypeException e) {
- //                    // we ignore this
- //            AbstractUtility.info(e.getMessage());
- //            }
-               //FIXME:3.3MC----
              try {
            PreservationMethod preservationMethod = entity.getPreservationMethod();
+             combo_preservationMethod = formFactory.createTermComboElement(DefinedTerm.class, formElement, "Preservation Method", preservationMethod==null?null:preservationMethod.getDefinedMaterialOrMethod(), style);
+               } catch (MethodNotSupportedByDerivedUnitTypeException e) {
+                       // we ignore this
+             AbstractUtility.info(e.getMessage());
+               }
          selection_storedUnder = formFactory.createSelectionElement(TaxonNameBase.class, getConversationHolder(), formElement, "Stored Under", entity.getStoredUnder(), EntitySelectionElement.ALL, style);
  
                try {
                section_source.setEntity(entity);
        }
  
-       /** {@inheritDoc} */
-       @Override
-       public void handleEvent(Object eventSource) {
-               if (eventSource == text_derivedUnitDefinitions) {
-                       getEntity().addDerivedUnitDefinition(
-                                       text_derivedUnitDefinitions.getText(),
-                                       CdmStore.getDefaultLanguage());
-               } else if (eventSource == text_barcode) {
-                       getEntity().setBarcode(text_barcode.getText());
-               } else if (eventSource == text_catalogNumber) {
-                       getEntity().setCatalogNumber(text_catalogNumber.getText());
-                       //FIXME:3.3MC----
- //            } else if (eventSource == combo_preservationMethod) {
- //                    try {
- //                            getEntity().setPreservationMethod(
- //                                            combo_preservationMethod.getSelection());
- //                    } catch (MethodNotSupportedByDerivedUnitTypeException e) {
- //                            AbstractUtility
- //                                            .errorDialog(
- //                                                            "MethodNotSupportedByDerivedUnitTypeException",
- //                                                            this,
- //                                                            "MethodNotSupportedByDerivedUnitTypeException when trying to set preservation method for derive unit",
- //                                                            e);
- //                    }
-                       //FIXME:3.3MC----
-               } else if (eventSource == selection_storedUnder) {
-                       getEntity().setStoredUnder(selection_storedUnder.getEntity());
-               } else if (eventSource == text_exsicatum) {
-                       try {
-                               getEntity().setExsiccatum(text_exsicatum.getText());
-                       } catch (Exception e) {
-                               AbstractUtility.error(this.getClass(), e);
-                       }
-               }
-       }
+     /** {@inheritDoc} */
+     @Override
+     public void handleEvent(Object eventSource) {
+         if (eventSource == text_derivedUnitDefinitions) {
+             getEntity().addDerivedUnitDefinition(text_derivedUnitDefinitions.getText(), CdmStore.getDefaultLanguage());
+         } else if (eventSource == text_barcode) {
+             getEntity().setBarcode(text_barcode.getText());
+         } else if (eventSource == text_catalogNumber) {
+             getEntity().setCatalogNumber(text_catalogNumber.getText());
+         } else if (eventSource == combo_preservationMethod) {
+             try {
+                 PreservationMethod preservationMethod = getEntity().getPreservationMethod();
+                 if(preservationMethod!=null){
+                     preservationMethod.setDefinedMaterialOrMethod(combo_preservationMethod.getSelection());
+                 }
+             } catch (MethodNotSupportedByDerivedUnitTypeException e) {
+                 AbstractUtility
+                         .errorDialog(
+                                 "MethodNotSupportedByDerivedUnitTypeException",
+                                 this,
+                                 "MethodNotSupportedByDerivedUnitTypeException when trying to set preservation method for derive unit",
+                                 e);
+             }
+         } else if (eventSource == selection_storedUnder) {
+             getEntity().setStoredUnder(selection_storedUnder.getEntity());
+         } else if (eventSource == text_exsicatum) {
+             try {
+                 getEntity().setExsiccatum(text_exsicatum.getText());
+             } catch (Exception e) {
+                 AbstractUtility.error(this.getClass(), e);
+             }
+         }
+     }
  }
index 03daf4a9d884ac15cb0ace21d0b01f7fb47c08a8,39fb47ea3f37acc65941849b0dec919031b0ac3b..aa939d85e4d9dfdafb144ceb0775022ec27ea983
@@@ -17,8 -17,8 +17,8 @@@ import eu.etaxonomy.cdm.api.facade.Deri
  import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
  import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
  import eu.etaxonomy.taxeditor.model.AbstractUtility;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
@@@ -36,10 -36,10 +36,10 @@@ public class DerivedUnitFacadeDetailEle
  
        private final DerivedUnitFacadeConfigurator configurator;
  
-       private GeneralDetailSection section_general;
+       private DerivedUnitGeneralDetailSection section_general;
        private GatheringEventDetailSection section_gatheringEvent;
        private DerivedUnitBaseDetailSection section_derivedUnitBase;
-       private FieldObservationDetailSection section_fieldObservation;
+       private FieldUnitDetailSection section_fieldUnit;
  
        /**
         * <p>Constructor for DerivedUnitFacadeDetailElement.</p>
@@@ -65,7 -65,7 +65,7 @@@
                        section_general.setEntity(facade);
                        section_derivedUnitBase.setEntity(facade);
                        section_gatheringEvent.setEntity(facade);
-                       section_fieldObservation.setEntity(facade);
+                       section_fieldUnit.setEntity(facade);
  
                } catch (DerivedUnitFacadeNotSupportedException e) {
                        AbstractUtility.errorDialog("Error", this, "SpecimenFacadeNotSupportedException while inititating SpecimenFacade", e);
                        section_gatheringEvent.dispose();
                        section_gatheringEvent = null;
                }
-               if(section_fieldObservation != null){
-                       removeControl(section_fieldObservation);
-                       section_fieldObservation.dispose();
-                       section_fieldObservation = null;
+               if(section_fieldUnit != null){
+                       removeControl(section_fieldUnit);
+                       section_fieldUnit.dispose();
+                       section_fieldUnit = null;
                }
        }
  
        protected void createControls(ICdmFormElement formElement,
                        DerivedUnit entity, int style) {
  
-               section_general = formFactory.createGeneralDetailSection(getConversationHolder(), formElement, null, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+               section_general = formFactory.createDerivedUnitGeneralDetailSection(getConversationHolder(), formElement, null, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
                section_general.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
                addControl(section_general);
                addElement(section_general);
                addControl(section_gatheringEvent);
                addElement(section_gatheringEvent);
  
-               section_fieldObservation = formFactory.createFieldObservationDetailSection(getConversationHolder(), formElement, null, ExpandableComposite.TWISTIE);
-               section_fieldObservation.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
-               addControl(section_fieldObservation);
-               addElement(section_fieldObservation);
+               section_fieldUnit = formFactory.createFieldUnitDetailSection(getConversationHolder(), formElement, null, ExpandableComposite.TWISTIE);
+               section_fieldUnit.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+               addControl(section_fieldUnit);
+               addElement(section_fieldUnit);
  
                section_derivedUnitBase = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), formElement, null, ExpandableComposite.TWISTIE);
                section_derivedUnitBase.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
        /** {@inheritDoc} */
        @Override
        public void handleEvent(Object eventSource) {
-               if(eventSource == section_derivedUnitBase || eventSource == section_gatheringEvent || eventSource == section_fieldObservation){
+               if(eventSource == section_derivedUnitBase || eventSource == section_gatheringEvent || eventSource == section_fieldUnit){
                        if(getParentElement() instanceof AbstractCdmDetailSection) {
                  ((AbstractCdmDetailSection) getParentElement()).updateTitle();
              }
index bdfaf8d35c7d1cb22cae43bf809eb664fdf9b70c,2044fba398a6ffc9bc90e4f1da61d22b07183442..281918f9c56475d0168d10eb469ea75586ee2fea
@@@ -16,9 -16,10 +16,9 @@@ import eu.etaxonomy.cdm.model.common.La
  import eu.etaxonomy.cdm.model.location.NamedArea;
  import eu.etaxonomy.cdm.model.occurrence.Collection;
  import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.GatheringEventUnitElement;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
  import eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement;
  import eu.etaxonomy.taxeditor.ui.element.PointElement;
@@@ -27,13 -28,14 +27,13 @@@ import eu.etaxonomy.taxeditor.ui.elemen
  import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
  import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
 -import eu.etaxonomy.taxeditor.ui.element.MinMaxTextSection;
  
  /**
   * @author n.hoffmann
   * @created Dec 16, 2010
   * @version 1.0
   */
- public class GeneralDetailElement extends
+ public class DerivedUnitGeneralDetailElement extends
                AbstractCdmDetailElement<DerivedUnitFacade> {
  
        private ToggleableTextElement toggleableText_titleCache;
        private TextWithLabelElement text_collectingNumber;
        private EntitySelectionElement<Collection> selection_collection;
        private TextWithLabelElement text_accessionNumber;
+       
  
        /**
         * @param formFactory
         * @param formElement
         */
-       public GeneralDetailElement(CdmFormFactory formFactory,
+       public DerivedUnitGeneralDetailElement(CdmFormFactory formFactory,
                        ICdmFormElement formElement) {
                super(formFactory, formElement);
        }
index 56b5bbf68d116bf23f70ce53c22ae75f9a5bbd92,6b48d0796e3e2f732966c6e8f3170518214a58c0..0d4c60bdb562b3f3f75996000c3f73643f95fd5c
@@@ -14,8 -14,8 +14,8 @@@ import org.eclipse.jface.viewers.ISelec
  
  import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
  import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
  
@@@ -24,7 -24,7 +24,7 @@@
   * @created Dec 16, 2010
   * @version 1.0
   */
- public class GeneralDetailSection extends AbstractCdmDetailSection<DerivedUnitFacade> implements IDerivedUnitFacadeDetailSection{
+ public class DerivedUnitGeneralDetailSection extends AbstractCdmDetailSection<DerivedUnitFacade> implements IDerivedUnitFacadeDetailSection{
  
        /**
         * @param formFactory
@@@ -33,7 -33,7 +33,7 @@@
         * @param selectionProvider
         * @param style
         */
-       public GeneralDetailSection(CdmFormFactory formFactory,
+       public DerivedUnitGeneralDetailSection(CdmFormFactory formFactory,
                        ConversationHolder conversation, ICdmFormElement parentElement,
                        ISelectionProvider selectionProvider, int style) {
                super(formFactory, conversation, parentElement, selectionProvider, style);
@@@ -53,7 -53,7 +53,7 @@@
         */
        @Override
        protected AbstractCdmDetailElement<DerivedUnitFacade> createCdmDetailElement(AbstractCdmDetailSection<DerivedUnitFacade> parentElement, int style) {
-           return formFactory.createGeneralDetailElement(parentElement);
+           return formFactory.createDerivedUnitGeneralDetailElement(parentElement);
        }
  
  }
index 7794813da9d893183d726826b610d91928b71e20,faa92f9b7df6be93f9112520209b93c1dd844691..6ee963ea175b87c1a64cfa2945aa3858a5d7bc32
@@@ -12,22 -12,23 +12,23 @@@ package eu.etaxonomy.taxeditor.ui.secti
  
  import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
  import eu.etaxonomy.cdm.model.common.DefinedTerm;
+ import eu.etaxonomy.cdm.model.common.TermType;
  import eu.etaxonomy.taxeditor.store.CdmStore;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement;
  import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
  
  /**
-  * <p>FieldObservationDetailElement class.</p>
+  * <p>FieldUnitDetailElement class.</p>
   *
   * @author n.hoffmann
   * @created Jun 17, 2010
   * @version 1.0
   */
- public class FieldObservationDetailElement extends AbstractCdmDetailElement<DerivedUnitFacade> {
+ public class FieldUnitDetailElement extends AbstractCdmDetailElement<DerivedUnitFacade> {
  
        private TextWithLabelElement text_ecology;
  
  
        private NumberWithLabelElement number_individualCount;
  
-       private TermComboElement<DefinedTerm> combo_sex;
+       private TermComboElement<DefinedTerm> combo_kindOfUnit;
  
        private TermComboElement<DefinedTerm> combo_lifeStage;
  
+       private TermComboElement<DefinedTerm> combo_sex;
        /**
-        * <p>Constructor for FieldObservationDetailElement.</p>
+        * <p>Constructor for FieldUnitDetailElement.</p>
         *
         * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
         * @param formElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
         */
-       public FieldObservationDetailElement(CdmFormFactory formFactory,
+       public FieldUnitDetailElement(CdmFormFactory formFactory,
                        ICdmFormElement formElement) {
                super(formFactory, formElement);
        }
                text_fieldNotes = formFactory.createTextWithLabelElement(formElement, "Field Notes", entity.getFieldNotes(), style);
  
                number_individualCount = formFactory.createNumberTextWithLabelElement(formElement, "Individual Count", entity.getIndividualCount(), style);
-               //FIXME:3.3MC----
-               // Need to make sure that the hard coded terms in DefinedTerm have a term type (currently null)
-               //combo_lifeStage = formFactory.createDefinedTermComboElement(TermType.Stage, formElement, "Life Stage", entity.getLifeStage(), style);
-               //combo_sex = formFactory.createDefinedTermComboElement(TermType.Sex, formElement, "Sex", entity.getSex(),style);
-               //FIXME:3.3MC----
+               combo_kindOfUnit= formFactory.createDefinedTermComboElement(TermType.KindOfUnit, formElement, "Kind Of Unit", entity.getKindOfUnit(), style);
+               combo_lifeStage = formFactory.createDefinedTermComboElement(TermType.Stage, formElement, "Life Stage", entity.getLifeStage(), style);
+               combo_sex = formFactory.createDefinedTermComboElement(TermType.Sex, formElement, "Sex", entity.getSex(),style);
        }
  
        /** {@inheritDoc} */
@@@ -90,6 -91,9 +91,9 @@@
                else if(eventSource == number_individualCount){
                        getEntity().setIndividualCount(number_individualCount.getInteger());
                }
+               else if(eventSource == combo_kindOfUnit){
+                   getEntity().setKindOfUnit(combo_kindOfUnit.getSelection());
+               }
                else if(eventSource == combo_lifeStage){
                        getEntity().setLifeStage(combo_lifeStage.getSelection());
                }
index 925b77f0428e8aa9f6b926f8b93425fec6231a79,f1f43d42b4ef3fc40b2e9a7b4dd5f353a756ee00..cfe0c3e28f265f81c1a075bddd2a16a8dd0ca16d
@@@ -14,22 -14,21 +14,21 @@@ import org.eclipse.jface.viewers.ISelec
  
  import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
  import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
  
  /**
-  * <p>FieldObservationDetailSection class.</p>
+  * <p>FieldUnitDetailSection class.</p>
   *
   * @author n.hoffmann
   * @created Jun 17, 2010
-  * @version 1.0
   */
- public class FieldObservationDetailSection extends AbstractCdmDetailSection<DerivedUnitFacade> implements IDerivedUnitFacadeDetailSection{
+ public class FieldUnitDetailSection extends AbstractCdmDetailSection<DerivedUnitFacade> implements IDerivedUnitFacadeDetailSection{
  
        /**
-        * <p>Constructor for FieldObservationDetailSection.</p>
+        * <p>Constructor for FieldUnitDetailSection.</p>
         *
         * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
         * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
@@@ -37,7 -36,7 +36,7 @@@
         * @param selectionProvider a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
         * @param style a int.
         */
-       public FieldObservationDetailSection(CdmFormFactory formFactory, ConversationHolder conversation,
+       public FieldUnitDetailSection(CdmFormFactory formFactory, ConversationHolder conversation,
                        ICdmFormElement parentElement,
                        ISelectionProvider selectionProvider, int style) {
                super(formFactory, conversation, parentElement, selectionProvider, style);
@@@ -46,7 -45,7 +45,7 @@@
        /** {@inheritDoc} */
        @Override
        public String getHeading() {
-               return "Field Observation Details";
+               return "Field Unit Details";
        }
  
        /* (non-Javadoc)
@@@ -54,6 -53,6 +53,6 @@@
         */
        @Override
        protected AbstractCdmDetailElement<DerivedUnitFacade> createCdmDetailElement(AbstractCdmDetailSection<DerivedUnitFacade> parentElement, int style) {
-           return formFactory.createFieldObservationDetailElement(parentElement);
+           return formFactory.createFieldUnitDetailElement(parentElement);
        }
  }
index 0000000000000000000000000000000000000000,21d3d1e68d03a8abf9b0f0cf47b3f4734f70aed8..e2049f53103ac30938b8d9579337c36c8ee5e575
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,113 +1,113 @@@
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+ // $Id$
+ /**
+  * Copyright (C) 2013 EDIT
+  * European Distributed Institute of Taxonomy
+  * http://www.e-taxonomy.eu
+  *
+  * The contents of this file are subject to the Mozilla Public License Version 1.1
+  * See LICENSE.TXT at the top of this package for the full license terms.
+  */
+ package eu.etaxonomy.taxeditor.ui.section.occurrence;
+ import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
+ import eu.etaxonomy.cdm.model.agent.AgentBase;
+ import eu.etaxonomy.cdm.model.common.LanguageString;
+ import eu.etaxonomy.cdm.model.location.NamedArea;
+ import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
++import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
+ import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement;
+ import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+ import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
+ import eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement;
+ import eu.etaxonomy.taxeditor.ui.element.PointElement;
+ import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
+ import eu.etaxonomy.taxeditor.ui.element.TimePeriodElement;
+ import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
+ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
+ import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
+ /**
+  * @author pplitzner
+  * @date 05.11.2013
+  *
+  */
+ public class FieldUnitGeneralDetailElement extends AbstractCdmDetailElement<DerivedUnitFacade> {
+     private ToggleableTextElement toggleableText_titleCache;
+     private EnumComboElement<SpecimenOrObservationType> combo_specorobstype;
+     private EntitySelectionElement<NamedArea> selection_country;
+     private LanguageStringWithLabelElement languageText_locality;
+     private PointElement element_point;
+     private NumberWithLabelElement number_elevation;
+     private TimePeriodElement element_date;
+     private EntitySelectionElement<AgentBase> selection_collector;
+     private TextWithLabelElement text_collectingNumber;
+     /**
+      * @param formFactory
+      * @param formElement
+      */
+     public FieldUnitGeneralDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
+         super(formFactory, formElement);
+     }
+     /*
+      * (non-Javadoc)
+      *
+      * @see
+      * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#createControls
+      * (eu.etaxonomy.taxeditor.forms.ICdmFormElement, java.lang.Object, int)
+      */
+     @Override
+     protected void createControls(ICdmFormElement formElement, DerivedUnitFacade entity, int style) {
+         toggleableText_titleCache = formFactory.createToggleableTextField(formElement, "Title Cache",
+                 entity.getTitleCache(), entity.isProtectedTitleCache(), style);
+         combo_specorobstype = formFactory.createEnumComboElement(SpecimenOrObservationType.class, formElement, style);
+         combo_specorobstype.setSelection(entity.getType());
+         selection_country = formFactory.createSelectionElement(NamedArea.class, getConversationHolder(), formElement,
+                 "Country", entity.getCountry(), EntitySelectionElement.NOTHING, style);
+         languageText_locality = formFactory.createLanguageStringWithLabelElement(formElement, "Locality",
+                 entity.getLocality(), style);
+         element_point = formFactory.createPointElement(formElement, entity.getExactLocation(), style);
+         element_date = formFactory.createTimePeriodElement(formElement, "Date", entity.getGatheringPeriod(), style);
+         selection_collector = formFactory.createSelectionElement(AgentBase.class, getConversationHolder(), formElement,
+                 "Collector", entity.getCollector(), EntitySelectionElement.ALL, style);
+         text_collectingNumber = formFactory.createTextWithLabelElement(formElement, "Collecting number",
+                 entity.getFieldNumber(), style);
+     }
+     /*
+      * (non-Javadoc)
+      *
+      * @see
+      * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleEvent(java
+      * .lang.Object)
+      */
+     @Override
+     public void handleEvent(Object eventSource) {
+         if (eventSource == toggleableText_titleCache) {
+             getEntity().setTitleCache(toggleableText_titleCache.getText(), toggleableText_titleCache.getState());
+         } else if (eventSource == selection_country) {
+             getEntity().setCountry(selection_country.getSelection());
+         } else if (eventSource == languageText_locality) {
+             LanguageString locality = languageText_locality.getLanguageString();
+             getEntity().setLocality(locality);
+         } else if (eventSource == element_point) {
+             getEntity().setExactLocation(element_point.getPoint());
+         } else if (eventSource == number_elevation) {
+             getEntity().setAbsoluteElevation(number_elevation.getInteger());
+         } else if (eventSource == element_date) {
+             getEntity().setGatheringPeriod(element_date.getTimePeriod());
+         } else if (eventSource == selection_collector) {
+             getEntity().setCollector(selection_collector.getSelection());
+         } else if (eventSource == text_collectingNumber) {
+             getEntity().setFieldNumber(text_collectingNumber.getText());
+         } else if (eventSource == combo_specorobstype) {
+             getEntity().setType(combo_specorobstype.getSelection());
+         }
+         if (eventSource != toggleableText_titleCache) {
+             toggleableText_titleCache.setText(getEntity().getTitleCache());
+         }
+     }
+ }
index 0000000000000000000000000000000000000000,589f2cfc32abac96488ab4bba91fa8faf8ea54fd..9c9782f498b0683f3e7b78fe0200706fe145d1f2
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,58 +1,58 @@@
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+ // $Id$
+ /**
+ * Copyright (C) 2013 EDIT
+ * European Distributed Institute of Taxonomy
+ * http://www.e-taxonomy.eu
+ *
+ * The contents of this file are subject to the Mozilla Public License Version 1.1
+ * See LICENSE.TXT at the top of this package for the full license terms.
+ */
+ package eu.etaxonomy.taxeditor.ui.section.occurrence;
+ import org.eclipse.jface.viewers.ISelectionProvider;
+ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+ import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
++import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
+ import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
+ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
+ /**
+  * @author pplitzner
+  * @date 05.11.2013
+  *
+  */
+ public class FieldUnitGeneralDetailSection extends AbstractCdmDetailSection<DerivedUnitFacade> implements IDerivedUnitFacadeDetailSection{
+     /**
+      * @param formFactory
+      * @param conversation
+      * @param parentElement
+      * @param selectionProvider
+      * @param style
+      */
+     public FieldUnitGeneralDetailSection(CdmFormFactory formFactory,
+             ConversationHolder conversation, ICdmFormElement parentElement,
+             ISelectionProvider selectionProvider, int style) {
+         super(formFactory, conversation, parentElement, selectionProvider, style);
+     }
+     /* (non-Javadoc)
+      * @see eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection#getHeading()
+      */
+     @Override
+     public String getHeading() {
+         return "General";
+     }
+     /* (non-Javadoc)
+      * @see eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection#createCdmDetailElement(eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection, int)
+      */
+     @Override
+     protected AbstractCdmDetailElement<DerivedUnitFacade> createCdmDetailElement(AbstractCdmDetailSection<DerivedUnitFacade> parentElement, int style) {
+         return formFactory.createFieldUnitGeneralDetailElement(parentElement);
+     }
+ }
index 0000000000000000000000000000000000000000,5d2624b7a1dcd82cb6dd201ff6033200ee001e8b..a36c9975b11722a5222d5aae42879e85516875c8
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,57 +1,57 @@@
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+ // $Id$
+ /**
+ * Copyright (C) 2007 EDIT
+ * European Distributed Institute of Taxonomy
+ * http://www.e-taxonomy.eu
+ *
+ * The contents of this file are subject to the Mozilla Public License Version 1.1
+ * See LICENSE.TXT at the top of this package for the full license terms.
+ */
+ package eu.etaxonomy.taxeditor.ui.section.occurrence;
+ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+ import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
++import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
+ import eu.etaxonomy.taxeditor.ui.element.AbstractCdmEntityWizardPage;
+ import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
+ /**
+  * @author n.hoffmann
+  * @created Dec 15, 2010
+  * @version 1.0
+  */
+ public class FieldUnitWizardPage extends AbstractCdmEntityWizardPage<DerivedUnitFacade> {
+       /**
+        * @param formFactory
+        * @param conversation
+        * @param entity
+        */
+       public FieldUnitWizardPage(CdmFormFactory formFactory,
+                       ConversationHolder conversation, DerivedUnitFacade entity) {
+               super(formFactory, conversation, entity);
+               setTitle("Field Unit Details");
+               setPageComplete(true);
+       }
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.ui.forms.AbstractCdmEntityWizardPage#checkComplete()
+        */
+       @Override
+       protected void checkComplete() {
+               setPageComplete(true);
+       }
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.forms.AbstractCdmEntityWizardPage#createElement(eu.etaxonomy.taxeditor.forms.ICdmFormElement)
+        */
+       @Override
+       public AbstractCdmDetailElement<DerivedUnitFacade> createElement(ICdmFormElement rootElement) {
+               FieldUnitDetailElement detailElement = formFactory.createFieldUnitDetailElement(rootElement);
+               detailElement.setEntity(getEntity());
+               return detailElement;
+       }
+ }
index 667cc43cc578e1aa103faea76cee9f5e5aefd735,5706de506a24193742ce81c2f697ff017bc3de8b..c468b2f43dab6dfa5728a22566b1765aa865e1be
@@@ -1,9 -1,9 +1,9 @@@
  // $Id$
  /**
   * Copyright (C) 2007 EDIT
-  * European Distributed Institute of Taxonomy 
+  * European Distributed Institute of Taxonomy
   * http://www.e-taxonomy.eu
-  * 
+  *
   * The contents of this file are subject to the Mozilla Public License Version 1.1
   * See LICENSE.TXT at the top of this package for the full license terms.
   */
@@@ -23,16 -23,17 +23,17 @@@ import eu.etaxonomy.cdm.model.agent.Tea
  import eu.etaxonomy.cdm.model.reference.Reference;
  import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
  import eu.etaxonomy.cdm.model.reference.ReferenceType;
+ import eu.etaxonomy.taxeditor.model.AbstractUtility;
  import eu.etaxonomy.taxeditor.model.AuthorHelper;
- import eu.etaxonomy.taxeditor.store.StoreUtil;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
  import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.IErrorIntolerableElement;
  import eu.etaxonomy.taxeditor.ui.element.IExceptionHandler;
  import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
  import eu.etaxonomy.taxeditor.ui.element.TimePeriodElement;
+ import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
  import eu.etaxonomy.taxeditor.ui.element.UriWithLabelElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractIdentifiableEntityDetailElement;
  import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
   * <p>
   * ReferenceBaseDetailElement class.
   * </p>
-  * 
+  *
   * @author n.hoffmann
   * @created Mar 2, 2010
   * @version 1.0
   */
  public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElement<Reference>
                implements IErrorIntolerableElement, IExceptionHandler {
-       
+     private ToggleableTextElement toggleableAbbrevCache;
        private TextWithLabelElement text_edition;
        private TextWithLabelElement text_editor;
        private TextWithLabelElement text_isbn;
@@@ -60,8 -63,9 +63,9 @@@
        private TextWithLabelElement text_referenceAbstract;
        private TextWithLabelElement text_series;
        private TextWithLabelElement text_seriesPart;
-       private TextWithLabelElement text_title;
        private TextWithLabelElement text_volume;
+       private TextWithLabelElement text_abbrevTitle;
+       private TextWithLabelElement text_title;
        private UriWithLabelElement text_uri;
        private EntitySelectionElement<AgentBase> selection_authorTeam;
        private TimePeriodElement element_timePeriod;
@@@ -75,7 -79,7 +79,7 @@@
         * <p>
         * Constructor for ReferenceBaseDetailElement.
         * </p>
-        * 
+        *
         * @param cdmFormFactory
         *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
         *            object.
@@@ -92,7 -96,7 +96,7 @@@
  
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.forms.section.cdmdetail.AbstractCdmDetailComposite
         * #createControl(org.eclipse.swt.widgets.Composite, int)
                                "Reference Cache", entity.getTitleCache(),
                                entity.isProtectedTitleCache(), style);
  
+               toggleableAbbrevCache = formFactory.createToggleableTextField(formElement,
+                       "Abbrev. Cache", entity.getAbbrevTitleCache(),
+                       entity.isProtectedAbbrevTitleCache(), style);
                combo_referenceType = formFactory.createEnumComboElement(ReferenceType.class,
                                                formElement, style);
  
                // title
                text_title = formFactory.createTextWithLabelElement(formElement,
                                "Title", entity.getTitle(), style);
+               // abbreviated title
+               text_abbrevTitle = formFactory.createTextWithLabelElement(formElement,
+                       "Abbrev. Title", entity.getAbbrevTitle(), style);
  
                // author team
                selection_authorTeam = formFactory
  
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.forms.section.cdmdetail.AbstractCdmDetailComposite
         * #updateContent()
                // setEnabled(getEntity().isProtectedTitleCache(), Arrays.asList(new
                // Object[]{text_cache}));
                toggleable_cache.setEnabled(getEntity().isProtectedTitleCache());
-               setIrrelevant(toggleable_cache.getState(),
-                               Arrays.asList(new Object[] { toggleable_cache }));
+               toggleableAbbrevCache.setEnabled(getEntity().isProtectedAbbrevTitleCache());
+         setIrrelevant(toggleable_cache.getState(), Arrays.asList(new Object[] { toggleable_cache }));
+         setIrrelevant(toggleableAbbrevCache.getState(), Arrays.asList(new Object[] { toggleableAbbrevCache}));
        }
  
        /**
         * Creates an in reference for reference types that do hav this.
-        * 
+        *
         * @param element
         * @param referenceType
         * @param reference
  
        /**
         * Creates additional controls to edit a generic reference
-        * 
+        *
         * @param element
         * @param reference
         * @param listener
  
        /**
         * Creates additional controls to edit a publication
-        * 
+        *
         * @param element
         * @param reference
         * @param listener
  
        /**
         * Creates additional controls to edit a section
-        * 
+        *
         * @param element
         * @param reference
         * @param style
  
        /**
         * Creates additional controls to edit a volume
-        * 
+        *
         * @param element
         * @param reference
         * @param style
        }
  
        /**
-        * 
+        *
         * @param element
         * @param referenceType
         * @param reference
                // textfields
                else if (eventSource == toggleable_cache) {
                        handleToggleableCacheField();
+               }
+               else if (eventSource == toggleableAbbrevCache) {
+                   handleToggleableAbbrevTitleField();
                } else if (eventSource == text_edition) {
                        getEntity().setEdition(text_edition.getText());
                } else if (eventSource == text_editor) {
                        getEntity().setSeriesPart(text_seriesPart.getText());
                } else if (eventSource == text_title) {
                        getEntity().setTitle(text_title.getText());
+                       toggleable_cache.setText(text_title.getText());
+               } else if (eventSource == text_abbrevTitle) {
+                   getEntity().setAbbrevTitle(text_abbrevTitle.getText());
+                   toggleableAbbrevCache.setText(text_abbrevTitle.getText());
                } else if (eventSource == text_uri) {
                        try {
                                getEntity().setUri(text_uri.getUri());
                        } catch (URISyntaxException e) {
-                               StoreUtil.warningDialog("Invlid URI", getClass(),
+                               AbstractUtility.warningDialog("Invalid URI", getClass(),
                                                e.getLocalizedMessage());
                        }
                } else if (eventSource == text_volume) {
                        getEntity().setVolume(text_volume.getText());
                }
  
-               else if (eventSource != toggleable_cache) {
+               if (eventSource != text_title && eventSource != text_abbrevTitle) {
+                   // set abbrev title cache to null to force new generation
+                   // for the standard title cache this is done by a PropertyChangeListener registered
+                   // in IdentifiableEntity.initListeners()
+                   if(!getEntity().isProtectedAbbrevTitleCache()){
+                       getEntity().setAbbrevTitleCache(null, getEntity().isProtectedAbbrevTitleCache());
+                   }
                        toggleable_cache.setText(getEntity().getTitleCache());
+                       toggleableAbbrevCache.setText(getEntity().getAbbrevTitleCache());
                }
  
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
        }
  
+     @Override
+     public void updateToggleableCacheField() {
+         if (!getEntity().isProtectedTitleCache()) {
+             toggleable_cache.setText(getEntity().generateTitle());
+         }
+         if (!getEntity().isProtectedAbbrevTitleCache()) {
+             toggleableAbbrevCache.setText(getEntity().generateAbbrevTitle());
+         }
+     }
+     protected void handleToggleableAbbrevTitleField() {
+         boolean pushedAbbrevState = toggleableAbbrevCache.getState();
+         getEntity().setAbbrevTitleCache(toggleableAbbrevCache.getText(), pushedAbbrevState);
+         setIrrelevant(pushedAbbrevState, Arrays.asList(new Object[] { toggleableAbbrevCache, toggleable_cache, text_title }));
+         updateToggleableCacheField();
+     }
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleException
         * (eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent)
  
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see eu.etaxonomy.taxeditor.forms.IExceptionHandler#clearException()
         */
        /** {@inheritDoc} */
  
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.forms.IErrorIntolerableElement#addExceptionHandler
         * (eu.etaxonomy.taxeditor.forms.IExceptionHandler)
  
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.forms.IErrorIntolerableElement#removeExceptionHandler
         * (eu.etaxonomy.taxeditor.forms.IExceptionHandler)
  
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.forms.IErrorIntolerableElement#exceptionOccurred
         * (eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent)
index a667cf9cc4fed19b93a93447770beeec5f2cf24f,6a8f53dbb14757c01163d7eade3a8e27e707f26d..9f0522b855fa129941af4ab9b6ed1ec2be7febd2
@@@ -17,9 -17,9 +17,9 @@@ import eu.etaxonomy.cdm.hibernate.Hiber
  import eu.etaxonomy.cdm.model.name.NonViralName;
  import eu.etaxonomy.cdm.model.reference.Reference;
  import eu.etaxonomy.cdm.model.taxon.TaxonBase;
- import eu.etaxonomy.taxeditor.store.StoreUtil;
+ import eu.etaxonomy.taxeditor.model.AbstractUtility;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.ITaxonBaseDetailSection;
@@@ -78,7 -78,7 +78,7 @@@ public class ReferenceDetailSection ext
        @Override
        public void refresh() {
                super.refresh();
-               StoreUtil.refreshDetailsViewer();
+               AbstractUtility.refreshDetailsViewer();
        }
  
        /* (non-Javadoc)
index ca8426501fd9f37f5b970fda5cb82842028963a7,8e644d609e016c13415200dee58e420fa4a9ef21..6b573f3c21d4844545846f9de0129a37e870ca7b
@@@ -1,5 -1,5 +1,5 @@@
  /**
-  * 
+  *
   */
  package eu.etaxonomy.taxeditor.ui.section.supplemental;
  
@@@ -8,12 -8,11 +8,11 @@@ import java.util.Collection
  import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
  import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
  import eu.etaxonomy.cdm.model.common.IdentifiableSource;
+ import eu.etaxonomy.cdm.model.common.OriginalSourceType;
+ import eu.etaxonomy.cdm.model.media.Media;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionSection;
- import eu.etaxonomy.cdm.model.common.OriginalSourceType;
- import eu.etaxonomy.taxeditor.ui.dialog.selection.OriginalSourceTypeSelectionDialog;;
  
  /**
   * <p>SourceSection class.</p>
@@@ -39,7 -38,16 +38,16 @@@ public class SourceSection extends Abst
        /** {@inheritDoc} */
        @Override
        public IdentifiableSource createNewElement() {
-               return IdentifiableSource.NewInstance(OriginalSourceType.PrimaryTaxonomicSource);
+           IIdentifiableEntity entity = getEntity();
+           OriginalSourceType type;
+           if(entity instanceof Media) {
+               type = OriginalSourceType.PrimaryMediaSource;
+         }
+           else{
+               //default
+               type = OriginalSourceType.PrimaryTaxonomicSource;
+           }
+           return IdentifiableSource.NewInstance(type);
        }
  
        /** {@inheritDoc} */
index c166c9d2a1c2f31c544b96816a715411058033d1,525d3ba3ff770f340f1f4562dd496fb69e94ee66..61da0e80171d78d380dc18b02b2fd0cae2a97f37
@@@ -1,9 -1,9 +1,9 @@@
  // $Id$
  /**
   * Copyright (C) 2007 EDIT
-  * European Distributed Institute of Taxonomy 
+  * European Distributed Institute of Taxonomy
   * http://www.e-taxonomy.eu
-  * 
+  *
   * The contents of this file are subject to the Mozilla Public License Version 1.1
   * See LICENSE.TXT at the top of this package for the full license terms.
   */
@@@ -18,9 -18,9 +18,9 @@@ import org.eclipse.swt.SWT
  import eu.etaxonomy.cdm.model.reference.Reference;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
  import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
  import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractIdentifiableEntityDetailElement;
  import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
@@@ -29,7 -29,7 +29,7 @@@
   * <p>
   * TaxonBaseDetailElement class.
   * </p>
-  * 
+  *
   * @author n.hoffmann
   * @created Feb 26, 2010
   * @version 1.0
@@@ -48,17 -48,17 +48,17 @@@ public class TaxonBaseDetailElement ext
  
        private CheckboxElement checkbox_unplaced;
  
+       private CheckboxElement checkbox_published;
        /**
         * <p>
         * Constructor for TaxonBaseDetailElement.
         * </p>
-        * 
+        *
         * @param cdmFormFactory
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
-        *            object.
+        *        a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
         * @param formElement
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-        *            object.
+        *        a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
         * @param style
         *            a int.
         */
                                entity.isProtectedTitleCache(), style);
  
                selection_secundum = formFactory
-               .createSelectionElement(Reference.class,
+                       .createSelectionElement(Reference.class,
                                getConversationHolder(), formElement, "Secundum",
                                entity.getSec(), EntitySelectionElement.ALL,
                                style);
-               
                text_appendedPhrase = formFactory.createTextWithLabelElement(
                                formElement, "Appended Phrase", entity.getAppendedPhrase(),
                                SWT.NULL);
                checkbox_useNameCache = formFactory.createCheckbox(formElement,
                                "Exclude Authorship", entity.isUseNameCache(), style);
-               
                if (entity instanceof Taxon) {
                        checkbox_excluded = formFactory.createCheckbox(formElement,
                                        "Taxon is excluded", ((Taxon) entity).isExcluded(), style);
                        checkbox_unplaced = formFactory.createCheckbox(formElement,
                                        "Taxon is unplaced", ((Taxon) entity).isUnplaced(), style);
                }
-               
                checkbox_doubtful = formFactory.createCheckbox(formElement,
                                entity.getClass().getSimpleName() + " is doubtful", entity.isDoubtful(), style);
+               
+               checkbox_published = formFactory.createCheckbox(formElement,
+                       "Taxon is published", ((TaxonBase) entity).isPublish(), style);
        }
  
        /** {@inheritDoc} */
                setIrrelevant(toggleable_cache.getState(),
                                Arrays.asList(new Object[] { toggleable_cache }));
        }
-       
        @Override
        protected void handleTitleCacheRelevantChange(PropertyChangeEvent event) {
                String title = getEntity().generateTitle();
        /** {@inheritDoc} */
        @Override
        public void handleEvent(Object eventSource) {
-               if (eventSource.equals(toggleable_cache)) {
+               if (eventSource== toggleable_cache) {
                        handleToggleableCacheField();
-               } else if (eventSource.equals(checkbox_doubtful)) {
+               } else if (eventSource == checkbox_doubtful) {
                        getEntity().setDoubtful(checkbox_doubtful.getSelection());
-               } else if (eventSource.equals(checkbox_useNameCache)) {
+               } else if (eventSource == checkbox_useNameCache) {
                        getEntity().setUseNameCache(checkbox_useNameCache.getSelection());
-               } else if (eventSource.equals(selection_secundum)) {
+               } else if (eventSource == selection_secundum) {
                        getEntity().setSec(selection_secundum.getSelection());
-               } else if (eventSource.equals(text_appendedPhrase)) {
+               } else if (eventSource == text_appendedPhrase) {
                        getEntity().setAppendedPhrase(text_appendedPhrase.getText());
                } else if (eventSource == checkbox_excluded) {
                        ((Taxon) getEntity()).setExcluded(checkbox_excluded.getSelection());
                } else if (eventSource == checkbox_unplaced) {
-                       ((Taxon) getEntity()).setUnplaced(checkbox_unplaced.getSelection());
+                   ((Taxon) getEntity()).setUnplaced(checkbox_unplaced.getSelection());
+               } else if (eventSource == checkbox_published) {
+                   ((Taxon) getEntity()).setPublish(checkbox_published.getSelection());
                }
        }
  }
index 566d710cce553a6bf225685241c4b2e23c4d3f5b,9217a71d89af8f5b2854ee53df2ad55f671b88d0..d3e0f7fcb75d4b51395f0d1bf911671e89aa518d
@@@ -1,8 -1,8 +1,8 @@@
  /**\r
  * Copyright (C) 2011 EDIT\r
 -* European Distributed Institute of Taxonomy \r
 +* European Distributed Institute of Taxonomy\r
  * http://www.e-taxonomy.eu\r
 -* \r
 +*\r
  * The contents of this file are subject to the Mozilla Public License Version 1.1\r
  * See LICENSE.TXT at the top of this package for the full license terms.\r
  */\r
@@@ -14,7 -14,6 +14,7 @@@ import java.util.List
  import java.util.ListIterator;\r
  import java.util.Map;\r
  import java.util.Set;\r
 +\r
  import org.apache.log4j.Logger;\r
  import org.eclipse.swt.events.SelectionEvent;\r
  import org.eclipse.swt.events.SelectionListener;\r
@@@ -29,24 -28,24 +29,24 @@@ import eu.etaxonomy.cdm.model.descripti
  import eu.etaxonomy.taxeditor.editor.UsageTermCollection;\r
  import eu.etaxonomy.taxeditor.store.CdmStore;\r
  import eu.etaxonomy.taxeditor.store.TermStore;\r
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;\r
  import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;\r
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;\r
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;\r
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;\r
  \r
 - \r
 +\r
  /**\r
   * The context manager mediates context start/stop and workbench shutdowns to all registered listeners.\r
   *\r
 - * @author a.theys    \r
 + * @author a.theys\r
   * @created mar 13, 2012\r
   * @version 1.0\r
   */\r
  public class UseRecordDetailElement extends\r
                AbstractCdmDetailElement<CategoricalData> implements SelectionListener {\r
  \r
-       private static final Logger logger = Logger\r
-                       .getLogger(UseRecordDetailElement.class);\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(UseRecordDetailElement.class);\r
  \r
        private TermComboElement<State> combo_UseCategory;\r
        private TermComboElement<State> combo_UseSubCategory;\r
                combo_HumanGroup.addSelectionListener(this);\r
                combo_EthnicGroup = formFactory.createTermComboElement(DefinedTerm.class, this, UsageTermCollection.ethnicGroupLabel, null, style);\r
                combo_Country   = formFactory.createTermComboElement(DefinedTerm.class, this, UsageTermCollection.countryLabel, null, style);\r
 -              \r
 +\r
  \r
                List<State> termsUseCategory = setUseCategoryComboTerms(TermStore.getTerms(State.class, null, false));\r
                combo_UseCategory.setTerms(termsUseCategory);\r
                combo_UseCategory.setSelection(stateSelection(UsageTermCollection.useCategoryVocabularyLabel));\r
 -              \r
 +\r
                List<State> termsSubCategory = setUseCategoryComboTerms(TermStore.getTerms(State.class, null, false), combo_UseCategory.getSelection());\r
 -              \r
 +\r
                if (termsSubCategory != null) {\r
                        combo_UseSubCategory.setTerms(termsSubCategory);\r
                        combo_UseSubCategory.setSelection(stateSelection(UsageTermCollection.useSubCategoryVocabularyLabel));\r
                else {\r
                        combo_UseSubCategory.setEnabled(false);\r
                }\r
 -              \r
 +\r
                List<DefinedTerm> plantPartsToAdd = setModifierComboTerms(TermStore.getTerms(DefinedTerm.class, null, false), UsageTermCollection.plantPartLabel);\r
                combo_PlantPart.setTerms(plantPartsToAdd);\r
                combo_PlantPart.setSelection(modifierSelection(UsageTermCollection.plantPartLabel));\r
 -              \r
 +\r
                List<DefinedTerm> countriesToAdd = setModifierComboTerms(TermStore.getTerms(DefinedTerm.class, null, false), UsageTermCollection.countryLabel);\r
                combo_Country.setTerms(countriesToAdd);\r
                combo_Country.setSelection(modifierSelection(UsageTermCollection.countryLabel));\r
 -              \r
 +\r
                List<DefinedTerm> humanGroupToAdd = setModifierComboTerms(TermStore.getTerms(DefinedTerm.class, null, false), UsageTermCollection.humanGroupLabel);\r
                combo_HumanGroup.setTerms(humanGroupToAdd);\r
                combo_HumanGroup.setSelection(modifierSelection(UsageTermCollection.humanGroupLabel));\r
 -              \r
 +\r
                List<DefinedTerm> ethnicGroupToAdd = setEthnicGroupComboTerms(TermStore.getTerms(DefinedTerm.class, null, false), combo_HumanGroup.getSelection());\r
                if (ethnicGroupToAdd != null) {\r
                        combo_EthnicGroup.setTerms(ethnicGroupToAdd);\r
                        return null;\r
                }\r
                return null;\r
 -              \r
 +\r
        }\r
 -      \r
 +\r
        /**\r
         * Returns the selected state\r
         * @param comboCategory\r
                                                        return statedata.getState();\r
                                                }\r
                                        }\r
 -                              }                               \r
 +                              }\r
                        }\r
                }\r
                else {\r
                        return null;\r
                }\r
                return null;\r
 -              \r
 +\r
        }\r
 -      \r
 +\r
        /**\r
         * This function sets the combo terms (Besides EthnicGroup\r
         * @param listOfTerms\r
                                termsToAdd.add(term);\r
                        }\r
                }\r
 -              \r
 +\r
                return termsToAdd;\r
        }\r
 -      \r
 +\r
  \r
        /**\r
         * This function sets the Use Category combo term\r
                        State selectedUseCategory) {\r
                List<State> termsToAdd = new ArrayList<State>();\r
                if (combo_UseCategory.getSelection() != null) {\r
 -                      \r
 +\r
                        for (State term : listOfTerms) {\r
                                if ((term.getPartOf() != null) && (term.getPartOf().getTitleCache().equals(selectedUseCategory.getTitleCache()))) {\r
                                        termsToAdd.add(term);\r
                                else if ((term.getVocabulary() !=null) && (term.getVocabulary().getTitleCache().equals(selectedUseCategory.getTitleCache()))) {\r
                                        termsToAdd.add(term);\r
                                }\r
 -      \r
 +\r
                        }\r
                }\r
                else if (!getEntity().getStateData().isEmpty()) {\r
                                                                termsToAdd.add(term);\r
                                                        }\r
                                                }\r
 -                                              \r
 +\r
                                        }\r
                                }\r
                        }\r
 -                      \r
 +\r
                }\r
 -                      \r
 +\r
                else {\r
                        return null;\r
                }\r
  \r
                return termsToAdd;\r
        }\r
 -      \r
 -      \r
 +\r
 +\r
        /**\r
         * This function sets the EthnicGroup combo term\r
         * @param listOfTerms\r
                List<DefinedTerm> termsToAdd = new ArrayList<DefinedTerm>();\r
                if (combo_HumanGroup.getSelection() != null) {\r
                        for (DefinedTerm term : listOfTerms) {\r
 -      \r
 +\r
                                if ((term.getPartOf() != null) && (term.getPartOf().getTitleCache().equals(selectedHumangroup.getTitleCache()))) {\r
                                        termsToAdd.add(term);\r
                                }\r
                                                                        termsToAdd.add(modifier);\r
                                                                }\r
                                                        }\r
 -                                                      \r
 +\r
                                                }\r
                                        }\r
                                }\r
                } else {\r
                        return null;\r
                }\r
 -              \r
 +\r
                return termsToAdd;\r
        }\r
  \r
 -      \r
 +\r
        /** {@inheritDoc} */\r
        @Override\r
        public void handleEvent(Object eventSource) {\r
                                                        if(!useCategoryStateDataCheck.getState().getTitleCache().equals(combo_UseCategory.getSelection().getTitleCache())) {\r
                                                                isUseCategoryChanged = true;\r
                                                        }\r
 -                                                      \r
 +\r
                                                }\r
                                        }\r
                                        ListIterator<StateData> itrExistingStates = getEntity().getStateData().listIterator();\r
                                                                        stateData.setState(combo_UseCategory.getSelection());\r
                                                                        stateData.putModifyingText(CdmStore.getDefaultLanguage(),UsageTermCollection.useCategoryVocabularyLabel);\r
                                                                        itrExistingStates.add(stateData);\r
 -                                                                      \r
 +\r
                                                                }\r
                                                        } else if (modifyingText.get(CdmStore.getDefaultLanguage()).getText().equals(UsageTermCollection.useSubCategoryVocabularyLabel) && isUseCategoryChanged == true) {\r
                                                                itrExistingStates.remove();\r
                                                }\r
                                        }\r
                                }\r
 -                              \r
 -                              \r
 +\r
 +\r
                                if (isChanged == false) {\r
                                        StateData stateData = StateData\r
                                                        .NewInstance(combo_UseCategory.getSelection());\r
                                        stateData.putModifyingText(CdmStore.getDefaultLanguage(), UsageTermCollection.useCategoryVocabularyLabel);\r
                                        getEntity().addStateData(stateData);\r
                                }\r
 -                              \r
 +\r
                                combo_UseSubCategory.setEnabled(true);\r
 -      \r
 +\r
                        }\r
                        else {\r
                                if (!getEntity().getStateData().isEmpty()) {\r
                                }\r
                        }\r
                }\r
 -                      \r
 +\r
                if (eventSource == combo_UseSubCategory) {\r
                        if (combo_UseSubCategory.getSelection() != null) {\r
                                boolean isChanged = false;\r
                                                }\r
                                        }\r
                                }\r
 -                              \r
 +\r
                                if (isChanged == false){\r
                                        StateData stateData = StateData\r
                                                        .NewInstance(combo_UseSubCategory.getSelection());\r
                                        stateData.putModifyingText(CdmStore.getDefaultLanguage(), UsageTermCollection.useSubCategoryVocabularyLabel);\r
                                        getEntity().addStateData(stateData);\r
                                }\r
 -      \r
 +\r
                        } else {\r
                                if (!getEntity().getStateData().isEmpty()) {\r
                                        Iterator<StateData> itrStateData = getEntity().getStateData().iterator();\r
                                        if(GetVocabularyType(modifier, UsageTermCollection.plantPartLabel)) {\r
                                                itrExistingModifiers.remove();\r
                                        }\r
 -                                              \r
 -                              }       \r
 +\r
 +                              }\r
                                DefinedTerm plantPart = combo_PlantPart.getSelection();\r
                                getEntity().addModifier(plantPart);\r
                        } else {\r
                                                }\r
                                        }\r
                                }\r
 -                              \r
 +\r
                        }\r
                }\r
                if (eventSource == combo_Country) {\r
                                        if(GetVocabularyType(modifier, UsageTermCollection.countryLabel)) {\r
                                                itrExistingModifiers.remove();\r
                                        }\r
 -                                              \r
 +\r
                                }\r
                                DefinedTerm country = combo_Country.getSelection();\r
                                getEntity().addModifier(country);\r
                                        if(modToCheck.equals(combo_HumanGroup.getSelection()) && (GetVocabularyType(modToCheck, UsageTermCollection.humanGroupLabel))) {\r
                                                isHumanGroupChanged = false;\r
                                }\r
 -                              \r
 -                                      \r
 +\r
 +\r
                                }\r
                                Iterator<DefinedTerm> itrExistingModifiers = getEntity().getModifiers().iterator();\r
                                while (itrExistingModifiers.hasNext()) {\r
                                        if((GetVocabularyType(modifier, UsageTermCollection.humanGroupLabel) || GetVocabularyType(modifier, UsageTermCollection.ethnicGroupLabel)) && isHumanGroupChanged) {\r
                                                itrExistingModifiers.remove();\r
                                        }\r
 -                                              \r
 -                              }       \r
 +\r
 +                              }\r
                                if(isHumanGroupChanged){\r
                                        DefinedTerm humanGroup = combo_HumanGroup.getSelection();\r
                                        getEntity().addModifier(humanGroup);\r
                                        }\r
                                }\r
                                List<DefinedTerm> emptyListToResetComboBox = new ArrayList<DefinedTerm>();\r
-                               //FIXME:3.3MC----\r
                              //DefinedTerm emptyMod = DefinedTerm.NewInstance();\r
+                               \r
//                            DefinedTerm emptyMod = DefinedTerm.NewInstance();\r
                                DefinedTerm emptyMod = null;\r
-                               //FIXME:3.3MC----\r
 -                              \r
 -                              \r
 +\r
 +\r
                                emptyListToResetComboBox.add(emptyMod);\r
                                combo_EthnicGroup.setTerms(emptyListToResetComboBox);\r
                                combo_EthnicGroup.setEnabled(false);\r
 -                              \r
 +\r
                        }\r
                }\r
                if (eventSource == combo_EthnicGroup) {\r
                                                if(GetVocabularyType(modifier, combo_HumanGroup.getSelection().getTitleCache())) {\r
                                                        itrExistingModifiers.remove();\r
                                                }\r
 -                                              \r
 -                                      }       \r
 +\r
 +                                      }\r
                                        DefinedTerm ethnicGroup = combo_EthnicGroup.getSelection();\r
                                        getEntity().addModifier(ethnicGroup);\r
                        } else {\r
                                Set<DefinedTerm> modifiers = getEntity().getModifiers();\r
                                if(!modifiers.isEmpty()) {\r
 -                                      \r
 +\r
                                        Iterator<DefinedTerm> itr = modifiers.iterator();\r
                                        while (itr.hasNext()) {\r
                                                DefinedTerm currentMod = itr.next();\r
                                                        itr.remove();\r
                                                }\r
                                        }\r
 -                                      \r
 +\r
                                }\r
                        }\r
                }\r
        }\r
 -      \r
 -      \r
 +\r
 +\r
  \r
        /**\r
         * This function Checks the vocabulary type\r
                }\r
        return false;\r
        }\r
 -      \r
 -      \r
 +\r
 +\r
  \r
        /** {@inheritDoc} */\r
        @Override\r
                                State selectedUseCategory = combo_UseCategory.getSelection();\r
                                if (selectedUseCategory != null) {\r
                                        combo_UseSubCategory.setTerms(setUseCategoryComboTerms(TermStore.getTerms(State.class, null, false),selectedUseCategory));\r
 -                              \r
 +\r
                                        if (!getEntity().getStateData().isEmpty()) {\r
                                                Iterator<StateData> itrExistingState = getEntity().getStateData().iterator();\r
                                                while(itrExistingState.hasNext()) {\r
 -                                                      StateData existingStateData = (StateData) itrExistingState.next();\r
 +                                                      StateData existingStateData = itrExistingState.next();\r
                                                        Map<Language, LanguageString> modifyingText = existingStateData.getModifyingText();\r
                                                        if (modifyingText.get(CdmStore.getDefaultLanguage()) != null) {\r
                                                                if (modifyingText.get(CdmStore.getDefaultLanguage())\r
                                                        }\r
                                                }\r
                                        }\r
 -                                      \r
 +\r
                                }\r
                        }\r
                }\r
index 0000000000000000000000000000000000000000,441cd85b2601fb8ab25df012e1a97e68ac3b975d..78c0d19c31626d93f19c08524342789c939f0a5f
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,91 +1,91 @@@
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;\r
+ // $Id$\r
+ /**\r
+ * Copyright (C) 2009 EDIT\r
+ * European Distributed Institute of Taxonomy\r
+ * http://www.e-taxonomy.eu\r
+ *\r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+ package eu.etaxonomy.taxeditor.ui.section.vocabulary;\r
\r
+ import eu.etaxonomy.cdm.model.description.Feature;\r
++import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;\r
+ import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;\r
+ import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;\r
\r
+ /**\r
+  * @author l.morris\r
+  * @date 20 Dec 2011\r
+  *\r
+  */\r
+ public class FeatureDetailElement extends DefinedTermDetailElement<Feature> {\r
\r
+     private CheckboxElement supportsTextData;\r
\r
+     private CheckboxElement supportsQuantitativeData;\r
\r
+     private CheckboxElement supportsDistribution;\r
\r
+     private CheckboxElement supportsIndividualAssociation;\r
\r
+     private CheckboxElement supportsTaxonInteraction;\r
\r
+     private CheckboxElement supportsCategoricalData;\r
\r
+     private CheckboxElement supportsCommonTaxonName;\r
\r
+     /**\r
+        * @param formFactory\r
+        * @param formElement\r
+        */\r
+       public FeatureDetailElement(CdmFormFactory formFactory,\r
+                       ICdmFormElement formElement) {\r
+               super(formFactory, formElement);\r
+       }\r
\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.ui.section.vocabulary.AbstractTermBaseDetailElement#createControls(eu.etaxonomy.taxeditor.ui.element.ICdmFormElement, eu.etaxonomy.cdm.model.common.TermBase, int)\r
+        */\r
+       @Override\r
+       protected void createControls(ICdmFormElement formElement, Feature entity, int style) {\r
+           super.createControls(formElement, entity, style);\r
+           supportsTextData = formFactory.createCheckbox(formElement, "Supports Text Data", entity.isSupportsTextData(), style);\r
+           supportsQuantitativeData = formFactory.createCheckbox(formElement, "Supports Quantitive Data", entity.isSupportsQuantitativeData(), style);\r
+           supportsDistribution = formFactory.createCheckbox(formElement, "Supports Distribution", entity.isSupportsDistribution(), style);\r
+           supportsIndividualAssociation = formFactory.createCheckbox(formElement, "Supports Individual Association", entity.isSupportsIndividualAssociation(), style);\r
+           supportsTaxonInteraction = formFactory.createCheckbox(formElement, "Supports Taxon Interaction", entity.isSupportsTaxonInteraction(), style);\r
+           supportsCategoricalData = formFactory.createCheckbox(formElement, "Supports Categorical Data", entity.isSupportsCategoricalData(), style);\r
+           supportsCommonTaxonName = formFactory.createCheckbox(formElement, "Supports Common Taxon Name", entity.isSupportsCommonTaxonName(), style);\r
+       }\r
\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.ui.section.vocabulary.DefinedTermDetailElement#handleEvent(java.lang.Object)\r
+        */\r
+       @Override\r
+       public void handleEvent(Object eventSource) {\r
+           super.handleEvent(eventSource);\r
+           if(eventSource == supportsTextData){\r
+               getEntity().setSupportsTextData(supportsTextData.getSelection());\r
+           }\r
+           else if(eventSource == supportsQuantitativeData){\r
+               getEntity().setSupportsQuantitativeData(supportsQuantitativeData.getSelection());\r
+           }\r
+           else if(eventSource == supportsDistribution){\r
+               getEntity().setSupportsDistribution(supportsDistribution.getSelection());\r
+           }\r
+           else if(eventSource == supportsIndividualAssociation){\r
+               getEntity().setSupportsIndividualAssociation(supportsIndividualAssociation.getSelection());\r
+           }\r
+           else if(eventSource == supportsTaxonInteraction){\r
+               getEntity().setSupportsTaxonInteraction(supportsTaxonInteraction.getSelection());\r
+           }\r
+           else if(eventSource == supportsCategoricalData){\r
+               getEntity().setSupportsCategoricalData(supportsCategoricalData.getSelection());\r
+           }\r
+           else if(eventSource == supportsCommonTaxonName){\r
+               getEntity().setSupportsCommonTaxonName(supportsCommonTaxonName.getSelection());\r
+           }\r
+       }\r
\r
+ }\r
index 1b6552d7084fed82bbc638311f6079421db226ae,c0ed01d690253cbbb46b285e000d5240fb53375c..b794ee6e3687bd38bf89bf7bea8c10365367993b
@@@ -1,9 -1,9 +1,9 @@@
  // $Id$
  /**
   * Copyright (C) 2007 EDIT
 - * European Distributed Institute of Taxonomy 
 + * European Distributed Institute of Taxonomy
   * http://www.e-taxonomy.eu
 - * 
 + *
   * The contents of this file are subject to the Mozilla Public License Version 1.1
   * See LICENSE.TXT at the top of this package for the full license terms.
   */
@@@ -31,7 -31,6 +31,6 @@@ import eu.etaxonomy.cdm.model.reference
  import eu.etaxonomy.taxeditor.model.TextHelper;
  import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
  import eu.etaxonomy.taxeditor.store.StoreUtil;
- import eu.etaxonomy.taxeditor.ui.campanula.compatibility.IEntitySelectionElement;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
  import eu.etaxonomy.taxeditor.ui.section.agent.InstitutionWizardPage;
  import eu.etaxonomy.taxeditor.ui.section.agent.PersonWizardPage;
@@@ -39,9 -38,9 +38,9 @@@ import eu.etaxonomy.taxeditor.ui.sectio
  import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameWizardPage;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectionWizardPage;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseWizardPage;
- import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationDetailsWizardPage;
- import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailsWizardPage;
- import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationGeneralWizardPage;
+ import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitWizardPage;
+ import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventWizardPage;
+ import eu.etaxonomy.taxeditor.ui.section.occurrence.GeneralWizardPage;
  import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceWizardPage;
  import eu.etaxonomy.taxeditor.ui.section.user.UserDetailWizardPage;
  
@@@ -49,7 -48,7 +48,7 @@@
   * <p>
   * EditFromSelectionWizard class.
   * </p>
 - * 
 + *
   * @author n.hoffmann
   * @created Jun 1, 2010
   * @version 1.0
  public class EditFromSelectionWizard extends Wizard implements
                SelectionListener {
  
-       private final IEntitySelectionElement selectionElement;
+       private final EntitySelectionElement selectionElement;
  
        /**
         * <p>
         * Constructor for EditFromSelectionWizard.
         * </p>
 -       * 
 +       *
         * @param selectionElement
         *            a
         *            {@link eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement}
         *            object.
         */
-       public EditFromSelectionWizard(IEntitySelectionElement selectionElement) {
+       public EditFromSelectionWizard(EntitySelectionElement selectionElement) {
                this.selectionElement = selectionElement;
                this.setWindowTitle(String.format("Edit %s", TextHelper.deproxyClassName(selectionElement.getEntity().getClass())));
        }
                                throw new IllegalStateException();
                        }
  
-                       addPage(new FieldObservationGeneralWizardPage(formFactory,
+                       addPage(new GeneralWizardPage(formFactory,
                                        selectionElement.getConversationHolder(), facade));
-                       addPage(new GatheringEventDetailsWizardPage(formFactory,
+                       addPage(new GatheringEventWizardPage(formFactory,
                                        selectionElement.getConversationHolder(), facade));
-                       addPage(new FieldObservationDetailsWizardPage(formFactory,
+                       addPage(new FieldUnitWizardPage(formFactory,
                                        selectionElement.getConversationHolder(), facade));
                        addPage(new DerivedUnitBaseWizardPage(formFactory,
                                        selectionElement.getConversationHolder(), facade));
                                        selectionElement.getConversationHolder(),
                                        (Institution) entity));
                } else if (entity instanceof User) {
 -                      addPage(new UserDetailWizardPage(formFactory, 
 -                                      selectionElement.getConversationHolder(), 
 +                      addPage(new UserDetailWizardPage(formFactory,
 +                                      selectionElement.getConversationHolder(),
                                        (User) entity));
                } else {
                        StoreUtil.warningDialog("Missing interface", this,
                                        "No detail element for current selection");
 -              } 
 +              }
  
        }
  
        /*
         * (non-Javadoc)
 -       * 
 +       *
         * @see org.eclipse.jface.wizard.Wizard#performFinish()
         */
        /** {@inheritDoc} */
index 4bfbc6b6ef9229038dc3dd1d222caa8575f0ff04,0000000000000000000000000000000000000000..2f940d85dffcec693da2b426337bfc861fd9cabc
mode 100644,000000..100644
--- /dev/null
@@@ -1,415 -1,0 +1,415 @@@
- import java.io.File;
- import java.io.InputStream;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Method;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import org.eclipse.core.runtime.Platform;
- import org.eclipse.jface.resource.CompositeImageDescriptor;
- import org.eclipse.jface.resource.ImageDescriptor;
- import org.eclipse.swt.graphics.Image;
- import org.eclipse.swt.graphics.Point;
- import org.eclipse.swt.graphics.Rectangle;
- import org.osgi.framework.Bundle;
 +/*******************************************************************************\r
 + * Copyright (c) 2011 Google, Inc.\r
 + * All rights reserved. This program and the accompanying materials\r
 + * are made available under the terms of the Eclipse Public License v1.0\r
 + * which accompanies this distribution, and is available at\r
 + * http://www.eclipse.org/legal/epl-v10.html\r
 + *\r
 + * Contributors:\r
 + *    Google, Inc. - initial API and implementation\r
 + *******************************************************************************/\r
 +package org.eclipse.wb.swt;
 +
++import java.io.File;\r
++import java.io.InputStream;\r
++import java.lang.reflect.Constructor;\r
++import java.lang.reflect.Method;\r
++import java.net.MalformedURLException;\r
++import java.net.URL;\r
++import java.util.HashMap;\r
++import java.util.Iterator;\r
++import java.util.Map;\r
++\r
++import org.eclipse.core.runtime.Platform;\r
++import org.eclipse.jface.resource.CompositeImageDescriptor;\r
++import org.eclipse.jface.resource.ImageDescriptor;\r
++import org.eclipse.swt.graphics.Image;\r
++import org.eclipse.swt.graphics.Point;\r
++import org.eclipse.swt.graphics.Rectangle;\r
++import org.osgi.framework.Bundle;\r
 +
 +/**
 + * Utility class for managing OS resources associated with SWT/JFace controls such as colors, fonts, images,
 + * etc.
 + * 
 + * !!! IMPORTANT !!! Application code must explicitly invoke the <code>dispose()</code> method to release the
 + * operating system resources managed by cached objects when those objects and OS resources are no longer
 + * needed (e.g. on application shutdown)
 + * 
 + * This class may be freely distributed as part of any application or plugin.
 + * <p>
 + * 
 + * @author scheglov_ke
 + * @author Dan Rubel
 + */
 +public class ResourceManager extends SWTResourceManager {
 +      ////////////////////////////////////////////////////////////////////////////
 +      //
 +      // Image
 +      //
 +      ////////////////////////////////////////////////////////////////////////////
 +      private static Map<ImageDescriptor, Image> m_descriptorImageMap = new HashMap<ImageDescriptor, Image>();
 +      /**
 +       * Returns an {@link ImageDescriptor} stored in the file at the specified path relative to the specified
 +       * class.
 +       * 
 +       * @param clazz
 +       *            the {@link Class} relative to which to find the image descriptor.
 +       * @param path
 +       *            the path to the image file.
 +       * @return the {@link ImageDescriptor} stored in the file at the specified path.
 +       */
 +      public static ImageDescriptor getImageDescriptor(Class<?> clazz, String path) {
 +              return ImageDescriptor.createFromFile(clazz, path);
 +      }
 +      /**
 +       * Returns an {@link ImageDescriptor} stored in the file at the specified path.
 +       * 
 +       * @param path
 +       *            the path to the image file.
 +       * @return the {@link ImageDescriptor} stored in the file at the specified path.
 +       */
 +      public static ImageDescriptor getImageDescriptor(String path) {
 +              try {
 +                      return ImageDescriptor.createFromURL(new File(path).toURI().toURL());
 +              } catch (MalformedURLException e) {
 +                      return null;
 +              }
 +      }
 +      /**
 +       * Returns an {@link Image} based on the specified {@link ImageDescriptor}.
 +       * 
 +       * @param descriptor
 +       *            the {@link ImageDescriptor} for the {@link Image}.
 +       * @return the {@link Image} based on the specified {@link ImageDescriptor}.
 +       */
 +      public static Image getImage(ImageDescriptor descriptor) {
 +              if (descriptor == null) {
 +                      return null;
 +              }
 +              Image image = m_descriptorImageMap.get(descriptor);
 +              if (image == null) {
 +                      image = descriptor.createImage();
 +                      m_descriptorImageMap.put(descriptor, image);
 +              }
 +              return image;
 +      }
 +      /**
 +       * Maps images to decorated images.
 +       */
 +      @SuppressWarnings("unchecked")
 +      private static Map<Image, Map<Image, Image>>[] m_decoratedImageMap = new Map[LAST_CORNER_KEY];
 +      /**
 +       * Returns an {@link Image} composed of a base image decorated by another image.
 +       * 
 +       * @param baseImage
 +       *            the base {@link Image} that should be decorated.
 +       * @param decorator
 +       *            the {@link Image} to decorate the base image.
 +       * @return {@link Image} The resulting decorated image.
 +       */
 +      public static Image decorateImage(Image baseImage, Image decorator) {
 +              return decorateImage(baseImage, decorator, BOTTOM_RIGHT);
 +      }
 +      /**
 +       * Returns an {@link Image} composed of a base image decorated by another image.
 +       * 
 +       * @param baseImage
 +       *            the base {@link Image} that should be decorated.
 +       * @param decorator
 +       *            the {@link Image} to decorate the base image.
 +       * @param corner
 +       *            the corner to place decorator image.
 +       * @return the resulting decorated {@link Image}.
 +       */
 +      public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) {
 +              if (corner <= 0 || corner >= LAST_CORNER_KEY) {
 +                      throw new IllegalArgumentException("Wrong decorate corner");
 +              }
 +              Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[corner];
 +              if (cornerDecoratedImageMap == null) {
 +                      cornerDecoratedImageMap = new HashMap<Image, Map<Image, Image>>();
 +                      m_decoratedImageMap[corner] = cornerDecoratedImageMap;
 +              }
 +              Map<Image, Image> decoratedMap = cornerDecoratedImageMap.get(baseImage);
 +              if (decoratedMap == null) {
 +                      decoratedMap = new HashMap<Image, Image>();
 +                      cornerDecoratedImageMap.put(baseImage, decoratedMap);
 +              }
 +              //
 +              Image result = decoratedMap.get(decorator);
 +              if (result == null) {
 +                      final Rectangle bib = baseImage.getBounds();
 +                      final Rectangle dib = decorator.getBounds();
 +                      final Point baseImageSize = new Point(bib.width, bib.height);
 +                      CompositeImageDescriptor compositImageDesc = new CompositeImageDescriptor() {
 +                              @Override
 +                              protected void drawCompositeImage(int width, int height) {
 +                                      drawImage(baseImage.getImageData(), 0, 0);
 +                                      if (corner == TOP_LEFT) {
 +                                              drawImage(decorator.getImageData(), 0, 0);
 +                                      } else if (corner == TOP_RIGHT) {
 +                                              drawImage(decorator.getImageData(), bib.width - dib.width, 0);
 +                                      } else if (corner == BOTTOM_LEFT) {
 +                                              drawImage(decorator.getImageData(), 0, bib.height - dib.height);
 +                                      } else if (corner == BOTTOM_RIGHT) {
 +                                              drawImage(decorator.getImageData(), bib.width - dib.width, bib.height - dib.height);
 +                                      }
 +                              }
 +                              @Override
 +                              protected Point getSize() {
 +                                      return baseImageSize;
 +                              }
 +                      };
 +                      //
 +                      result = compositImageDesc.createImage();
 +                      decoratedMap.put(decorator, result);
 +              }
 +              return result;
 +      }
 +      /**
 +       * Dispose all of the cached images.
 +       */
 +      public static void disposeImages() {
 +              SWTResourceManager.disposeImages();
 +              // dispose ImageDescriptor images
 +              {
 +                      for (Iterator<Image> I = m_descriptorImageMap.values().iterator(); I.hasNext();) {
 +                              I.next().dispose();
 +                      }
 +                      m_descriptorImageMap.clear();
 +              }
 +              // dispose decorated images
 +              for (int i = 0; i < m_decoratedImageMap.length; i++) {
 +                      Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[i];
 +                      if (cornerDecoratedImageMap != null) {
 +                              for (Map<Image, Image> decoratedMap : cornerDecoratedImageMap.values()) {
 +                                      for (Image image : decoratedMap.values()) {
 +                                              image.dispose();
 +                                      }
 +                                      decoratedMap.clear();
 +                              }
 +                              cornerDecoratedImageMap.clear();
 +                      }
 +              }
 +              // dispose plugin images
 +              {
 +                      for (Iterator<Image> I = m_URLImageMap.values().iterator(); I.hasNext();) {
 +                              I.next().dispose();
 +                      }
 +                      m_URLImageMap.clear();
 +              }
 +      }
 +      ////////////////////////////////////////////////////////////////////////////
 +      //
 +      // Plugin images support
 +      //
 +      ////////////////////////////////////////////////////////////////////////////
 +      /**
 +       * Maps URL to images.
 +       */
 +      private static Map<String, Image> m_URLImageMap = new HashMap<String, Image>();
 +      /**
 +       * Provider for plugin resources, used by WindowBuilder at design time.
 +       */
 +      public interface PluginResourceProvider {
 +              URL getEntry(String symbolicName, String path);
 +      }
 +      /**
 +       * Instance of {@link PluginResourceProvider}, used by WindowBuilder at design time.
 +       */
 +      private static PluginResourceProvider m_designTimePluginResourceProvider = null;
 +      /**
 +       * Returns an {@link Image} based on a plugin and file path.
 +       * 
 +       * @param plugin
 +       *            the plugin {@link Object} containing the image
 +       * @param name
 +       *            the path to the image within the plugin
 +       * @return the {@link Image} stored in the file at the specified path
 +       * 
 +       * @deprecated Use {@link #getPluginImage(String, String)} instead.
 +       */
 +      @Deprecated
 +      public static Image getPluginImage(Object plugin, String name) {
 +              try {
 +                      URL url = getPluginImageURL(plugin, name);
 +                      if (url != null) {
 +                              return getPluginImageFromUrl(url);
 +                      }
 +              } catch (Throwable e) {
 +                      // Ignore any exceptions
 +              }
 +              return null;
 +      }
 +      /**
 +       * Returns an {@link Image} based on a {@link Bundle} and resource entry path.
 +       * 
 +       * @param symbolicName
 +       *            the symbolic name of the {@link Bundle}.
 +       * @param path
 +       *            the path of the resource entry.
 +       * @return the {@link Image} stored in the file at the specified path.
 +       */
 +      public static Image getPluginImage(String symbolicName, String path) {
 +              try {
 +                      URL url = getPluginImageURL(symbolicName, path);
 +                      if (url != null) {
 +                              return getPluginImageFromUrl(url);
 +                      }
 +              } catch (Throwable e) {
 +                      // Ignore any exceptions
 +              }
 +              return null;
 +      }
 +      /**
 +       * Returns an {@link Image} based on given {@link URL}.
 +       */
 +      private static Image getPluginImageFromUrl(URL url) {
 +              try {
 +                      try {
 +                              String key = url.toExternalForm();
 +                              Image image = m_URLImageMap.get(key);
 +                              if (image == null) {
 +                                      InputStream stream = url.openStream();
 +                                      try {
 +                                              image = getImage(stream);
 +                                              m_URLImageMap.put(key, image);
 +                                      } finally {
 +                                              stream.close();
 +                                      }
 +                              }
 +                              return image;
 +                      } catch (Throwable e) {
 +                              // Ignore any exceptions
 +                      }
 +              } catch (Throwable e) {
 +                      // Ignore any exceptions
 +              }
 +              return null;
 +      }
 +      /**
 +       * Returns an {@link ImageDescriptor} based on a plugin and file path.
 +       * 
 +       * @param plugin
 +       *            the plugin {@link Object} containing the image.
 +       * @param name
 +       *            the path to th eimage within the plugin.
 +       * @return the {@link ImageDescriptor} stored in the file at the specified path.
 +       * 
 +       * @deprecated Use {@link #getPluginImageDescriptor(String, String)} instead.
 +       */
 +      @Deprecated
 +      public static ImageDescriptor getPluginImageDescriptor(Object plugin, String name) {
 +              try {
 +                      try {
 +                              URL url = getPluginImageURL(plugin, name);
 +                              return ImageDescriptor.createFromURL(url);
 +                      } catch (Throwable e) {
 +                              // Ignore any exceptions
 +                      }
 +              } catch (Throwable e) {
 +                      // Ignore any exceptions
 +              }
 +              return null;
 +      }
 +      /**
 +       * Returns an {@link ImageDescriptor} based on a {@link Bundle} and resource entry path.
 +       * 
 +       * @param symbolicName
 +       *            the symbolic name of the {@link Bundle}.
 +       * @param path
 +       *            the path of the resource entry.
 +       * @return the {@link ImageDescriptor} based on a {@link Bundle} and resource entry path.
 +       */
 +      public static ImageDescriptor getPluginImageDescriptor(String symbolicName, String path) {
 +              try {
 +                      URL url = getPluginImageURL(symbolicName, path);
 +                      if (url != null) {
 +                              return ImageDescriptor.createFromURL(url);
 +                      }
 +              } catch (Throwable e) {
 +                      // Ignore any exceptions
 +              }
 +              return null;
 +      }
 +      /**
 +       * Returns an {@link URL} based on a {@link Bundle} and resource entry path.
 +       */
 +      private static URL getPluginImageURL(String symbolicName, String path) {
 +              // try runtime plugins
 +              {
 +                      Bundle bundle = Platform.getBundle(symbolicName);
 +                      if (bundle != null) {
 +                              return bundle.getEntry(path);
 +                      }
 +              }
 +              // try design time provider
 +              if (m_designTimePluginResourceProvider != null) {
 +                      return m_designTimePluginResourceProvider.getEntry(symbolicName, path);
 +              }
 +              // no such resource
 +              return null;
 +      }
 +      /**
 +       * Returns an {@link URL} based on a plugin and file path.
 +       * 
 +       * @param plugin
 +       *            the plugin {@link Object} containing the file path.
 +       * @param name
 +       *            the file path.
 +       * @return the {@link URL} representing the file at the specified path.
 +       * @throws Exception
 +       */
 +      private static URL getPluginImageURL(Object plugin, String name) throws Exception {
 +              // try to work with 'plugin' as with OSGI BundleContext
 +              try {
 +                      Class<?> BundleClass = Class.forName("org.osgi.framework.Bundle"); //$NON-NLS-1$
 +                      Class<?> BundleContextClass = Class.forName("org.osgi.framework.BundleContext"); //$NON-NLS-1$
 +                      if (BundleContextClass.isAssignableFrom(plugin.getClass())) {
 +                              Method getBundleMethod = BundleContextClass.getMethod("getBundle", new Class[0]); //$NON-NLS-1$
 +                              Object bundle = getBundleMethod.invoke(plugin, new Object[0]);
 +                              //
 +                              Class<?> PathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
 +                              Constructor<?> pathConstructor = PathClass.getConstructor(new Class[]{String.class});
 +                              Object path = pathConstructor.newInstance(new Object[]{name});
 +                              //
 +                              Class<?> IPathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
 +                              Class<?> PlatformClass = Class.forName("org.eclipse.core.runtime.Platform"); //$NON-NLS-1$
 +                              Method findMethod = PlatformClass.getMethod("find", new Class[]{BundleClass, IPathClass}); //$NON-NLS-1$
 +                              return (URL) findMethod.invoke(null, new Object[]{bundle, path});
 +                      }
 +              } catch (Throwable e) {
 +                      // Ignore any exceptions
 +              }
 +              // else work with 'plugin' as with usual Eclipse plugin
 +              {
 +                      Class<?> PluginClass = Class.forName("org.eclipse.core.runtime.Plugin"); //$NON-NLS-1$
 +                      if (PluginClass.isAssignableFrom(plugin.getClass())) {
 +                              //
 +                              Class<?> PathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
 +                              Constructor<?> pathConstructor = PathClass.getConstructor(new Class[]{String.class});
 +                              Object path = pathConstructor.newInstance(new Object[]{name});
 +                              //
 +                              Class<?> IPathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
 +                              Method findMethod = PluginClass.getMethod("find", new Class[]{IPathClass}); //$NON-NLS-1$
 +                              return (URL) findMethod.invoke(plugin, new Object[]{path});
 +                      }
 +              }
 +              return null;
 +      }
 +      ////////////////////////////////////////////////////////////////////////////
 +      //
 +      // General
 +      //
 +      ////////////////////////////////////////////////////////////////////////////
 +      /**
 +       * Dispose of cached objects and their underlying OS resources. This should only be called when the cached
 +       * objects are no longer needed (e.g. on application shutdown).
 +       */
 +      public static void dispose() {
 +              disposeColors();
 +              disposeFonts();
 +              disposeImages();
 +      }
 +}
index 8b6d4cc3ffec8aceabd59822e031990300d2e59a,0000000000000000000000000000000000000000..429964e7b0386edade61551b040b961594ea4ead
mode 100644,000000..100644
--- /dev/null
@@@ -1,447 -1,0 +1,447 @@@
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.HashMap;
- import java.util.Map;
- import org.eclipse.swt.SWT;
- import org.eclipse.swt.graphics.Color;
- import org.eclipse.swt.graphics.Cursor;
- import org.eclipse.swt.graphics.Font;
- import org.eclipse.swt.graphics.FontData;
- import org.eclipse.swt.graphics.GC;
- import org.eclipse.swt.graphics.Image;
- import org.eclipse.swt.graphics.ImageData;
- import org.eclipse.swt.graphics.RGB;
- import org.eclipse.swt.graphics.Rectangle;
- import org.eclipse.swt.widgets.Display;
 +/*******************************************************************************\r
 + * Copyright (c) 2011 Google, Inc.\r
 + * All rights reserved. This program and the accompanying materials\r
 + * are made available under the terms of the Eclipse Public License v1.0\r
 + * which accompanies this distribution, and is available at\r
 + * http://www.eclipse.org/legal/epl-v10.html\r
 + *\r
 + * Contributors:\r
 + *    Google, Inc. - initial API and implementation\r
 + *******************************************************************************/\r
 +package org.eclipse.wb.swt;
 +
++import java.io.FileInputStream;\r
++import java.io.IOException;\r
++import java.io.InputStream;\r
++import java.util.HashMap;\r
++import java.util.Map;\r
++\r
++import org.eclipse.swt.SWT;\r
++import org.eclipse.swt.graphics.Color;\r
++import org.eclipse.swt.graphics.Cursor;\r
++import org.eclipse.swt.graphics.Font;\r
++import org.eclipse.swt.graphics.FontData;\r
++import org.eclipse.swt.graphics.GC;\r
++import org.eclipse.swt.graphics.Image;\r
++import org.eclipse.swt.graphics.ImageData;\r
++import org.eclipse.swt.graphics.RGB;\r
++import org.eclipse.swt.graphics.Rectangle;\r
++import org.eclipse.swt.widgets.Display;\r
 +
 +/**
 + * Utility class for managing OS resources associated with SWT controls such as colors, fonts, images, etc.
 + * <p>
 + * !!! IMPORTANT !!! Application code must explicitly invoke the <code>dispose()</code> method to release the
 + * operating system resources managed by cached objects when those objects and OS resources are no longer
 + * needed (e.g. on application shutdown)
 + * <p>
 + * This class may be freely distributed as part of any application or plugin.
 + * <p>
 + * @author scheglov_ke
 + * @author Dan Rubel
 + */
 +public class SWTResourceManager {
 +      ////////////////////////////////////////////////////////////////////////////
 +      //
 +      // Color
 +      //
 +      ////////////////////////////////////////////////////////////////////////////
 +      private static Map<RGB, Color> m_colorMap = new HashMap<RGB, Color>();
 +      /**
 +       * Returns the system {@link Color} matching the specific ID.
 +       * 
 +       * @param systemColorID
 +       *            the ID value for the color
 +       * @return the system {@link Color} matching the specific ID
 +       */
 +      public static Color getColor(int systemColorID) {
 +              Display display = Display.getCurrent();
 +              return display.getSystemColor(systemColorID);
 +      }
 +      /**
 +       * Returns a {@link Color} given its red, green and blue component values.
 +       * 
 +       * @param r
 +       *            the red component of the color
 +       * @param g
 +       *            the green component of the color
 +       * @param b
 +       *            the blue component of the color
 +       * @return the {@link Color} matching the given red, green and blue component values
 +       */
 +      public static Color getColor(int r, int g, int b) {
 +              return getColor(new RGB(r, g, b));
 +      }
 +      /**
 +       * Returns a {@link Color} given its RGB value.
 +       * 
 +       * @param rgb
 +       *            the {@link RGB} value of the color
 +       * @return the {@link Color} matching the RGB value
 +       */
 +      public static Color getColor(RGB rgb) {
 +              Color color = m_colorMap.get(rgb);
 +              if (color == null) {
 +                      Display display = Display.getCurrent();
 +                      color = new Color(display, rgb);
 +                      m_colorMap.put(rgb, color);
 +              }
 +              return color;
 +      }
 +      /**
 +       * Dispose of all the cached {@link Color}'s.
 +       */
 +      public static void disposeColors() {
 +              for (Color color : m_colorMap.values()) {
 +                      color.dispose();
 +              }
 +              m_colorMap.clear();
 +      }
 +      ////////////////////////////////////////////////////////////////////////////
 +      //
 +      // Image
 +      //
 +      ////////////////////////////////////////////////////////////////////////////
 +      /**
 +       * Maps image paths to images.
 +       */
 +      private static Map<String, Image> m_imageMap = new HashMap<String, Image>();
 +      /**
 +       * Returns an {@link Image} encoded by the specified {@link InputStream}.
 +       * 
 +       * @param stream
 +       *            the {@link InputStream} encoding the image data
 +       * @return the {@link Image} encoded by the specified input stream
 +       */
 +      protected static Image getImage(InputStream stream) throws IOException {
 +              try {
 +                      Display display = Display.getCurrent();
 +                      ImageData data = new ImageData(stream);
 +                      if (data.transparentPixel > 0) {
 +                              return new Image(display, data, data.getTransparencyMask());
 +                      }
 +                      return new Image(display, data);
 +              } finally {
 +                      stream.close();
 +              }
 +      }
 +      /**
 +       * Returns an {@link Image} stored in the file at the specified path.
 +       * 
 +       * @param path
 +       *            the path to the image file
 +       * @return the {@link Image} stored in the file at the specified path
 +       */
 +      public static Image getImage(String path) {
 +              Image image = m_imageMap.get(path);
 +              if (image == null) {
 +                      try {
 +                              image = getImage(new FileInputStream(path));
 +                              m_imageMap.put(path, image);
 +                      } catch (Exception e) {
 +                              image = getMissingImage();
 +                              m_imageMap.put(path, image);
 +                      }
 +              }
 +              return image;
 +      }
 +      /**
 +       * Returns an {@link Image} stored in the file at the specified path relative to the specified class.
 +       * 
 +       * @param clazz
 +       *            the {@link Class} relative to which to find the image
 +       * @param path
 +       *            the path to the image file, if starts with <code>'/'</code>
 +       * @return the {@link Image} stored in the file at the specified path
 +       */
 +      public static Image getImage(Class<?> clazz, String path) {
 +              String key = clazz.getName() + '|' + path;
 +              Image image = m_imageMap.get(key);
 +              if (image == null) {
 +                      try {
 +                              image = getImage(clazz.getResourceAsStream(path));
 +                              m_imageMap.put(key, image);
 +                      } catch (Exception e) {
 +                              image = getMissingImage();
 +                              m_imageMap.put(key, image);
 +                      }
 +              }
 +              return image;
 +      }
 +      private static final int MISSING_IMAGE_SIZE = 10;
 +      /**
 +       * @return the small {@link Image} that can be used as placeholder for missing image.
 +       */
 +      private static Image getMissingImage() {
 +              Image image = new Image(Display.getCurrent(), MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
 +              //
 +              GC gc = new GC(image);
 +              gc.setBackground(getColor(SWT.COLOR_RED));
 +              gc.fillRectangle(0, 0, MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
 +              gc.dispose();
 +              //
 +              return image;
 +      }
 +      /**
 +       * Style constant for placing decorator image in top left corner of base image.
 +       */
 +      public static final int TOP_LEFT = 1;
 +      /**
 +       * Style constant for placing decorator image in top right corner of base image.
 +       */
 +      public static final int TOP_RIGHT = 2;
 +      /**
 +       * Style constant for placing decorator image in bottom left corner of base image.
 +       */
 +      public static final int BOTTOM_LEFT = 3;
 +      /**
 +       * Style constant for placing decorator image in bottom right corner of base image.
 +       */
 +      public static final int BOTTOM_RIGHT = 4;
 +      /**
 +       * Internal value.
 +       */
 +      protected static final int LAST_CORNER_KEY = 5;
 +      /**
 +       * Maps images to decorated images.
 +       */
 +      @SuppressWarnings("unchecked")
 +      private static Map<Image, Map<Image, Image>>[] m_decoratedImageMap = new Map[LAST_CORNER_KEY];
 +      /**
 +       * Returns an {@link Image} composed of a base image decorated by another image.
 +       * 
 +       * @param baseImage
 +       *            the base {@link Image} that should be decorated
 +       * @param decorator
 +       *            the {@link Image} to decorate the base image
 +       * @return {@link Image} The resulting decorated image
 +       */
 +      public static Image decorateImage(Image baseImage, Image decorator) {
 +              return decorateImage(baseImage, decorator, BOTTOM_RIGHT);
 +      }
 +      /**
 +       * Returns an {@link Image} composed of a base image decorated by another image.
 +       * 
 +       * @param baseImage
 +       *            the base {@link Image} that should be decorated
 +       * @param decorator
 +       *            the {@link Image} to decorate the base image
 +       * @param corner
 +       *            the corner to place decorator image
 +       * @return the resulting decorated {@link Image}
 +       */
 +      public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) {
 +              if (corner <= 0 || corner >= LAST_CORNER_KEY) {
 +                      throw new IllegalArgumentException("Wrong decorate corner");
 +              }
 +              Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[corner];
 +              if (cornerDecoratedImageMap == null) {
 +                      cornerDecoratedImageMap = new HashMap<Image, Map<Image, Image>>();
 +                      m_decoratedImageMap[corner] = cornerDecoratedImageMap;
 +              }
 +              Map<Image, Image> decoratedMap = cornerDecoratedImageMap.get(baseImage);
 +              if (decoratedMap == null) {
 +                      decoratedMap = new HashMap<Image, Image>();
 +                      cornerDecoratedImageMap.put(baseImage, decoratedMap);
 +              }
 +              //
 +              Image result = decoratedMap.get(decorator);
 +              if (result == null) {
 +                      Rectangle bib = baseImage.getBounds();
 +                      Rectangle dib = decorator.getBounds();
 +                      //
 +                      result = new Image(Display.getCurrent(), bib.width, bib.height);
 +                      //
 +                      GC gc = new GC(result);
 +                      gc.drawImage(baseImage, 0, 0);
 +                      if (corner == TOP_LEFT) {
 +                              gc.drawImage(decorator, 0, 0);
 +                      } else if (corner == TOP_RIGHT) {
 +                              gc.drawImage(decorator, bib.width - dib.width, 0);
 +                      } else if (corner == BOTTOM_LEFT) {
 +                              gc.drawImage(decorator, 0, bib.height - dib.height);
 +                      } else if (corner == BOTTOM_RIGHT) {
 +                              gc.drawImage(decorator, bib.width - dib.width, bib.height - dib.height);
 +                      }
 +                      gc.dispose();
 +                      //
 +                      decoratedMap.put(decorator, result);
 +              }
 +              return result;
 +      }
 +      /**
 +       * Dispose all of the cached {@link Image}'s.
 +       */
 +      public static void disposeImages() {
 +              // dispose loaded images
 +              {
 +                      for (Image image : m_imageMap.values()) {
 +                              image.dispose();
 +                      }
 +                      m_imageMap.clear();
 +              }
 +              // dispose decorated images
 +              for (int i = 0; i < m_decoratedImageMap.length; i++) {
 +                      Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[i];
 +                      if (cornerDecoratedImageMap != null) {
 +                              for (Map<Image, Image> decoratedMap : cornerDecoratedImageMap.values()) {
 +                                      for (Image image : decoratedMap.values()) {
 +                                              image.dispose();
 +                                      }
 +                                      decoratedMap.clear();
 +                              }
 +                              cornerDecoratedImageMap.clear();
 +                      }
 +              }
 +      }
 +      ////////////////////////////////////////////////////////////////////////////
 +      //
 +      // Font
 +      //
 +      ////////////////////////////////////////////////////////////////////////////
 +      /**
 +       * Maps font names to fonts.
 +       */
 +      private static Map<String, Font> m_fontMap = new HashMap<String, Font>();
 +      /**
 +       * Maps fonts to their bold versions.
 +       */
 +      private static Map<Font, Font> m_fontToBoldFontMap = new HashMap<Font, Font>();
 +      /**
 +       * Returns a {@link Font} based on its name, height and style.
 +       * 
 +       * @param name
 +       *            the name of the font
 +       * @param height
 +       *            the height of the font
 +       * @param style
 +       *            the style of the font
 +       * @return {@link Font} The font matching the name, height and style
 +       */
 +      public static Font getFont(String name, int height, int style) {
 +              return getFont(name, height, style, false, false);
 +      }
 +      /**
 +       * Returns a {@link Font} based on its name, height and style. Windows-specific strikeout and underline
 +       * flags are also supported.
 +       * 
 +       * @param name
 +       *            the name of the font
 +       * @param size
 +       *            the size of the font
 +       * @param style
 +       *            the style of the font
 +       * @param strikeout
 +       *            the strikeout flag (warning: Windows only)
 +       * @param underline
 +       *            the underline flag (warning: Windows only)
 +       * @return {@link Font} The font matching the name, height, style, strikeout and underline
 +       */
 +      public static Font getFont(String name, int size, int style, boolean strikeout, boolean underline) {
 +              String fontName = name + '|' + size + '|' + style + '|' + strikeout + '|' + underline;
 +              Font font = m_fontMap.get(fontName);
 +              if (font == null) {
 +                      FontData fontData = new FontData(name, size, style);
 +                      if (strikeout || underline) {
 +                              try {
 +                                      Class<?> logFontClass = Class.forName("org.eclipse.swt.internal.win32.LOGFONT"); //$NON-NLS-1$
 +                                      Object logFont = FontData.class.getField("data").get(fontData); //$NON-NLS-1$
 +                                      if (logFont != null && logFontClass != null) {
 +                                              if (strikeout) {
 +                                                      logFontClass.getField("lfStrikeOut").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$
 +                                              }
 +                                              if (underline) {
 +                                                      logFontClass.getField("lfUnderline").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$
 +                                              }
 +                                      }
 +                              } catch (Throwable e) {
 +                                      System.err.println("Unable to set underline or strikeout" + " (probably on a non-Windows platform). " + e); //$NON-NLS-1$ //$NON-NLS-2$
 +                              }
 +                      }
 +                      font = new Font(Display.getCurrent(), fontData);
 +                      m_fontMap.put(fontName, font);
 +              }
 +              return font;
 +      }
 +      /**
 +       * Returns a bold version of the given {@link Font}.
 +       * 
 +       * @param baseFont
 +       *            the {@link Font} for which a bold version is desired
 +       * @return the bold version of the given {@link Font}
 +       */
 +      public static Font getBoldFont(Font baseFont) {
 +              Font font = m_fontToBoldFontMap.get(baseFont);
 +              if (font == null) {
 +                      FontData fontDatas[] = baseFont.getFontData();
 +                      FontData data = fontDatas[0];
 +                      font = new Font(Display.getCurrent(), data.getName(), data.getHeight(), SWT.BOLD);
 +                      m_fontToBoldFontMap.put(baseFont, font);
 +              }
 +              return font;
 +      }
 +      /**
 +       * Dispose all of the cached {@link Font}'s.
 +       */
 +      public static void disposeFonts() {
 +              // clear fonts
 +              for (Font font : m_fontMap.values()) {
 +                      font.dispose();
 +              }
 +              m_fontMap.clear();
 +              // clear bold fonts
 +              for (Font font : m_fontToBoldFontMap.values()) {
 +                      font.dispose();
 +              }
 +              m_fontToBoldFontMap.clear();
 +      }
 +      ////////////////////////////////////////////////////////////////////////////
 +      //
 +      // Cursor
 +      //
 +      ////////////////////////////////////////////////////////////////////////////
 +      /**
 +       * Maps IDs to cursors.
 +       */
 +      private static Map<Integer, Cursor> m_idToCursorMap = new HashMap<Integer, Cursor>();
 +      /**
 +       * Returns the system cursor matching the specific ID.
 +       * 
 +       * @param id
 +       *            int The ID value for the cursor
 +       * @return Cursor The system cursor matching the specific ID
 +       */
 +      public static Cursor getCursor(int id) {
 +              Integer key = Integer.valueOf(id);
 +              Cursor cursor = m_idToCursorMap.get(key);
 +              if (cursor == null) {
 +                      cursor = new Cursor(Display.getDefault(), id);
 +                      m_idToCursorMap.put(key, cursor);
 +              }
 +              return cursor;
 +      }
 +      /**
 +       * Dispose all of the cached cursors.
 +       */
 +      public static void disposeCursors() {
 +              for (Cursor cursor : m_idToCursorMap.values()) {
 +                      cursor.dispose();
 +              }
 +              m_idToCursorMap.clear();
 +      }
 +      ////////////////////////////////////////////////////////////////////////////
 +      //
 +      // General
 +      //
 +      ////////////////////////////////////////////////////////////////////////////
 +      /**
 +       * Dispose of cached objects and their underlying OS resources. This should only be called when the cached
 +       * objects are no longer needed (e.g. on application shutdown).
 +       */
 +      public static void dispose() {
 +              disposeColors();
 +              disposeImages();
 +              disposeFonts();
 +              disposeCursors();
 +      }
 +}