merged/implemented cdm3.3 model adaptations
authorPatric Plitzner <p.plitzner@bgbm.org>
Tue, 20 Aug 2013 12:56:45 +0000 (12:56 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Tue, 20 Aug 2013 12:56:45 +0000 (12:56 +0000)
88 files changed:
1  2 
.gitattributes
eu.etaxonomy.taxeditor.cdmlib/.classpath
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditorDataChangeBehaviour.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInput.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/UseObjectManager.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/SwapSynonymAndAcceptedHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeSynonymToAcceptedTaxonOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DynamicFeatureMenu.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/ClassificationLabelProvider.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/SynonymLabelProvider.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorDataChangeBehavior.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNodeContentProvider.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNodeLabelProvider.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapterAssistant.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/CopyHandler.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/CopyOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/DeleteOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/MoveTaxonOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreateTaxonNode.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/DescriptionHelper.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/FeatureNodeContainer.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/ImageResources.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewDerivedUnitBaseWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewGrantedAuthorityWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonNodeWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/AbstractPersistentPostOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/basicFields/NumberFieldController.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/detailViews/fieldObservation/GatheringEventDetailsElementController.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/combo/TermComboElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/AbstractFilteredCdmEnumSelectionDialog.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/GrantedAuthoritySelectionDialog.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/ReferenceSelectionDialog.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/DateDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/GatheringEventUnitElement.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/PartialElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/PointElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/classification/TaxonNodeDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/classification/TaxonNodeWizardPage.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/DerivedUnitElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/DescribedSpecimenSection.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/description/DescriptionElementSourceElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/DescriptionElementSourceSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/DescriptionSourceSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/ModifierElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/ModifierSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/ScopeElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/ScopeSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/StateDataSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/StatisticalMeasurementValueElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/detail/IndividualsAssociationDetailElement.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/key/ScopeRestrictionSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/ImageFileElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaRepresentationPartElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/name/NameDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/name/SpecimenTypeDesignationElement.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/DerivedUnitFacadeDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DeterminationDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/DeterminationEventDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldObservationDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GeneralDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GeneralDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/SourceCollectionDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/SpecimenCollectionDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/SpecimenCollectionDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/AbstractOriginalSourceElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/IdentifiableSourceElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/RightsElement.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/userecords/UseRecordDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EditFromSelectionWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/CdmSectionPart.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/DetailsViewer.java

diff --cc .gitattributes
index 8d0bf27ad6d3af8684fb0b47358d0dfc50b78aa3,cadffbe930bd4d86374874229f36fa0b1d294250..5df9dc33c097514bdfac2700f168c9f5918b31a2
@@@ -1288,6 -1259,8 +1284,7 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmPropertyChangeEvent.java -text
  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/ICdmFormElement.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/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
index 32ee1a39b9b8e6d15fe4e71c8c378f878f5f12f0,f2f431199849f5ea85e6ba2f01627c174ac097f1..08b9fd30650f0dfa2f6f8b8dc5a6d597a7e92f36
        <classpathentry exported="true" kind="lib" path="lib/google-api-translate-java-0.92.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/odfdom-0.8.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/h2mig_pagestore_addon.jar"/>
 -      <classpathentry exported="true" kind="lib" path="lib/cdmlib-services-3.3.0-SNAPSHOT.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-commons-3.3.0-SNAPSHOT-sources.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-commons-3.3.0-SNAPSHOT.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-ext-3.3.0-SNAPSHOT-sources.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-ext-3.3.0-SNAPSHOT.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-io-3.3.0-SNAPSHOT-sources.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-io-3.3.0-SNAPSHOT.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-model-3.3.0-SNAPSHOT-sources.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-model-3.3.0-SNAPSHOT.jar" sourcepath="lib/cdmlib-model-3.3.0-SNAPSHOT-sources.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-persistence-3.3.0-SNAPSHOT-sources.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-persistence-3.3.0-SNAPSHOT.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-print-3.3.0-SNAPSHOT-sources.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-print-3.3.0-SNAPSHOT.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-remote-3.3.0-SNAPSHOT-sources.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-remote-3.3.0-SNAPSHOT.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-services-3.3.0-SNAPSHOT-sources.jar"/>
++      <classpathentry exported="true" kind="lib" path="lib/cdmlib-services-3.3.0-SNAPSHOT.jar" sourcepath="lib/cdmlib-services-3.3.0-SNAPSHOT-sources.jar"/>
        <classpathentry kind="output" path="target/classes"/>
  </classpath>
index df7875ca6d99b8a571f90d0ba61dd54934d3e66a,df7875ca6d99b8a571f90d0ba61dd54934d3e66a..a951ef9030fb6dfa797c384340a67361a46f2350
@@@ -26,8 -26,8 +26,8 @@@ import org.eclipse.ui.IEditorReference
  import org.eclipse.ui.PartInitException;
  import org.eclipse.ui.handlers.HandlerUtil;
  
--import eu.etaxonomy.taxeditor.editor.group.authority.CdmAuthorityEditorInput;
  import eu.etaxonomy.taxeditor.editor.group.authority.CdmAuthorityEditor;
++import eu.etaxonomy.taxeditor.editor.group.authority.CdmAuthorityEditorInput;
  import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
  import eu.etaxonomy.taxeditor.editor.key.KeyEditor;
  import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
index d9c202c9974a8198d26fb9e0218558caca3f2dce,d9c202c9974a8198d26fb9e0218558caca3f2dce..aa6dc659c686e2e0156a52e880c56f8c10557cfd
@@@ -17,8 -17,8 +17,8 @@@ import eu.etaxonomy.cdm.model.name.Taxo
  import eu.etaxonomy.cdm.model.taxon.Synonym;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent;
--import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
  import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
++import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
  import eu.etaxonomy.taxeditor.model.AbstractDataChangeBehaviour;
  import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
  
index 6db78f03df6db3863012bada0fca6d41e774b62c,74b3ff406ccfef11e45314e24b660548da919178..6a295e64e9a9763f8d9f779ea4d814aab2523b6c
@@@ -1,8 -1,8 +1,8 @@@
  /**
  * 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.
  */
@@@ -25,7 -25,7 +25,7 @@@ import eu.etaxonomy.cdm.api.service.ITa
  import eu.etaxonomy.cdm.api.service.ITaxonService;
  import eu.etaxonomy.cdm.model.common.CdmBase;
  import eu.etaxonomy.cdm.model.name.TaxonNameBase;
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.Synonym;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
  import eu.etaxonomy.cdm.model.taxon.TaxonBase;
@@@ -37,6 -37,6 +37,7 @@@ import eu.etaxonomy.taxeditor.model.Dat
  import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
  import eu.etaxonomy.taxeditor.store.CdmStore;
  
++
  /**
   * <p>TaxonEditorInput class.</p>
   *
  public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPersistableElement {
  
        private ConversationHolder conversation;
--      
++
        private TaxonNode taxonNode;
  
        private TaxonEditorInputDataChangeBehaviour dataChangeBehavior;
--      
++
        private TaxonBase initiallySelectedTaxonBase;
--      
++
        private TaxonEditorInput(TaxonNode taxonNode, ConversationHolder conversation){
                this.conversation = conversation;
                this.taxonNode = taxonNode;
        }
--      
  
--      
++
++
        /**
         * <p>NewInstance</p>
         *
                        throw e;
                }
        }
--      
++
      /**
--     * 
++     *
       * @param taxonNodeUuid
       * @param conversation
       * @return
       */
      private static TaxonEditorInput NewInstance(UUID taxonNodeUuid, ConversationHolder conversation){
--      
--      
++
++
        TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(taxonNodeUuid, null);
--              
++
                if(taxonNode == null){
                        EditorUtil.warningDialog("Not yet implemented", TaxonEditorInput.class, "Selected element is not type TaxonBase.");
                        return null;
--              }       
--              
++              }
++
        return new TaxonEditorInput(taxonNode, conversation);
      }
--    
++
      /**
       * <p>NewInstanceFromTaxonBase</p>
       *
       */
      public static TaxonEditorInput NewInstanceFromTaxonBase(UUID taxonBaseUuid){
        ConversationHolder conversation = CdmStore.createConversation();
--      
++
        TaxonEditorInput input = null;
--      
++
        TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).find(taxonBaseUuid);
        if(taxonBase.isOrphaned()) {
                EditorUtil.warningDialog("Orphaned Taxon", TaxonEditorInput.class, "This is an orphaned taxon i.e. a taxon that is not connected to a classification and not having any taxonomic relationships. Editing of orphaned taxon is currently not supported.");
        }
        else if(taxonBase.isInstanceOf(Taxon.class)){
                Taxon taxon = CdmBase.deproxy(taxonBase, Taxon.class);
--              
++
                if (taxon.isMisapplication()){
                        // TODO get accepted taxon
                        EditorUtil.info("trying to open Mispplied Name ");
--                      
++
                        Set<Taxon> acceptedTaxa = new HashSet<Taxon>();
                        Set<TaxonRelationship> relations = taxon.getRelationsFromThisTaxon();
                        for(TaxonRelationship relation : relations){
                                }
                        }
                        input =  getInputForMultipleTaxa(conversation, acceptedTaxa);
--                      
++
                }else{
                        input = getInputForMultipleNodes(conversation, taxon.getTaxonNodes());
                }
        }else if(taxonBase instanceof Synonym){
                Synonym synonym = (Synonym) taxonBase;
--              
++
                Set<Taxon> taxa = synonym.getAcceptedTaxa();
                input = getInputForMultipleTaxa(conversation, taxa);
        }
--      
++
        input.setInitiallySelectedTaxonBase(taxonBase);
--      
++
        return input;
      }
--    
++
        private static TaxonEditorInput getInputForMultipleNodes(ConversationHolder conversation, Set<TaxonNode> taxonNodes){
        if(taxonNodes.size() == 1){
                TaxonNode taxonNode = taxonNodes.iterator().next();
        }else if(taxonNodes.size() > 1){
                        TaxonNode taxonNode = ChooseFromMultipleTaxonNodesDialog.choose(taxonNodes);
                        if(taxonNode != null){
--                              return NewInstance(taxonNode.getUuid(), conversation);                  
++                              return NewInstance(taxonNode.getUuid(), conversation);
                        }
                }else if(taxonNodes.size() == 0){
                        // this is an undesired state
                }
        return null;
      }
--    
++
      private static TaxonEditorInput getInputForMultipleTaxa(ConversationHolder conversation, Set<Taxon> taxa){
        if(taxa.size() == 1){
                Taxon taxon = taxa.iterator().next();
                }
        return null;
      }
--    
++
      /**
       * <p>NewEmptyInstance</p>
       *
       */
      public static TaxonEditorInput NewEmptyInstance(UUID parentNodeUuid){
        ConversationHolder conversation = CdmStore.createConversation();
--              
++
                TaxonNameBase<?, ?> name = PreferencesUtil.getPreferredNomenclaturalCode().getNewTaxonNameInstance(null);
--              ITreeNode parentNode = CdmStore.getService(IClassificationService.class).getTreeNodeByUuid(parentNodeUuid);
--              
++              ITaxonTreeNode parentNode = CdmStore.getService(IClassificationService.class).getTreeNodeByUuid(parentNodeUuid);
++
                Taxon newTaxon = Taxon.NewInstance(name, parentNode.getReference());
-               TaxonNode newTaxonNode = parentNode.addChildTaxon(newTaxon, parentNode.getReference(), parentNode.getMicroReference(), null);
-               
+               TaxonNode newTaxonNode = parentNode.addChildTaxon(newTaxon, parentNode.getReference(), parentNode.getMicroReference());
 -              
++
                // add the new taxon to the editors persistence context
                UUID newTaxonNodeUuid = CdmStore.getService(ITaxonNodeService.class).save(newTaxonNode);
--              
++
                return new TaxonEditorInput(newTaxonNode, conversation);
      }
--      
++
        /* (non-Javadoc)
         * @see org.eclipse.ui.IEditorInput#exists()
         */
         *
         * @return a boolean.
         */
--      public boolean exists() {
++      @Override
++    public boolean exists() {
                return taxonNode != null;
        }
  
         *
         * @return a {@link org.eclipse.jface.resource.ImageDescriptor} object.
         */
--      public ImageDescriptor getImageDescriptor() {
++      @Override
++    public ImageDescriptor getImageDescriptor() {
                return null;
        }
  
         *
         * @return a {@link java.lang.String} object.
         */
--      public String getName() {
++      @Override
++    public String getName() {
                if(getTaxon() == null){
                        return null;
                }
                        return "New taxon";
                } else {
                        return name.getTitleCache();
--              }       
++              }
        }
  
        /* (non-Javadoc)
         *
         * @return a {@link org.eclipse.ui.IPersistableElement} object.
         */
--      public IPersistableElement getPersistable() {
++      @Override
++    public IPersistableElement getPersistable() {
  //            if(CdmStore.isActive()){
  //                    TaxonNode test = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(taxonNode.getUuid());
  //                    boolean isPersistable = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(taxonNode.getUuid()) != null;
         *
         * @return a {@link java.lang.String} object.
         */
--      public String getToolTipText() {
++      @Override
++    public String getToolTipText() {
                return getName();
        }
  
         * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
         */
        /** {@inheritDoc} */
--      public Object getAdapter(Class adapter) {
++      @Override
++    public Object getAdapter(Class adapter) {
  
                if (adapter == Taxon.class) {
                        return taxonNode.getTaxon();
                }
--              
++
                if (adapter == TaxonNode.class) {
                        return taxonNode;
                }
--              
++
                return null;
        }
--      
++
        /**
         * {@inheritDoc}
         *
         * Overrides equals to ensure that a taxon can only be edited by
         * one editor at a time.
         */
--      public boolean equals(Object obj) {
--              if (TaxonEditorInput.class.equals(obj.getClass()) 
++      @Override
++    public boolean equals(Object obj) {
++              if (TaxonEditorInput.class.equals(obj.getClass())
                                && getTaxon() != null
                                && getTaxon().equals(((TaxonEditorInput) obj).getTaxon())){
                        if(((TaxonEditorInput) obj).getInitiallySelectedTaxonBase() != null){
        public Taxon getTaxon(){
                return taxonNode.getTaxon();
        }
--      
++
        /**
         * <p>Getter for the field <code>taxonNode</code>.</p>
         *
        public TaxonNode getTaxonNode() {
                return taxonNode;
        }
--      
++
        /*
         * (non-Javadoc)
         * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
         *
         * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
         */
--      public ConversationHolder getConversationHolder() {
++      @Override
++    public ConversationHolder getConversationHolder() {
                return conversation;
        }
  
         * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
         */
        /** {@inheritDoc} */
--      public void update(CdmDataChangeMap events) {
++      @Override
++    public void update(CdmDataChangeMap events) {
                if(dataChangeBehavior == null){
                        dataChangeBehavior = new TaxonEditorInputDataChangeBehaviour(this);
                }
--              
++
                DataChangeBridge.handleDataChange(events, dataChangeBehavior);
        }
  
         *
         * @return a {@link java.lang.String} object.
         */
--      public String getFactoryId() {
++      @Override
++    public String getFactoryId() {
                return TaxonEditorInputFactory.getFactoryId();
        }
  
         * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento)
         */
        /** {@inheritDoc} */
--      public void saveState(IMemento memento) {
++      @Override
++    public void saveState(IMemento memento) {
                TaxonEditorInputFactory.saveState(memento, this);
        }
  
--    
++
      /**
       * <p>Setter for the field <code>initiallySelectedTaxonBase</code>.</p>
       *
        public TaxonBase getInitiallySelectedTaxonBase() {
                return initiallySelectedTaxonBase;
        }
--      
++
        @Override
        public String toString() {
                return String.format("%s[%s]", this.getClass().getSimpleName(), getTaxon());
index b4dafb7e7374874d2f83fd4509c3893e446600f8,3d40d7c2e68f8729b9296103fdaf480cf8e3abcc..a12ebd3bff02dd4eb79fba7479f888adce284649
@@@ -23,8 -24,8 +24,7 @@@ import eu.etaxonomy.cdm.model.common.Te
  import eu.etaxonomy.cdm.model.description.Feature;\r
  import eu.etaxonomy.cdm.model.description.FeatureNode;\r
  import eu.etaxonomy.cdm.model.description.FeatureTree;\r
- import eu.etaxonomy.cdm.model.description.Modifier;\r
  import eu.etaxonomy.cdm.model.description.State;\r
 -import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;\r
  import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;\r
  import eu.etaxonomy.taxeditor.store.CdmStore;\r
  import eu.etaxonomy.taxeditor.store.StoreUtil;\r
index 0e1e3be37fcb3a017cbd72e6d1f7f82cd0081bde,0e1e3be37fcb3a017cbd72e6d1f7f82cd0081bde..492e597fb1621aacefb488728c06fe5aacbdbc36
@@@ -23,13 -23,13 +23,11 @@@ import org.eclipse.jface.action.MenuMan
  import org.eclipse.jface.viewers.ISelection;
  import org.eclipse.jface.viewers.ISelectionProvider;
  import org.eclipse.jface.viewers.StructuredSelection;
--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.graphics.Color;
  import org.eclipse.swt.widgets.Composite;
--import org.eclipse.swt.widgets.Display;
  import org.eclipse.swt.widgets.Menu;
  import org.eclipse.ui.IEditorInput;
  import org.eclipse.ui.IEditorSite;
index 507d44cf7748c8ee5f137be80c1983f156a40819,507d44cf7748c8ee5f137be80c1983f156a40819..55c685bdfbc2213e4ddf4c10c1d312453b9e3036
@@@ -18,14 -18,14 +18,11 @@@ import org.eclipse.core.commands.IHandl
  import org.eclipse.core.commands.common.NotDefinedException;
  import org.eclipse.swt.widgets.Display;
  import org.eclipse.swt.widgets.Shell;
--import org.eclipse.ui.PartInitException;
--import org.eclipse.ui.forms.editor.FormEditor;
  import org.eclipse.ui.handlers.HandlerUtil;
  
  import eu.etaxonomy.cdm.model.common.CdmBase;
  import eu.etaxonomy.cdm.model.taxon.Synonym;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
--import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  import eu.etaxonomy.taxeditor.editor.EditorUtil;
  import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
  import eu.etaxonomy.taxeditor.editor.name.operation.SwapSynonymAndAcceptedOperation;
index fa39cab531a7475977055a068e3e35e49c88d1bb,ff4ff1fbd7f631b477dbb34b92aa8cd2add47955..5d8b351fdddda8a63fd5f34e275d05c4dabe0ce2
@@@ -1,8 -1,8 +1,8 @@@
  /**
  * 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,7 -18,7 +18,7 @@@ import org.eclipse.core.runtime.IStatus
  import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
  import eu.etaxonomy.cdm.api.service.ITaxonService;
  import eu.etaxonomy.cdm.api.service.exception.HomotypicalGroupChangeException;
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.Synonym;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
@@@ -36,37 -36,37 +36,37 @@@ import eu.etaxonomy.taxeditor.store.Sto
   * @version 1.0
   */
  public class ChangeSynonymToAcceptedTaxonOperation extends AbstractPersistentPostOperation {
--      
++
        private Taxon newTaxon;
        private Synonym synonym;
--      private ITreeNode parentNode;
++      private ITaxonTreeNode parentNode;
  
        private TaxonNode newNode;
  
        private Synonym[] synonymsInHomotypicalGroup;
--      
++
        /**
         * <p>Constructor for ChangeSynonymToAcceptedTaxonOperation.</p>
         *
         * @param label a {@link java.lang.String} object.
         * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
         * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
--       * @param parentNode a {@link eu.etaxonomy.cdm.model.taxon.ITreeNode} object.
++       * @param parentNode a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
         * @param synonym a {@link eu.etaxonomy.cdm.model.taxon.Synonym} object.
         * @param synonymsInHomotypicalGroup an array of {@link eu.etaxonomy.cdm.model.taxon.Synonym} objects.
         * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
         * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
         */
        public ChangeSynonymToAcceptedTaxonOperation(String label, IUndoContext undoContext,
--                      Taxon taxon, ITreeNode parentNode, Synonym synonym, Synonym[] synonymsInHomotypicalGroup, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
++                      Taxon taxon, ITaxonTreeNode parentNode, Synonym synonym, Synonym[] synonymsInHomotypicalGroup, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
                super(label, undoContext, postOperationEnabled, conversationEnabled);
  
                this.taxon = taxon;
                this.parentNode = parentNode;
--              this.synonym = synonym; 
++              this.synonym = synonym;
                this.synonymsInHomotypicalGroup = synonymsInHomotypicalGroup;
        }
--      
++
        /* (non-Javadoc)
         * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
         */
@@@ -74,7 -74,7 +74,7 @@@
        @Override
        public IStatus execute(IProgressMonitor monitor, IAdaptable info)
                        throws ExecutionException {
--              
++
                try {
                        newTaxon = CdmStore.getService(ITaxonService.class).changeSynonymToAcceptedTaxon(synonym, taxon, true, true, null, null);
                } catch (HomotypicalGroupChangeException e) {
                        return postExecute(null);
                }
                monitor.worked(20);
--              
++
                synonym.setSec(null);
-               newNode = parentNode.addChildTaxon(newTaxon, null, null, null);
-               
+               newNode = parentNode.addChildTaxon(newTaxon, null, null);
 -              
++
                if(synonymsInHomotypicalGroup != null){
                        Taxon taxon = newNode.getTaxon();
                        for (Synonym synonym : synonymsInHomotypicalGroup){
                                taxon.addHomotypicSynonym(synonym, null, null);
                        }
                }
--              
++
                monitor.worked(40);
  
                return postExecute(newNode);
        @Override
        public IStatus undo(IProgressMonitor monitor, IAdaptable info)
                        throws ExecutionException {
--              
++
                // TODO implement - biggest problem is that any window open for new taxon must be closed first
                StoreUtil.warn(this.getClass(), "Not yet implemented");
--              
++
                return postExecute(taxon);
        }
  
index 766c5cf8dfc0ab60daf4f42c4364afb0be16f5a2,766c5cf8dfc0ab60daf4f42c4364afb0be16f5a2..0c10b9ad7df145bd2f37f166c3d583d5a79120d6
@@@ -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,7 +31,6 @@@ import eu.etaxonomy.cdm.model.descripti
  import eu.etaxonomy.cdm.model.description.FeatureTree;
  import eu.etaxonomy.cdm.model.description.TaxonDescription;
  import eu.etaxonomy.taxeditor.editor.EditorUtil;
--import eu.etaxonomy.taxeditor.editor.UsageTermCollection;
  import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart;
  import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.CreateDescriptionElementOperation;
  import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
@@@ -42,7 -42,7 +41,7 @@@ import eu.etaxonomy.taxeditor.store.Cdm
   * <p>
   * DynamicFeatureMenu class.
   * </p>
-- * 
++ *
   * @author n.hoffmann
   * @created 17.04.2009
   * @version 1.0
@@@ -56,7 -56,7 +55,7 @@@ public class DynamicFeatureMenu extend
  
        /*
         * (non-Javadoc)
--       * 
++       *
         * @see
         * org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
         */
@@@ -65,7 -65,7 +64,8 @@@
        protected IContributionItem[] getContributionItems() {
  
                return new IContributionItem[] { new ContributionItem() {
--                      public void fill(Menu menu, int index) {
++                      @Override
++            public void fill(Menu menu, int index) {
  
                                ISelection selection = selectionService
                                                .getSelection(DescriptiveViewPart.ID);
@@@ -90,7 -90,7 +90,7 @@@
                                                createMenuItem(menu, featureNode.getFeature());
  
                                                // add possible children to the menu
--                                              for (FeatureNode childNode : featureNode.getChildren()) {
++                                              for (FeatureNode childNode : featureNode.getChildNodes()) {
                                                        createMenuItem(menu, childNode.getFeature());
                                                }
                                        } else if (selectedElement instanceof DescriptionElementBase) {
                menuItem.setText(deproxiedFeature.getLabel());
                menuItem.addSelectionListener(new SelectionListener() {
  
--                      public void widgetDefaultSelected(SelectionEvent e) {
++                      @Override
++            public void widgetDefaultSelected(SelectionEvent e) {
                        }
  
--                      public void widgetSelected(SelectionEvent ev) {
++                      @Override
++            public void widgetSelected(SelectionEvent ev) {
                                Event event = new Event();
                                event.data = deproxiedFeature;
                                try {
  
        /**
         * Retrieves the feature tree associated with the given description
--       * 
++       *
         * TODO as of now this is always the same thing because feature trees may
         * not be associated to descriptions yet.
--       * 
++       *
         * @param description
         * @return
         */
index 7d16f19040578474510ab27b9b4278d33e2539e6,7d16f19040578474510ab27b9b4278d33e2539e6..76f8bc0ab6ce1065f2ef26f27f0fff02f36c81a2
@@@ -18,8 -18,8 +18,6 @@@ import org.eclipse.jface.viewers.Styled
  import org.eclipse.swt.graphics.Image;
  import org.eclipse.ui.navigator.IDescriptionProvider;
  
--import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
--import eu.etaxonomy.cdm.model.common.LanguageString;
  import eu.etaxonomy.cdm.model.taxon.Classification;
  
  /**
index de5a605955ee26b148694a98058d20a4b2ee277b,de5a605955ee26b148694a98058d20a4b2ee277b..158423da0154ce0701d6049670909d4b8721e17b
@@@ -12,9 -12,9 +12,9 @@@ package eu.etaxonomy.taxeditor.navigati
  
  import org.apache.log4j.Logger;
  import org.eclipse.jface.viewers.ColumnLabelProvider;
++import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
  import org.eclipse.jface.viewers.ILabelProvider;
  import org.eclipse.jface.viewers.StyledString;
--import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
  import org.eclipse.swt.graphics.Image;
  import org.eclipse.ui.navigator.IDescriptionProvider;
  
index b50082362db6064b6c07a36c6fe6086879e14e24,b50082362db6064b6c07a36c6fe6086879e14e24..9816d777b3cc18df0912e5718a9b2c1d8bbf955a
@@@ -1,8 -1,8 +1,8 @@@
  /**
  * 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.
  */
@@@ -21,7 -21,7 +21,7 @@@ import org.eclipse.ui.IEditorPart
  
  import eu.etaxonomy.cdm.model.common.CdmBase;
  import eu.etaxonomy.cdm.model.name.TaxonNameBase;
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
  import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent;
  import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
@@@ -38,13 -38,13 +38,13 @@@ import eu.etaxonomy.taxeditor.navigatio
   * @created 01.04.2009
   * @version 1.0
   */
--public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviour implements 
++public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviour implements
                IDataChangeBehavior {
  
        private TaxonNavigator source;
  
        private Set<CdmBase> staleObjects;
--      
++
        /**
         * <p>Constructor for TaxonNavigatorDataChangeBehavior.</p>
         *
@@@ -53,7 -53,7 +53,7 @@@
        public TaxonNavigatorDataChangeBehavior(TaxonNavigator taxonNavigator) {
                source = taxonNavigator;
        }
--      
++
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.store.model.IDataChangeBehavior#isRelevant(java.lang.Object, eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
         */
         * @return a boolean.
         */
        public boolean isRelevant(CdmDataChangeMap events) {
--              
++
                // TODO react only on insert/update/delete of taxon and synonym objects
                // and on update of name objects
                boolean relevant = false;
                staleObjects = new HashSet<CdmBase>();
--              
++
                for(CdmDataChangeEvent event : events.getAllEvents()){
                        EventType eventType = event.getEventType();
                        CdmBase eventEntity = event.getEntity();
--                      
++
                        // all tree node changes are relevant
--                      if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE) 
--                                      && event.getEntity() instanceof ITreeNode){
++                      if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE)
++                                      && event.getEntity() instanceof ITaxonTreeNode){
                                return true;
                        }
--                      
++
                        // name updates of the accepted taxon of open editors are relevant
                        if(eventType == EventType.UPDATE){
                                TaxonNameBase name = null;
                                }else{
                                        continue;
                                }
--                              
++
                                Set<IEditorPart> openEditors = NavigationUtil.getOpenEditors();
                                for(IEditorPart editor : openEditors){
--                                      
++
                                        if(name.equals(((TaxonEditorInput) editor.getEditorInput()).getTaxon().getName())){
                                                return true;
                                        }
                                }
                        }
--                      
--                      
++
++
  //                    if(eventType == EventType.UPDATE){
  //                            relevant = true;
  //                            CdmBase entity = event.getEntity();
  //                            }
  //                    }
                }
--              
++
                return false;
--              
++
                // @deprecated
                // react on everything except load
  //            if(events.sizeByEventType(EventType.INSERT) > 0){
         * @see eu.etaxonomy.taxeditor.store.model.IDataChangeBehavior#reactOnDataChange(java.lang.Object, eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
         */
        /** {@inheritDoc} */
--      public void reactOnDataChange(CdmDataChangeMap events) {
++      @Override
++    public void reactOnDataChange(CdmDataChangeMap events) {
                if(isRelevant(events)){
  
                        final Display display = Display.getCurrent();
                        Job job = new Job("Updating Taxon Navigator") {
--                              
++
                                @Override
                                protected IStatus run(IProgressMonitor monitor) {
                                        monitor.beginTask("Updating Taxon Navigator", 3);
                                        monitor.worked(1);
--                                      
++
                                        // clear the session completely
                                        monitor.subTask("Clearing Taxon Navigators session");
                                        display.asyncExec(new Runnable() {
--                                               public void run() {
++                                               @Override
++                        public void run() {
                                                         source.getConversationHolder().clear();
                                                 }
--                                      });                                     
--                                      // FIXME completely clearing the session is a brute force approach. 
++                                      });
++                                      // FIXME completely clearing the session is a brute force approach.
                                        // It would be much more elegant to clear only those elements that have been changed.
                                        // I could not get that to work but we should consider workin on this because we might
                                        // run into serious performance issues, especially when it comes to large trees
                                        // at least, we moved this to a job so it can run in a background thred
                                        // seems to improve the situation but not sure if final solution
                                        monitor.worked(1);
--                                      
++
                                        monitor.subTask("Refreshing viewer");
--                                      
++
                                        display.asyncExec(new Runnable() {
--                                          public void run() {
++                                          @Override
++                        public void run() {
                                                source.refresh();
                                            }
                                        });
--                                      
--                                      
--                                      
++
++
++
                                        monitor.worked(1);
                                        monitor.done();
                                        return Status.OK_STATUS;
                                }
                        };
--                      
++
                        job.setPriority(Job.SHORT);
                        job.schedule();
--                      
++
                }
        }
  }
index 7819132c18c671174cd9eb9a8e2f677b56fbcbeb,7819132c18c671174cd9eb9a8e2f677b56fbcbeb..c7a431daf0b0df9e1c6b47149300112a9fe82d91
@@@ -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.
  */
@@@ -15,7 -15,7 +15,7 @@@ import org.eclipse.jface.viewers.ITreeC
  import org.eclipse.jface.viewers.Viewer;
  
  import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  
  /**
@@@ -30,29 -30,29 +30,32 @@@ public class TaxonNodeContentProvider i
                        .getLogger(TaxonNodeContentProvider.class);
  
        private static final Object[] NO_CHILDREN = new Object[0];
--      
++
        /** {@inheritDoc} */
--      public Object[] getChildren(Object parentElement) {
--              Object[] children = null;               
--              
--              if(parentElement instanceof ITreeNode){
--                      ITreeNode treeNode = (ITreeNode) HibernateProxyHelper.deproxy(parentElement);
++      @Override
++    public Object[] getChildren(Object parentElement) {
++              Object[] children = null;
++
++              if(parentElement instanceof ITaxonTreeNode){
++                  ITaxonTreeNode treeNode = (ITaxonTreeNode) HibernateProxyHelper.deproxy(parentElement);
                        children = treeNode.getChildNodes().toArray();
                }
--              
++
                return children != null ? children : NO_CHILDREN;
        }
  
        /** {@inheritDoc} */
--      public Object getParent(Object element) {
++      @Override
++    public Object getParent(Object element) {
                if(element instanceof TaxonNode){
                        return ((TaxonNode) element).getParent();
--              }               
++              }
                return null;
        }
  
        /** {@inheritDoc} */
--      public boolean hasChildren(Object element) {
++      @Override
++    public boolean hasChildren(Object element) {
                if(element instanceof TaxonNode){
                        return ((TaxonNode) element).getCountChildren() > 0;
                }
        }
  
        /** {@inheritDoc} */
--      public Object[] getElements(Object inputElement) {
++      @Override
++    public Object[] getElements(Object inputElement) {
                return this.getChildren(inputElement);
        }
  
        /**
         * <p>dispose</p>
         */
--      public void dispose() {
++      @Override
++    public void dispose() {
        }
  
        /** {@inheritDoc} */
--      public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
++      @Override
++    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }
  }
index 7774c2c1eebeff4086c797b983bc926214b95948,7774c2c1eebeff4086c797b983bc926214b95948..d4b243b01ccd37d1e83ac032d969e248ebc95704
  
  package eu.etaxonomy.taxeditor.navigation.navigator;
  
--import org.apache.log4j.Logger;
  import org.eclipse.jface.viewers.ColumnLabelProvider;
++import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
  import org.eclipse.jface.viewers.ILabelProvider;
  import org.eclipse.jface.viewers.StyledString;
--import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
  import org.eclipse.jface.viewers.StyledString.Styler;
--import org.eclipse.swt.SWT;
  import org.eclipse.swt.graphics.Image;
  import org.eclipse.swt.graphics.TextStyle;
  import org.eclipse.ui.navigator.IDescriptionProvider;
@@@ -27,7 -27,7 +25,6 @@@ import eu.etaxonomy.cdm.model.common.Cd
  import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
--import eu.etaxonomy.cdm.persistence.hibernate.permission.Operation;
  import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
  import eu.etaxonomy.taxeditor.preference.Resources;
  import eu.etaxonomy.taxeditor.security.RequiredPermissions;
index b0d7bb74f6297ecd44fbb02f2b186383790cc739,b0d7bb74f6297ecd44fbb02f2b186383790cc739..dd7c51520345b8bd71e85b361868f3619841d82e
@@@ -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.
  */
@@@ -28,7 -28,7 +28,7 @@@ import org.eclipse.ui.navigator.CommonD
  import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
  
  import eu.etaxonomy.cdm.model.common.CdmBase;
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
  import eu.etaxonomy.taxeditor.navigation.navigator.operation.MoveTaxonOperation;
@@@ -48,7 -48,7 +48,7 @@@ public class TreeNodeDropAdapterAssista
  
        /** Constant <code>ID="eu.etaxonomy.taxeditor.navigation.navig"{trunked}</code> */
        public static final String ID = "eu.etaxonomy.taxeditor.navigation.navigator.dropassistant"; //$NON-NLS-1$
--      
++
        /* (non-Javadoc)
         * @see org.eclipse.ui.navigator.CommonDropAdapterAssistant#handleDrop(org.eclipse.ui.navigator.CommonDropAdapter, org.eclipse.swt.dnd.DropTargetEvent, java.lang.Object)
         */
        @Override
        public IStatus handleDrop(CommonDropAdapter dropAdapter,
                        DropTargetEvent dropTargetEvent, Object target) {
--                      
--              if (target instanceof ITreeNode) {
++
++              if (target instanceof ITaxonTreeNode) {
                        Set<TaxonNode> taxonNodes = getSelectedTaxa();
--                      ITreeNode targetTreeNode = (ITreeNode) target;
--                      if(taxonNodes != null)
--                              return moveTaxon(taxonNodes, targetTreeNode);
++                      ITaxonTreeNode targetTreeNode = (ITaxonTreeNode) target;
++                      if(taxonNodes != null) {
++                return moveTaxon(taxonNodes, targetTreeNode);
++            }
                }
--                                                      
++
                return Status.CANCEL_STATUS;
        }
--      
++
        private Set<TaxonNode> getSelectedTaxa(){
--              HashSet<TaxonNode> taxonNodes = new HashSet<TaxonNode>();               
--              
++              HashSet<TaxonNode> taxonNodes = new HashSet<TaxonNode>();
++
                ISelection selection = LocalSelectionTransfer.getTransfer().getSelection();
                if (selection instanceof TreeSelection) {
--              
++
                        Iterator selectionIterator = ((TreeSelection) selection).iterator();
--                              
++
                        while (selectionIterator.hasNext()){
                                Object object = selectionIterator.next();
                                if(object instanceof TaxonNode){
@@@ -92,8 -92,8 +93,8 @@@
        /** {@inheritDoc} */
        @Override
        public IStatus validateDrop(Object target, int operation,
--                      TransferData transferType) {    
--              if (target instanceof ITreeNode) {
++                      TransferData transferType) {
++              if (target instanceof ITaxonTreeNode) {
                        // do not allow to drop onto itself
                        for(TaxonNode taxonNode : getSelectedTaxa()){
                                if (taxonNode.equals(target)) {
                                }
                        }
                        return Status.OK_STATUS;
--              }               
++              }
                return Status.CANCEL_STATUS;
        }
--      
++
  
        /**
         * @param childTaxonNode
         * @param parentTaxon
         * @return
         */
--      private IStatus moveTaxon(Set<TaxonNode> taxonNodes, ITreeNode targetITreeNode) {
--              
++      private IStatus moveTaxon(Set<TaxonNode> taxonNodes, ITaxonTreeNode targetITaxonTreeNode) {
++
                TaxonNavigator taxonNavigator;
                taxonNavigator = (TaxonNavigator) NavigationUtil.showView(TaxonNavigator.ID);
--              
--              if(targetITreeNode instanceof TaxonNode){
--              
--                      TaxonNode targetTaxonNode = (TaxonNode) targetITreeNode;
--                      
++
++              if(targetITaxonTreeNode instanceof TaxonNode){
++
++                      TaxonNode targetTaxonNode = (TaxonNode) targetITaxonTreeNode;
++
  //                    for(TaxonNode taxonNode : taxonNodes){
  //                            if (taxonNode.equals(targetTaxonNode)) {
  //                                    return Status.CANCEL_STATUS;
  //                            }
  //                    }
--                      
++
                        // Make sure parent taxon does not have unsaved changes
                        if (NavigationUtil.isDirty(targetTaxonNode)){
                                MessageDialog.openWarning(NavigationUtil.getShell(), "Unsaved Parent Taxon", "There are unsaved " +
                                "changes in the parent taxon. Pleas save first.");
                                return Status.CANCEL_STATUS;
                        }
--                      
--                      
++
++
                        // Make sure parentTaxon is not the drop target
  //                    if (!childTaxonNode.isTopmostNode() && childTaxonNode.getParent().equals(targetTaxonNode)){
  //                            return Status.CANCEL_STATUS;
  //                    }
--                      
++
                        // Make sure taxon is not being dropped onto itself
  //                    if (childTaxonNode.equals(targetTaxonNode)) {
  //                            return Status.CANCEL_STATUS;
  //                    }
--                      
--                      
  
--              }       
--              
++
++
++              }
++
                IUndoContext workspaceUndoContext = NavigationUtil.getWorkbenchUndoContext();
                if (workspaceUndoContext == null) {
                        logger.error("Workspace undo context is null. DND operation cancelled");
                }
  
                AbstractPostOperation operation = new MoveTaxonOperation
--                              ("Move Taxon", workspaceUndoContext, taxonNodes, targetITreeNode, this, taxonNavigator);
--              NavigationUtil.executeOperation(operation);     
--              
--              logger.info("Moved taxa to new parent " + targetITreeNode);
++                              ("Move Taxon", workspaceUndoContext, taxonNodes, targetITaxonTreeNode, this, taxonNavigator);
++              NavigationUtil.executeOperation(operation);
++
++              logger.info("Moved taxa to new parent " + targetITaxonTreeNode);
                return Status.OK_STATUS;
        }
  
         * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
         */
        /** {@inheritDoc} */
--      public boolean postOperation(CdmBase objectAffectedByOperation) {
++      @Override
++    public boolean postOperation(CdmBase objectAffectedByOperation) {
                return true;
        }
  
         *
         * @return a boolean.
         */
--      public boolean onComplete() {
++      @Override
++    public boolean onComplete() {
                // TODO Auto-generated method stub
                return false;
        }
index aaf3e6de801c5d5a80c213a35638177da51725b0,aaf3e6de801c5d5a80c213a35638177da51725b0..7e0b59b635f615afae34a332deb3f4b465b5f330
@@@ -9,8 -9,8 +9,6 @@@
  */\r
  package eu.etaxonomy.taxeditor.navigation.navigator.handler;\r
  \r
--import java.util.Iterator;\r
--\r
  import org.eclipse.core.commands.AbstractHandler;\r
  import org.eclipse.core.commands.ExecutionEvent;\r
  import org.eclipse.core.commands.ExecutionException;\r
@@@ -20,11 -20,11 +18,7 @@@ import org.eclipse.core.runtime.IStatus
  import org.eclipse.jface.viewers.IStructuredSelection;\r
  import org.eclipse.ui.handlers.HandlerUtil;\r
  \r
--import eu.etaxonomy.cdm.model.common.TermBase;\r
--import eu.etaxonomy.cdm.model.taxon.Taxon;\r
--import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
--import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermEditor;\r
  import eu.etaxonomy.taxeditor.navigation.NavigationUtil;\r
  import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator;\r
  import eu.etaxonomy.taxeditor.navigation.navigator.operation.CopyOperation;\r
index 86ed939b6b85cb6cd286eaed0706a8e671025d51,86ed939b6b85cb6cd286eaed0706a8e671025d51..a1a4425b55e1db569150557e442d51257c639d67
@@@ -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.
  */
@@@ -29,7 -29,7 +29,7 @@@ import org.eclipse.ui.IWorkbenchPage
  import org.eclipse.ui.PartInitException;
  import org.eclipse.ui.handlers.HandlerUtil;
  
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
  import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
@@@ -50,57 -50,57 +50,59 @@@ public class DeleteHandler extends Abst
        private TaxonNavigator taxonNavigator;
  
        /** {@inheritDoc} */
--      public Object execute(ExecutionEvent event) throws ExecutionException {
--              
++      @Override
++    public Object execute(ExecutionEvent event) throws ExecutionException {
++
                activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
--              
++
                taxonNavigator = NavigationUtil.showNavigator();
--                              
++
                TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event);
--              
++
                String plural = selection.size() > 1 ? "s" : "";
                // Prompt user for confirmation
                if(! MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), "Confirm Deletion", "Are you sure you want to delete the selected node" + plural +"?")){
                        return null;
                }
--              
++
                Iterator selectionIterator = selection.iterator();
--              Set<ITreeNode> treeNodes = new HashSet<ITreeNode>();
--              
++              Set<ITaxonTreeNode> treeNodes = new HashSet<ITaxonTreeNode>();
++
                while (selectionIterator.hasNext()){
                        Object object = selectionIterator.next();
--                      if(object instanceof ITreeNode)
--                              treeNodes.add((ITreeNode) object);
++                      if(object instanceof ITaxonTreeNode) {
++                treeNodes.add((ITaxonTreeNode) object);
++            }
                }
--                      
++
                AbstractPostOperation operation = null;
                try {
                        operation = new DeleteOperation(
--                                      event.getCommand().getName(), NavigationUtil.getUndoContext(), 
++                                      event.getCommand().getName(), NavigationUtil.getUndoContext(),
                                        treeNodes, taxonNavigator, taxonNavigator);
--                      
++
                        IStatus status = NavigationUtil.executeOperation(operation);
--                      
--                      
++
++
                        // FIXME is there a better place for this code?
                        if (status == Status.OK_STATUS){
--                              for (ITreeNode treeNode : treeNodes){
++                              for (ITaxonTreeNode treeNode : treeNodes){
                                        if(treeNode instanceof TaxonNode) {
                                                closeObsoleteEditor((TaxonNode) treeNode);
                                        }
                                }
                        }
--              
++
                } catch (NotDefinedException e) {
                        NavigationUtil.warn(getClass(), "Command name not set");
                }
                return null;
        }
--      
++
        private void closeObsoleteEditor(TaxonNode taxonNode){
                for (IEditorReference ref : activePage.getEditorReferences()) {
                        try {
--                              IEditorInput input = ref.getEditorInput(); 
++                              IEditorInput input = ref.getEditorInput();
                                if (input instanceof TaxonEditorInput) {
                                        TaxonNode node = ((TaxonEditorInput) input).getTaxonNode();
                                        if (taxonNode.equals(node)) {
index a514c8ce339608310f34f22bc31b311248a52be3,a514c8ce339608310f34f22bc31b311248a52be3..25c8632a12dfa92dbc5e765b22677961b4ef9cf0
@@@ -11,11 -11,11 +11,6 @@@ package eu.etaxonomy.taxeditor.navigati
  \r
  import org.eclipse.core.commands.ExecutionException;\r
  import org.eclipse.core.commands.operations.IUndoContext;\r
--\r
--import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
--import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;\r
--import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
--\r
  import org.eclipse.core.runtime.IAdaptable;\r
  import org.eclipse.core.runtime.IProgressMonitor;\r
  import org.eclipse.core.runtime.IStatus;\r
@@@ -23,6 -23,6 +18,10 @@@ import org.eclipse.swt.dnd.Clipboard
  import org.eclipse.swt.dnd.TextTransfer;\r
  import org.eclipse.swt.dnd.Transfer;\r
  \r
++import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
++import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;\r
++import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
++\r
  \r
  /**\r
   * @author l.morris\r
index 381dbf6b1fa04a46bc33a0f47e83104c7210bfdf,381dbf6b1fa04a46bc33a0f47e83104c7210bfdf..eab39d5f0d4ed09b2e123eb755a6bc313c7d8f69
@@@ -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.
  */
@@@ -21,7 -21,7 +21,7 @@@ import org.eclipse.core.runtime.IStatus
  import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
  import eu.etaxonomy.cdm.api.service.IClassificationService;
  import eu.etaxonomy.cdm.model.taxon.Classification;
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation;
  import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
@@@ -36,10 -36,10 +36,10 @@@ import eu.etaxonomy.taxeditor.store.Sto
   * @version 1.0
   */
  public class DeleteOperation extends AbstractPersistentPostOperation{
--      
--      private Set<ITreeNode> treeNodes;
  
--      
++      private Set<ITaxonTreeNode> treeNodes;
++
++
        /**
         * <p>Constructor for DeleteTreeNodeOperation.</p>
         *
         * @param treeNodes a {@link java.util.Set} object.
         */
        public DeleteOperation(String label, IUndoContext undoContext,
--                      Set<ITreeNode> treeNodes,
++                      Set<ITaxonTreeNode> treeNodes,
                        IPostOperationEnabled postOperationEnabled,
                        IConversationEnabled conversationEnabled) {
                super(label, undoContext, postOperationEnabled, conversationEnabled);
                this.treeNodes = treeNodes;
        }
  
--      
++
        /* (non-Javadoc)
         * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
         */
@@@ -68,7 -68,7 +68,7 @@@
  
                bind();
                monitor.worked(20);
--        for (ITreeNode treeNode : treeNodes){
++        for (ITaxonTreeNode treeNode : treeNodes){
                        if(treeNode instanceof TaxonNode){
                                ((TaxonNode) treeNode).delete();
                        }else if(treeNode instanceof Classification){
index 6bf1a5deb460e829737a2e5d53fed52ad04ee70e,5fc9af8317ea992fee407ef71c761f9f0c02b9e1..87df0560eeb31d7313dc83b478ea83196c7c670e
@@@ -1,8 -1,8 +1,8 @@@
  /**
  * 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.
  */
@@@ -21,7 -21,7 +21,7 @@@ import org.eclipse.core.runtime.IStatus
  import org.eclipse.core.runtime.Status;
  
  import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.IllegalAncestryException;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation;
@@@ -36,16 -36,16 +36,16 @@@ import eu.etaxonomy.taxeditor.store.Sto
   * @version 1.0
   */
  public class MoveTaxonOperation extends AbstractPersistentPostOperation {
--      
++
        /**
         * A reference to the new taxonomical parent.
         */
--      private ITreeNode newParentTreeNode;
++      private ITaxonTreeNode newParentTreeNode;
        /**
         * A reference to the former taxonomical parents
         */
--      private Map<TaxonNode, ITreeNode> oldParentTreeNodes;
--      
++      private Map<TaxonNode, ITaxonTreeNode> oldParentTreeNodes;
++
        private Set<TaxonNode> taxonNodes;
  
        /**
         * @param label a {@link java.lang.String} object.
         * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
         * @param taxonNodes a {@link java.util.Set} object.
--       * @param newParentTreeNode a {@link eu.etaxonomy.cdm.model.taxon.ITreeNode} object.
++       * @param newParentTreeNode a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
         * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
         * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
         */
        public MoveTaxonOperation(String label, IUndoContext undoContext,
--                      Set<TaxonNode> taxonNodes, ITreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
++                      Set<TaxonNode> taxonNodes, ITaxonTreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
                super(label, undoContext, postOperationEnabled, conversationEnabled);
  
                this.taxonNodes = taxonNodes;
--              
++
                this.newParentTreeNode = newParentTreeNode;
--              
--              // Save old parent ITreeNodes for undo
--              oldParentTreeNodes = new HashMap<TaxonNode, ITreeNode>();
++
++              // Save old parent ITaxonTreeNodes for undo
++              oldParentTreeNodes = new HashMap<TaxonNode, ITaxonTreeNode>();
                for(TaxonNode taxonNode : taxonNodes){
                        this.oldParentTreeNodes.put(taxonNode, taxonNode.getParent());
                }
        }
--      
++
        /* (non-Javadoc)
         * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
         */
                        throws ExecutionException {
                bind();
                monitor.worked(20);
--              
++
                try {
                        for (TaxonNode taxonNode : taxonNodes){
--                              TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode, 
-                                               newParentTreeNode.getReference(), newParentTreeNode.getMicroReference(), 
-                                               taxonNode.getSynonymToBeUsed());
++                              TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode,
+                                               newParentTreeNode.getReference(), newParentTreeNode.getMicroReference());
                                taxonNodes.add(newTaxonNode);
                                monitor.worked(2);
                        }
@@@ -95,7 -94,7 +94,7 @@@
                        StoreUtil.warningDialog("Illegal ancestry", this, e.getMessage());
                }
                monitor.worked(40);
--              
++
                return postExecute(null);
        }
  
        public IStatus undo(IProgressMonitor monitor, IAdaptable info)
                        throws ExecutionException {
                StoreUtil.warn(this.getClass(), "Not implemented yet.");
--              
--              // iterate over oldParentTreeNodes, delete each TaxonNode from its actual parent and add to its former parent           
--              
++
++              // iterate over oldParentTreeNodes, delete each TaxonNode from its actual parent and add to its former parent
++
                return Status.OK_STATUS;
        }
  }
index 3ae83c87f0de4d181344c62d10041351c660d707,0bd7e6d0027f0166eee038ebcbf1784a582081cc..98915188d46aafba3974f227add2b43d0c12f2c1
@@@ -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.
  */
@@@ -20,7 -20,7 +20,7 @@@ import org.eclipse.core.runtime.Status
  import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
  import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
  import eu.etaxonomy.cdm.model.name.TaxonNameBase;
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
@@@ -38,11 -38,11 +38,11 @@@ import eu.etaxonomy.taxeditor.store.Sto
   */
  @Deprecated // we do not undo creation of elements
  public class CreateTaxonNode extends AbstractPersistentPostOperation {
--      
++
        private Taxon newTaxon;
--      
++
        private TaxonNode childTaxonNode;
--      
++
        /**
         * Add a name to a taxonomic tree
         *
         * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
         * @param name a {@link eu.etaxonomy.cdm.model.name.TaxonNameBase} object.
         * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
--       * @param parentNode a {@link eu.etaxonomy.cdm.model.taxon.ITreeNode} object.
++       * @param parentNode a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
         * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
         */
        public CreateTaxonNode(String label, IUndoContext undoContext,
--                      ITreeNode parentNode, TaxonNameBase<?, ?> name, IPostOperationEnabled postOperationEnabled,
++              ITaxonTreeNode parentNode, TaxonNameBase<?, ?> name, IPostOperationEnabled postOperationEnabled,
                        IConversationEnabled conversationEnabled) {
                super(label, undoContext, parentNode, postOperationEnabled, conversationEnabled);
--              
++
                newTaxon = Taxon.NewInstance(name, null);
        }
--      
++
        /**
         * Add a taxon to a taxonomic tree
         *
         * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
         * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
         * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
--       * @param parentNode a {@link eu.etaxonomy.cdm.model.taxon.ITreeNode} object.
++       * @param parentNode a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
         * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
         */
        public CreateTaxonNode(String label, IUndoContext undoContext,
--                      ITreeNode parentNode, Taxon taxon, IPostOperationEnabled postOperationEnabled,
++              ITaxonTreeNode parentNode, Taxon taxon, IPostOperationEnabled postOperationEnabled,
                        IConversationEnabled conversationEnabled) {
                super(label, undoContext, parentNode, postOperationEnabled, conversationEnabled);
--              
++
                this.newTaxon = taxon;
        }
  
                        // add the taxon
                        bind();
                        monitor.worked(20);
-                       childTaxonNode = parentNode.addChildTaxon(newTaxon, parentNode.getReference(), parentNode.getMicroReference(), null);
-               
+                       childTaxonNode = parentNode.addChildTaxon(newTaxon, parentNode.getReference(), parentNode.getMicroReference());
 -              
++
                        monitor.worked(40);
  
                        CdmStore.getService(ITaxonNodeService.class).saveOrUpdate(childTaxonNode);
--                      
++
                        return postExecute(childTaxonNode);
                }catch(Exception e){
                        NavigationUtil.errorDialog("Could not create taxon node", getClass(), e.getLocalizedMessage(), e);
                        return Status.CANCEL_STATUS;
--              }               
++              }
        }
  
        /* (non-Javadoc)
        @Override
        public IStatus undo(IProgressMonitor monitor, IAdaptable info)
                        throws ExecutionException {
--              
++
                StoreUtil.warn(this.getClass(), "Not yet implemented.");
                return null;
        }
index a8278c654fc451051195f3c706b4cab7fe137e44,a8278c654fc451051195f3c706b4cab7fe137e44..02875a7be3c52d923c398f1d2e9b982c9201d46a
@@@ -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.
  */
@@@ -61,7 -61,7 +61,7 @@@ public class FeatureTreeContentProvide
                        List<FeatureNode> children = ((FeatureTree) parentElement).getRootChildren();
                        return children.toArray();
                }else if(parentElement instanceof FeatureNode){
--                      List<FeatureNode> children = ((FeatureNode) parentElement).getChildren();
++                      List<FeatureNode> children = ((FeatureNode) parentElement).getChildNodes();
                        return children.toArray();
                }else if(parentElement instanceof List){
                        return ((List) parentElement).toArray();
index 3072f460e780d09b9192018d6021e66136bce989,3072f460e780d09b9192018d6021e66136bce989..308d27587fd5277578bd2ac18c39862e718ce562
@@@ -49,7 -49,7 +49,6 @@@ import org.eclipse.ui.progress.IWorkben
  import org.eclipse.ui.themes.ITheme;
  import org.eclipse.ui.themes.IThemeManager;
  
--import eu.etaxonomy.cdm.model.common.TermBase;
  import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
  import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
  import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
index 328f57a227ff68de1d8e68e25783ffa19dfac312,2bfc537d4b8682219402fd459a2505beaeb3796b..1fc1cfd18f7aabb93f571d1deb53c7c7e0f859f0
@@@ -19,7 -19,7 +19,6 @@@ import eu.etaxonomy.cdm.api.service.Def
  import eu.etaxonomy.cdm.api.service.DefaultQuantitativeDescriptionBuilder;
  import eu.etaxonomy.cdm.api.service.DescriptionBuilder;
  import eu.etaxonomy.cdm.common.CdmUtils;
- import eu.etaxonomy.cdm.model.common.DescriptionElementSource;
 -import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
  import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
  import eu.etaxonomy.cdm.model.common.ISourceable;
  import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
@@@ -33,6 -33,6 +32,7 @@@ import eu.etaxonomy.cdm.model.descripti
  import eu.etaxonomy.cdm.model.description.CommonTaxonName;
  import eu.etaxonomy.cdm.model.description.DescriptionBase;
  import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
++import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
  import eu.etaxonomy.cdm.model.description.Distribution;
  import eu.etaxonomy.cdm.model.description.Feature;
  import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
index 900665e9e54e599c08c09e78cc862039c3863490,900665e9e54e599c08c09e78cc862039c3863490..ce88d1cbc473a87d87bbc713427f5b12d65a5ef7
@@@ -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.
  */
@@@ -35,11 -35,11 +35,11 @@@ import eu.etaxonomy.cdm.model.descripti
   * @version 1.0
   */
  public class FeatureNodeContainer{
--      
--      
--      
++
++
++
        private FeatureNodeContainer parent;
--      
++
  
  
        private FeatureNode featureNode;
  
        private FeatureNodeContainerTree containerTree;
  
--      
++
        /**
         * @param description
         */
        protected FeatureNodeContainer(FeatureNodeContainerTree containerTree) {
--              this.containerTree = containerTree; 
++              this.containerTree = containerTree;
                this.containerTree.addContainer(this);
        }
--      
--      
++
++
        /**
--       * Recursively traverse a branch of a feature tree and check if there are 
--       * 
++       * Recursively traverse a branch of a feature tree and check if there are
++       *
         * @param featureNode
--       * @param description 
++       * @param description
         * @return
         */
        protected void findLeaves(FeatureNode featureNode) {
                if(featureNode.isLeaf()){
                        buildLeaf(featureNode);
                }else{
--                      for(FeatureNode childNode : featureNode.getChildren()){
++                      for(FeatureNode childNode : featureNode.getChildNodes()){
                                findLeaves(childNode);
                        }
                }
        }
--      
++
        /**
--       * 
++       *
         * @param featureNode
         * @param description
         * @return
                if(featureNode.getFeature() == null){
                        throw new IllegalArgumentException("The given feature node does not have a feature.");
                }
--              
++
                Feature feature = (Feature) HibernateProxyHelper.deproxy(featureNode.getFeature());
--              
++
                // get feature node container for the given feature
                FeatureNodeContainer container = containerTree.getFeatureNodeContainer(feature);
--              
++
                // get description elements for the given feature
                List<DescriptionElementBase> elements = containerTree.getDescriptionsElementsForFeature(feature);
                // no description elements, so we should also remove the feature node container
                                container.buildBranch();
                        }
                        // add description elements to the feature node container
--                      container.setDescriptionElements(elements);             
++                      container.setDescriptionElements(elements);
                }
        }
--      
++
        /**
--       * 
++       *
         */
        private void remove() {
                if(getParent() != null){
  
  
        /**
--       * Recursively 
--       * 
++       * Recursively
++       *
         * @param featureNodeMap
         * @return
         */
--      private void buildBranch(){     
++      private void buildBranch(){
                if(getParent() == null){
                        FeatureNode parentFeatureNode = getFeatureNode().getParent();
--                      
++
                        if(parentFeatureNode.isRoot()){
                                containerTree.getRoot().addChild(this);
                        }else{
                                        parentContainer = new FeatureNodeContainer(containerTree);
                                        parentContainer.setFeatureNode(parentFeatureNode);
                                }
--                              
++
                                parentContainer.addChild(this);
--                              
++
                                parentContainer.buildBranch();
--                              
++
                        }
                }
        }
--      
++
        /**
         * <p>Getter for the field <code>children</code>.</p>
         *
                        throw new IllegalStateException("Container may not have a description element set when setting children.");
                }
        }
--      
++
        /**
         * Adds a child container to the list of this containers children
         *
        public void addDescriptionElement(DescriptionElementBase descriptionElement){
                descriptionElements.add(descriptionElement);
        }
--      
++
        public void removeDescriptionElement(DescriptionElementBase descriptionElement){
                descriptionElements.remove(descriptionElement);
        }
--      
++
        /**
         * If {@link #isLeaf()} is true, i.e. this container should have elements, returns the list of description elements.
         *
        public List<DescriptionElementBase> getDescriptionElementsForEntireBranch(){
                return getDescriptionElementsRecursively(new ArrayList<DescriptionElementBase>());
        }
--      
++
        private List<DescriptionElementBase> getDescriptionElementsRecursively(List<DescriptionElementBase> descriptionElements){
                if(isLeaf()){
                        descriptionElements.addAll(getDescriptionElements());
                }
                return descriptionElements;
        }
--      
++
        protected List<FeatureNodeContainer> getLeafs(){
                List<FeatureNodeContainer> leafs = new ArrayList<FeatureNodeContainer>();
--              
++
                if(isLeaf()){
                        leafs.add(this);
                }else{
                        for(FeatureNodeContainer container : getChildren()){
                                leafs.addAll(container.getLeafs());
--                      }                       
++                      }
                }
                return leafs;
        }
--      
++
        /**
         * Set the description element
         *
                        throw new IllegalStateException("Container may not contain child container when adding description elements.");
                }
        }
--      
++
        /**
         * If the container is a leaf, it will hold a description element and no child containers
         *
        public boolean isLeaf(){
                return ! descriptionElements.isEmpty() && children.isEmpty();
        }
--      
++
        /**
         * <p>Setter for the field <code>featureNode</code>.</p>
         *
        public FeatureNode getFeatureNode() {
                return featureNode;
        }
--      
++
        /**
         * <p>getFeature</p>
         *
        public DescriptionBase getDescription(){
                return containerTree.getDescription();
        }
--      
++
        public FeatureNodeContainerTree getContainerTree(){
                return containerTree;
        }
  
  
        /**
--       * 
++       *
         */
        public void clear() {
                children.clear();
index f06ac99b7cfa65d205f249851831312c6a907d91,f06ac99b7cfa65d205f249851831312c6a907d91..86c47a77f12ffd13f05e5983ed39275d367276e5
@@@ -21,7 -21,7 +21,6 @@@ import org.eclipse.jface.resource.Image
  import org.eclipse.jface.resource.ImageRegistry;
  import org.eclipse.swt.graphics.Image;
  
--import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
  import eu.etaxonomy.taxeditor.store.StoreUtil;
  import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
  
index d132f0544eb0b3beb48ff8a99753768ec1dd666d,90e1b3e78ae41ac0f532aeea0299bac24f14ca62..401bc1091b1011b6745311e5d8d318c598e5d03d
@@@ -13,10 -13,16 +13,11 @@@ package eu.etaxonomy.taxeditor.newWizar
  import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
  import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
  import eu.etaxonomy.cdm.api.service.IOccurrenceService;
- import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
- import eu.etaxonomy.cdm.model.occurrence.Specimen;
 -import eu.etaxonomy.cdm.model.common.OriginalSourceType;
+ import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 -import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
+ import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
 -import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+ import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
  import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
  import eu.etaxonomy.taxeditor.store.CdmStore;
 -import eu.etaxonomy.taxeditor.ui.dialog.selection.OriginalSourceTypeSelectionDialog;
 -import eu.etaxonomy.taxeditor.ui.dialog.selection.SpecimenOrObservationTypeSelectionDialog;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseWizardPage;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationWizardPage;
  import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventWizardPage;
index 351583132eafee6b037247bd7d4057f580d0a01d,351583132eafee6b037247bd7d4057f580d0a01d..d14e60819095bb07201120674d8c3be2daae0fe1
  package eu.etaxonomy.taxeditor.newWizard;
  
  import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
--import eu.etaxonomy.cdm.api.service.IGroupService;
  import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
  import eu.etaxonomy.taxeditor.store.CdmStore;
  import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailWizardPage;
--import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailWizardPage;
  
  /**
   * @author a.kohlbecker
index f0e65cbd5134ab5f0ac512e08deb4e2c2c07da35,e05e0490693200044f22084906e3766f1d7dca99..194bc3c7a66cc560dd971e896e9b39c094a462e4
@@@ -1,5 -1,5 +1,5 @@@
  /**
-- * 
++ *
   */
  package eu.etaxonomy.taxeditor.newWizard;
  
@@@ -10,7 -10,7 +10,7 @@@ import org.apache.commons.lang.StringUt
  import eu.etaxonomy.cdm.api.service.IClassificationService;
  import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
  import eu.etaxonomy.cdm.model.taxon.Classification;
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  import eu.etaxonomy.taxeditor.store.CdmStore;
@@@ -24,7 -24,7 +24,7 @@@ import eu.etaxonomy.taxeditor.ui.sectio
   * @created Sep 15, 2009
   * @version 1.0
   */
--public class NewTaxonNodeWizard extends AbstractNewEntityWizard<ITreeNode>{
++public class NewTaxonNodeWizard extends AbstractNewEntityWizard<ITaxonTreeNode>{
  
        private TaxonNodeWizardPage taxonNodePage;
        private boolean openEmptyEditor;
                taxonNodePage = new TaxonNodeWizardPage(formFactory, getConversationHolder(), getEntity());
                addPage(taxonNodePage);
        }
--      
++
        @Override
        protected void saveEntity() {
                if(taxonNodePage.getTaxon() == null || StringUtils.isEmpty(taxonNodePage.getTaxon().getName().getFullTitleCache())){
                        openEmptyEditor = true;
                }else{
                        getConversationHolder().bind();
--                      ITreeNode parent = getParentTreeNode();
++                      ITaxonTreeNode parent = getParentTreeNode();
                        Taxon taxon = taxonNodePage.getTaxon();
                        try{
-                               TaxonNode taxonNode = parent.addChildTaxon(taxon, parent.getReference(), parent.getMicroReference(), null);
+                               TaxonNode taxonNode = parent.addChildTaxon(taxon, parent.getReference(), parent.getMicroReference());
                                generatedTaxonNodeUuid = CdmStore.getService(ITaxonNodeService.class).saveOrUpdate(taxonNode);
                        }catch(IllegalArgumentException e){
                                StoreUtil.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
        }
  
        @Override
--      protected ITreeNode createNewEntity() {         
++      protected ITaxonTreeNode createNewEntity() {
                if(getSelection() != null){
                        Object selectedObject = getSelection().getFirstElement();
--                      if(selectedObject instanceof ITreeNode){
--                              ITreeNode treeNode = (ITreeNode) selectedObject;
--                              
++                      if(selectedObject instanceof ITaxonTreeNode){
++                          ITaxonTreeNode treeNode = (ITaxonTreeNode) selectedObject;
++
                                if(treeNode instanceof Classification){
                                        return CdmStore.getService(IClassificationService.class).load(treeNode.getUuid());
                                }
                                }
                        }
                }
--              
++
                return null;
        }
--      
++
        /**
         * <p>openInEditor</p>
         *
@@@ -80,7 -80,7 +80,7 @@@
        public boolean openInEditor(){
                return taxonNodePage.openInEditor();
        }
--      
++
        /**
         * <p>openEmpty</p>
         *
@@@ -89,7 -89,7 +89,7 @@@
        public boolean openEmpty(){
                return openInEditor() && openEmptyEditor;
        }
--      
++
        /**
         * <p>getTaxonNode</p>
         *
         */
        public TaxonNode getTaxonNode(){
                if(generatedTaxonNodeUuid != null){
--                      return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);                       
++                      return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
                }
                return null;
        }
--      
--      public ITreeNode getParentTreeNode(){
++
++      public ITaxonTreeNode getParentTreeNode(){
                return taxonNodePage.getParentTreeNode();
        }
  
        protected String getEntityName() {
                return "Taxon";
        }
--      
++
  }
index ad9a0a9ab0ae7a256dec9b359d49b604a3229cc3,ad9a0a9ab0ae7a256dec9b359d49b604a3229cc3..0b2f6f0f21a8cd5e65083a6e8fa4736432b93948
@@@ -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.
  */
@@@ -16,7 -16,7 +16,7 @@@ import org.eclipse.core.runtime.IStatus
  
  import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
  import eu.etaxonomy.cdm.model.common.CdmBase;
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  
  /**
@@@ -32,9 -32,9 +32,9 @@@
   */
  public abstract class AbstractPersistentPostOperation extends AbstractPostOperation {
        private IConversationEnabled conversationEnabled;
--      
--      protected ITreeNode parentNode;
--      
++
++      protected ITaxonTreeNode parentNode;
++
        /**
         * <p>Constructor for AbstractPersistentPostOperation.</p>
         *
@@@ -49,7 -49,7 +49,7 @@@
                super(label, undoContext, postOperationEnabled);
                this.conversationEnabled = conversationEnabled;
        }
--      
++
        /**
         * <p>Constructor for AbstractPersistentPostOperation.</p>
         *
@@@ -66,7 -66,7 +66,7 @@@
                super(label, undoContext, taxonNode, postOperationEnabled);
                this.conversationEnabled = conversationEnabled;
        }
--      
++
        /**
         * <p>Constructor for AbstractPersistentPostOperation.</p>
         *
         * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
         * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
         * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
--       * @param parentNode a {@link eu.etaxonomy.cdm.model.taxon.ITreeNode} object.
++       * @param parentNode a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
         */
        public AbstractPersistentPostOperation(String label,
--                      IUndoContext undoContext, ITreeNode parentNode,
++                      IUndoContext undoContext, ITaxonTreeNode parentNode,
                        IPostOperationEnabled postOperationEnabled,
                        IConversationEnabled conversationEnabled) {
                super(label, undoContext, postOperationEnabled);
         * @see eu.etaxonomy.taxeditor.operations.AbstractPostOperation#postExecute(eu.etaxonomy.cdm.model.common.CdmBase)
         */
        /** {@inheritDoc} */
--      protected IStatus postExecute(CdmBase objectAffectedByOperation) {      
++      @Override
++    protected IStatus postExecute(CdmBase objectAffectedByOperation) {
                Assert.isNotNull(conversationEnabled, "Operation has to have a valid conversation attached.");
--              
++
                conversationEnabled.getConversationHolder().commit(true);
--              
++
                IStatus status = super.postExecute(objectAffectedByOperation);
--              
++
                return status;
        }
--      
++
        /**
         * Binds the conversation that was attached to this operation.
         */
        public void bind(){
--              conversationEnabled.getConversationHolder().bind();     
++              conversationEnabled.getConversationHolder().bind();
        }
  
  }
index 3fe4eb266c59694ef6855d08393317bfa3342039,0000000000000000000000000000000000000000..34d7415aa931de9196ef7f6d030a89a45ded03d6
mode 100644,000000..100644
--- /dev/null
@@@ -1,181 -1,0 +1,171 @@@
-      * @param initialInteger a {@link java.lang.Integer} object.
 +// $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.campanula.basicFields;
 +
 +import org.eclipse.swt.SWT;
 +import org.eclipse.swt.events.ModifyEvent;
 +import org.eclipse.swt.widgets.Display;
 +import org.eclipse.swt.widgets.Text;
 +
 +import eu.etaxonomy.cdm.common.CdmUtils;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
 +import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 +import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
 +
 +/**
 + * @author pplitzner
 + * @date 12.08.2013
 + *
 + */
 +public class NumberFieldController extends TextFieldController {
 +    private Float start;
 +    private Float end;
 +
 +    private NumberFormatException exception;
 +
 +    /**
 +     * <p>Constructor for NumberWithLabelElement.</p>
 +     *
 +     * @param toolkit a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
 +     * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
 +     * @param labelString a {@link java.lang.String} object.
-     public NumberFieldController(Text controlledText, CdmFormFactory formFactory, ICdmFormElement parentElement, Integer initialInteger){
++     * @param initialNumber a {@link java.lang.Integer} object.
 +     * @param style a int.
 +     */
-         if(initialInteger==null){
-             initialInteger = 0;
++    public NumberFieldController(Text controlledText, CdmFormFactory formFactory, ICdmFormElement parentElement, Number initialNumber){
 +        super(controlledText, formFactory, parentElement, null, null);
 +        //WindowBuilder exception handling
-         setInteger(initialInteger);
-     }
-     /**
-      * <p>Constructor for NumberWithLabelElement.</p>
-      *
-      * @param toolkit a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
-      * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
-      * @param labelString a {@link java.lang.String} object.
-      * @param initialFloat a {@link java.lang.Float} object.
-      * @param style a int.
-      * @wbp.parser.constructor
-      */
-     public NumberFieldController(Text controlledText, CdmFormFactory formFactory,
-             ICdmFormElement parentElement, Float initialFloat) {
-         super(controlledText, formFactory, parentElement, null, null);
-         //WindowBuilder exception handling
-         if(initialFloat==null){
-             initialFloat = 0f;
-         }
-         setFloat(initialFloat);
++        if(initialNumber==null){
++            initialNumber = 0;
 +        }
-      * <p>setFloat</p>
++        setNumber(initialNumber);
 +    }
 +
 +    /**
 +     * <p>setInteger</p>
 +     *
 +     * @param number a {@link java.lang.Integer} object.
 +     */
 +    public void setInteger(Integer number) {
 +        super.setText(getStringRepresentation(number));
 +    }
 +
 +    /**
-      * @param number a {@link java.lang.Float} object.
++       * <p>setNumber</p>
 +     *
-     public void setFloat(Float number) {
++       * @param number a {@link java.lang.Number} object.
 +     */
++      public void setNumber(Number number) {
 +        super.setText(getStringRepresentation(number));
 +    }
 +
 +    /**
 +     * <p>getInteger</p>
 +     *
 +     * @return a {@link java.lang.Integer} object.
 +     */
 +    public Integer getInteger() {
 +        String text = super.getText().trim();
 +        return text.equals("") ? 0 : new Integer(text);
 +    }
 +
 +    /**
 +     * <p>getFloat</p>
 +     *
 +     * @return a {@link java.lang.Float} object.
 +     */
 +    public Float getFloat(){
 +        String text = super.getText();
 +        return new Float(text);
 +    }
 +
++      /**
++       * <p>getDouble</p>
++       *
++       * @return a {@link java.lang.Float} object.
++       */
++      public Double getDouble(){
++              String text = super.getText();
++              return new Double(text);
++      }
++
 +    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)
 +     */
 +    /** {@inheritDoc} */
 +    @Override
 +    public void modifyText(ModifyEvent event) {
 +        String value = text.getText();
 +        if(CdmUtils.isEmpty(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>
 +     *
 +     * @param numberOfDigits a int.
 +     * @param start a {@link java.lang.Integer} object.
 +     * @param end a {@link java.lang.Integer} object.
 +     */
 +    public void setLimits(int numberOfDigits, Integer start, Integer end){
 +        setLimits(numberOfDigits, start.floatValue(), end.floatValue());
 +    }
 +
 +    /**
 +     * <p>setLimits</p>
 +     *
 +     * @param numberOfDigits a int.
 +     * @param start a {@link java.lang.Float} object.
 +     * @param end a {@link java.lang.Float} object.
 +     */
 +    public void setLimits(int numberOfDigits, Float start, Float end){
 +        text.setTextLimit(numberOfDigits);
 +        this.start = start;
 +        this.end = end;
 +    }
 +
 +    /**
 +     * <p>Getter for the field <code>exception</code>.</p>
 +     *
 +     * @return the exception
 +     */
 +    public NumberFormatException getException() {
 +        return exception;
 +    }
 +}
index 3fa01f509a4012571e558c22f93fb7c008e1a95a,0000000000000000000000000000000000000000..56f1045949ae8510fb73dc99d578bf1a0d0214db
mode 100644,000000..100644
--- /dev/null
@@@ -1,114 -1,0 +1,115 @@@
- import eu.etaxonomy.taxeditor.model.AbstractUtility;
- import eu.etaxonomy.taxeditor.preference.Resources;
 +// $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.campanula.detailViews.fieldObservation;
 +
 +import org.eclipse.ui.forms.widgets.ExpandableComposite;
 +
 +import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
-     private NumberFieldController number_absoluteElevationError;
 +import eu.etaxonomy.taxeditor.ui.campanula.basicFields.NumberFieldController;
 +import eu.etaxonomy.taxeditor.ui.campanula.basicFields.TextFieldController;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
 +import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 +import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
 +import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
 +import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectingAreasDetailSection;
 +
 +/**
 + * @author pplitzner
 + * @date 14.08.2013
 + *
 + */
 +public class GatheringEventDetailsElementController extends AbstractCdmDetailElement<DerivedUnitFacade> {
 +
 +    private GatheringEventDetailsElement gatheringEventDetailsElement;
 +
-     private NumberFieldController number_absoluteElevationMinimum;
++//    private NumberFieldController number_absoluteElevationError;
 +
-         number_absoluteElevationError = new NumberFieldController(gatheringEventDetailsElement.getTextElevationError(), formFactory, this, entity.getAbsoluteElevation());
-         number_absoluteElevationMinimum = new NumberFieldController(gatheringEventDetailsElement.getText_ElevationMinimum(), formFactory, this, entity.getAbsoluteElevationMinimum());
++//    private NumberFieldController number_absoluteElevationMinimum;
 +
 +    private NumberFieldController number_absoluteElevationMaximum;
 +
 +    private TextFieldController text_collectingMethod;
 +
 +    private NumberFieldController number_distanceToGround;
 +
 +    private NumberFieldController number_distanceToWaterSurface;
 +
 +    private TextFieldController text_gatheringEventDescription;
 +
 +    private CollectingAreasDetailSection section_collectingAreas;
 +
 +    /**
 +     * <p>
 +     * Constructor for GatheringEventDetailElement.
 +     * </p>
 +     *
 +     * @param formFactory
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
 +     *            object.
 +     * @param formElement
 +     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
 +     *            object.
 +     */
 +    public GatheringEventDetailsElementController(GatheringEventDetailsElement gatheringEventDetailsElement, CdmFormFactory formFactory, ICdmFormElement formElement) {
 +        super(formFactory, formElement);
 +        this.gatheringEventDetailsElement = gatheringEventDetailsElement;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override
 +    protected void createControls(ICdmFormElement formElement, DerivedUnitFacade entity, int style) {
 +
-         if (eventSource == number_absoluteElevationError) {
-             getEntity().setAbsoluteElevationError(number_absoluteElevationError.getInteger());
-         } else if (eventSource == number_absoluteElevationMinimum) {
-             try {
-                 getEntity().setAbsoluteElevationRange(number_absoluteElevationMinimum.getInteger(), number_absoluteElevationMaximum.getInteger());
-                 number_absoluteElevationMinimum.setBackground(getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
-             } catch (IllegalArgumentException e) {
-                 number_absoluteElevationMinimum.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
-                 AbstractUtility.warn(getClass(), e.getLocalizedMessage());
-             }
-         } else if (eventSource == number_absoluteElevationMaximum) {
-             try {
-                 getEntity().setAbsoluteElevationRange(number_absoluteElevationMinimum.getInteger(), number_absoluteElevationMaximum.getInteger());
-                 number_absoluteElevationMaximum.setBackground(getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
-             } catch (IllegalArgumentException e) {
-                 number_absoluteElevationMaximum.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
-                 AbstractUtility.warn(getClass(), e.getLocalizedMessage());
-             }
-         } else if (eventSource == text_collectingMethod) {
++//        number_absoluteElevationError = new NumberFieldController(gatheringEventDetailsElement.getTextElevationError(), formFactory, this, entity.getAbsoluteElevation());
++//        number_absoluteElevationMinimum = new NumberFieldController(gatheringEventDetailsElement.getText_ElevationMinimum(), formFactory, this, entity.getAbsoluteElevationMinimum());
 +        number_absoluteElevationMaximum = new NumberFieldController(gatheringEventDetailsElement.getText_ElevationMaximum(), formFactory, this, entity.getAbsoluteElevationMaximum());
 +        text_collectingMethod = new TextFieldController(gatheringEventDetailsElement.getText_CollectingMethod(), formFactory, this, entity.getCollectingMethod(), null);
 +        number_distanceToGround = new NumberFieldController(gatheringEventDetailsElement.getText_DistanceToGround(), formFactory, this, entity.getDistanceToGround());
 +        number_distanceToWaterSurface = new NumberFieldController(gatheringEventDetailsElement.getText_DistanceToWaterSurface(), formFactory, this, entity.getDistanceToWaterSurface());
 +        text_gatheringEventDescription = new TextFieldController(gatheringEventDetailsElement.getText_GatheringEventDescription(), formFactory, this, entity.getGatheringEventDescription(), null);
 +        section_collectingAreas = formFactory.createCollectingAreasDetailSection(getConversationHolder(), formElement, ExpandableComposite.TWISTIE);
 +        section_collectingAreas.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
 +        section_collectingAreas.setEntity(entity);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override
 +    public void handleEvent(Object eventSource) {
-             getEntity().setDistanceToGround(number_distanceToGround.getInteger());
++//        if (eventSource == number_absoluteElevationError) {
++//            getEntity().setAbsoluteElevationError(number_absoluteElevationError.getDouble());
++//        }
++//        else if (eventSource == number_absoluteElevationMinimum) {
++//            try {
++//                getEntity().setAbsoluteElevationRange(number_absoluteElevationMinimum.getInteger(), number_absoluteElevationMaximum.getInteger());
++//                number_absoluteElevationMinimum.setBackground(getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
++//            } catch (IllegalArgumentException e) {
++//                number_absoluteElevationMinimum.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
++//                AbstractUtility.warn(getClass(), e.getLocalizedMessage());
++//            }
++//        }
++//        else if (eventSource == number_absoluteElevationMaximum) {
++//            try {
++//                getEntity().setAbsoluteElevationRange(number_absoluteElevationError.getInteger(), number_absoluteElevationMaximum.getInteger());
++//                number_absoluteElevationMaximum.setBackground(getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
++//            } catch (IllegalArgumentException e) {
++//                number_absoluteElevationMaximum.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
++//                AbstractUtility.warn(getClass(), e.getLocalizedMessage());
++//            }
++//        } else
++            if (eventSource == text_collectingMethod) {
 +            getEntity().setCollectingMethod(text_collectingMethod.getText());
 +        } else if (eventSource == number_distanceToGround) {
-             getEntity().setDistanceToWaterSurface(number_distanceToWaterSurface.getInteger());
++            getEntity().setDistanceToGround(number_distanceToGround.getDouble());
 +        } else if (eventSource == number_distanceToWaterSurface) {
++            getEntity().setDistanceToWaterSurface(number_distanceToWaterSurface.getDouble());
 +        } else if (eventSource == text_gatheringEventDescription) {
 +            getEntity().setGatheringEventDescription(text_gatheringEventDescription.getText());
 +        }
 +    }
 +}
index 0000000000000000000000000000000000000000,18641f908e347afc601431cffdf08592e04b8aae..641193b67e6d753a4349d521988800af403b38a8
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,434 +1,428 @@@
 -import java.util.HashSet;
+ //$Id$
+ package eu.etaxonomy.taxeditor.ui.dialog.selection;
+ import java.lang.reflect.Field;
+ import java.text.Collator;
+ import java.util.Comparator;
 -import java.util.Set;
 -import java.util.UUID;
+ import java.util.List;
 -import eu.etaxonomy.cdm.model.common.CdmBase;
 -import eu.etaxonomy.cdm.model.common.ICdmBase;
+ import org.eclipse.core.runtime.CoreException;
+ import org.eclipse.core.runtime.IProgressMonitor;
+ import org.eclipse.core.runtime.IStatus;
+ import org.eclipse.core.runtime.OperationCanceledException;
+ import org.eclipse.core.runtime.Status;
+ import org.eclipse.jface.dialogs.IDialogSettings;
+ import org.eclipse.jface.viewers.ILabelProvider;
+ import org.eclipse.jface.viewers.LabelProvider;
+ import org.eclipse.jface.window.Window;
+ import org.eclipse.jface.wizard.WizardDialog;
+ import org.eclipse.swt.SWT;
+ import org.eclipse.swt.events.SelectionAdapter;
+ import org.eclipse.swt.events.SelectionEvent;
+ import org.eclipse.swt.events.SelectionListener;
+ import org.eclipse.swt.widgets.Composite;
+ import org.eclipse.swt.widgets.Control;
+ import org.eclipse.swt.widgets.Link;
+ import org.eclipse.swt.widgets.Shell;
+ import org.eclipse.swt.widgets.Text;
+ import org.eclipse.ui.IMemento;
+ import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
+ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 -import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
+ import eu.etaxonomy.cdm.model.common.IEnumTerm;
+ import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+ import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
+ import eu.etaxonomy.taxeditor.store.StoreUtil;
+ import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
+ /**
+ * <p>Abstract AbstractFilteredCdmEnumSelectionDialog class.</p>
+ *
+ * @author c.mathew
+ * @created 18.07.2013
+ * @version 1.0
+ */
+ public abstract class AbstractFilteredCdmEnumSelectionDialog<T extends IEnumTerm> extends
+               FilteredItemsSelectionDialog implements IConversationEnabled {
+       private ConversationHolder conversation;
+       protected List<T> model;        
+       private String settings;        
+       
+       
+       
+       /**
+        * <p>Constructor for AbstractFilteredCdmResourceSelectionDialog.</p>
+        *
+        * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
+        * @param conversation 
+        * @param title a {@link java.lang.String} object.
+        * @param multi a boolean.
+        * @param settings a {@link java.lang.String} object.
+        * @param cdmEnum a T object.
+        * @param <T> a T object.
+        */
+       protected AbstractFilteredCdmEnumSelectionDialog(Shell shell, 
+                       ConversationHolder conversation, 
+                       String title, 
+                       boolean multi, 
+                       String settings,
+                       T cdmEnum) {
+               super(shell, multi);
+               setTitle(title);
+               setMessage("Use * for wildcard, or ? to see all entries");
+               this.settings = settings;
+               
+               this.conversation = conversation;
+               
+               init();
+               
+               initModel();
+               
+               String objectTitle = getTitle(cdmEnum);
+               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 
+        * 
+        * @return
+        */
+       protected ILabelProvider createDetailsLabelProvider() {
+               return createListLabelProvider();
+       }
+       /**
+        * 
+        * @return
+        */
+       protected ILabelProvider createListLabelProvider() {
+               return new FilteredCdmResourceLabelProvider();
+       }
+       /**
+        * Override in subclasses.
+        * Will run before initModel()
+        */
+       protected void init() {
+               
+       }
+       
+       /**
+        * <p>getSelectionFromDialog</p>
+        *
+        * @param dialog a {@link eu.etaxonomy.taxeditor.ui.dialog.selection.AbstractFilteredCdmResourceSelectionDialog} object.
+        * @param <TYPE> a TYPE object.
+        * @return a TYPE object.
+        */
+       protected static <TYPE extends IEnumTerm> TYPE getSelectionFromDialog(AbstractFilteredCdmEnumSelectionDialog<TYPE> dialog) {
+               
+               int result = dialog.open();
+               
+               if (result == Window.CANCEL) {
+                       return null;
+               }
+               
+               return dialog.getSelectedEnumTerm();
+       }
+       /**
+        * <p>getTitle</p>
+        *
+        * @param cdmObject a T object.
+        * @return a {@link java.lang.String} object.
+        */
+       protected String getTitle(T cdmEnum) {
+               return cdmEnum.getMessage();
+       }
+       
+       /** {@inheritDoc} */
+       @Override
+       public void refresh() {
+               initModel();            
+               super.refresh();
+       }
+       
+       /**
+        * <p>initModel</p>
+        */
+       abstract protected void initModel();
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createFilter()
+        */
+       /** {@inheritDoc} */
+       @Override
+       protected ItemsFilter createFilter() {
+               return new ItemsFilter() {
+                       /**
+                        * Always returns false to enforce refiltering even if the pattern is equal
+                        */
+                       @Override
+                       public boolean equalsFilter(ItemsFilter filter) {
+                               return false;
+                       }
+                       
+                       @Override
+                       public boolean isConsistentItem(Object item) {
+                               return false;
+                       }
+                       @Override
+                       public boolean matchItem(Object item) {
+                               String text = null;
+                               if(item instanceof IEnumTerm){
+                                       text = ((IEnumTerm) item).getMessage();
+                               }else if(item instanceof String){
+                                       text = (String) item;
+                               }
+                               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. 
+               // 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 
+               // way to solve the problem.
+               try {
+                       Field lastCompletedFilter = this.getClass().getSuperclass().getSuperclass().getDeclaredField("lastCompletedFilter");
+                       lastCompletedFilter.setAccessible(true);
+                       lastCompletedFilter.set(this, null);
+               } catch (SecurityException e) {
+                       StoreUtil.error(getClass(), e);
+               } catch (NoSuchFieldException e) {
+                       StoreUtil.error(getClass(), e);
+               } catch (IllegalArgumentException e) {
+                       StoreUtil.error(getClass(), e);
+               } catch (IllegalAccessException e) {
+                       StoreUtil.error(getClass(), e);
+               }
+               
+               // 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)
+       */
+       /** {@inheritDoc} */
+       @Override
+       protected void fillContentProvider(AbstractContentProvider contentProvider,
+               ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
+               throws CoreException {
+               try {
+                       if(model != null){                              
+                               progressMonitor.beginTask("Looking for entities", model.size());
+                               for(T element : model){
+                                       contentProvider.add(element, itemsFilter);
+                                       if (progressMonitor.isCanceled()) {
+                                               throw new OperationCanceledException();
+                                       }
+                                       progressMonitor.worked(1);
+                               }
+                       }else{
+                               StoreUtil.warn(getClass(), "Model for Filtered Selection is null:" + this.getClass().getSimpleName());
+                       }
+               }
+               finally {
+                       progressMonitor.done();
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getDialogSettings()
+        */
+       /** {@inheritDoc} */
+       @Override
+       protected IDialogSettings getDialogSettings() {
+               IDialogSettings settings = TaxeditorStorePlugin.getDefault().getDialogSettings().getSection(getSettings());
+               if (settings == null) {
+                       settings = TaxeditorStorePlugin.getDefault().getDialogSettings().addNewSection(getSettings());
+               }
+               return settings;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getElementName(java.lang.Object)
+        */
+       /** {@inheritDoc} */
+       @Override
+       public String getElementName(Object item) {
+               return ((IEnumTerm) item).getMessage();
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getItemsComparator()
+        */
+       /** {@inheritDoc} */
+       @Override
+       protected Comparator getItemsComparator() {
+               return new Comparator<IEnumTerm>() {
+                       public int compare(IEnumTerm entity1,
+                                       IEnumTerm entity2) {
+                               Collator collator = Collator.getInstance();
+                               return collator.compare(entity1.getMessage(), entity2.getMessage());
+                       }
+               };
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#validateItem(java.lang.Object)
+        */
+       /** {@inheritDoc} */
+       @Override
+       protected IStatus validateItem(Object item) {
+               return Status.OK_STATUS;
+       }
+       
+       /**
+        * <p>getSelectedUuidAndTitleCache</p>
+        *
+        * @return a {@link eu.etaxonomy.cdm.model.common.UuidAndTitleCache} object.
+        */
+       protected T getSelectedEnumTerm() {
+               Object[] result = getResult();
+               return result[0] == null ? null : (T) result[0];
+       }
+       
+       /**
+        * <p>Getter for the field <code>settings</code>.</p>
+        *
+        * @return a {@link java.lang.String} object.
+        */
+       public String getSettings()  {
+               if(settings == null){
+                       throw new IllegalStateException("No SETTINGS set.");
+               }
+               return settings;
+       }
+       
+       /**
+        * 
+        * @author n.hoffmann
+        * @created Oct 19, 2009
+        * @version 1.0
+        */
+       private class ResourceSelectionHistory extends SelectionHistory {
+           /*
+           * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#restoreItemFromMemento(org.eclipse.ui.IMemento)
+               */
+               protected Object restoreItemFromMemento(IMemento element) {
+                       return element.getString("resource"); //$NON-NLS-1$
+               }
+               /*
+                * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#storeItemToMemento(java.lang.Object,
+                *      org.eclipse.ui.IMemento)
+                */
+               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 
+        * @return a {@link eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard} object.
+        */
+       protected abstract AbstractNewEntityWizard getNewEntityWizard(String parameter);
+       
+       public class FilteredCdmResourceLabelProvider extends LabelProvider {
+               public String getText(Object element) {
+                       if (element == null) {
+                               return null;
+                       }
+                       return ((IEnumTerm) element).getMessage();
+               }                       
+       };
+       /* (non-Javadoc)
+       * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createExtendedContentArea(org.eclipse.swt.widgets.Composite)
+       */
+       /** {@inheritDoc} */
+       @Override
+       protected Control createExtendedContentArea(Composite parent) {
+               if(getNewWizardLinkText() != null){
+                       Link link = new Link(parent, SWT.NONE);
+                       link.setText(getNewWizardLinkText());
+                       link.addSelectionListener(getNewWizardLinkSelectionListener());
+                       return link;
+               }
+               return null;
+       }
+       
+       protected SelectionListener getNewWizardLinkSelectionListener(){
+               return new SelectionAdapter() {
+                       
+                       /* (non-Javadoc)
+                        * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+                        */
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               
+                               AbstractNewEntityWizard wizard = getNewEntityWizard(e.text);
+                               wizard.init(null, null);
+                               WizardDialog dialog = new WizardDialog(getShell(), wizard);
+                               int status = dialog.open();
+                               
+                               if (status == IStatus.OK) {
+                                       
+                                       T entity = (T) wizard.getEntity();
+                                       refresh();
+                                       setPattern(entity);
+                                       getConversationHolder().bind();
+                               }
+                       }
+               };
+       }
+       
+       /**
+        * <p>getConversationHolder</p>
+        *
+        * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
+        */
+       public ConversationHolder getConversationHolder() {
+               return conversation;
+       }
+       
+       /** {@inheritDoc} */
+       public void update(CdmDataChangeMap changeEvents) {}
+ }
index 1cd609d161b3943ca5fcaefd69bdd2a7b0355771,1cd609d161b3943ca5fcaefd69bdd2a7b0355771..7f4ba7e51fda3649e1a84ca9071efc1e2bef6199
@@@ -19,13 -19,13 +19,10 @@@ import org.springframework.security.cor
  
  import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
  import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
--import eu.etaxonomy.cdm.api.service.IGroupService;
--import eu.etaxonomy.cdm.api.service.IUserService;
  import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
  import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
  import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
  import eu.etaxonomy.taxeditor.newWizard.NewGrantedAuthorityWizard;
--import eu.etaxonomy.taxeditor.newWizard.NewGroupWizard;
  import eu.etaxonomy.taxeditor.store.CdmStore;
  
  /**
index 7417334d9f0788ad37715024858623d5227313a6,7417334d9f0788ad37715024858623d5227313a6..d2858ccdd53b93164f672ba8630a6b213044603f
@@@ -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.
  */
@@@ -17,7 -17,7 +17,7 @@@ import org.eclipse.swt.widgets.Shell
  import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
  import eu.etaxonomy.cdm.api.service.IReferenceService;
  import eu.etaxonomy.cdm.model.reference.Reference;
--import eu.etaxonomy.cdm.strategy.cache.reference.ReferenceBaseDefaultCacheStrategy;
++import eu.etaxonomy.cdm.strategy.cache.reference.ReferenceDefaultCacheStrategy;
  import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
  import eu.etaxonomy.taxeditor.newWizard.NewReferenceWizard;
  import eu.etaxonomy.taxeditor.store.CdmStore;
@@@ -30,7 -30,7 +30,7 @@@
   * @version 1.0
   */
  public class ReferenceSelectionDialog extends AbstractFilteredCdmResourceSelectionDialog<Reference> {
--      
++
        /**
         * <p>select</p>
         *
         */
        public static Reference select(Shell shell, ConversationHolder conversation, Reference reference) {
                ReferenceSelectionDialog dialog = new ReferenceSelectionDialog(shell, conversation,
--                              "Choose a reference", false, (Reference) reference);
++                              "Choose a reference", false, reference);
                return getSelectionFromDialog(dialog);
        }
  
--      
++
        /**
         * <p>Constructor for FilteredReferenceSelectionDialog.</p>
         *
@@@ -58,7 -58,7 +58,7 @@@
        protected ReferenceSelectionDialog(Shell shell, ConversationHolder conversation, String title, boolean multi, Reference reference) {
                super(shell, conversation, title, multi, ReferenceSelectionDialog.class.getCanonicalName(), null);
        }
--      
++
  
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.dialogs.AbstractFilteredCdmResourceSelectionDialog#getPersistentObject(java.util.UUID)
         */
        /** {@inheritDoc} */
        @Override
--      protected void initModel() {            
++      protected void initModel() {
                model = CdmStore.getService(IReferenceService.class).getUuidAndTitleCache();
        }
--      
++
  
        /** {@inheritDoc} */
        @Override
                }else if(cdmObject.getAuthorTeam() == null){
                        return super.getTitle(cdmObject);
                }else{
--                      return ReferenceBaseDefaultCacheStrategy.putAuthorToEndOfString(cdmObject.getTitleCache(), cdmObject.getAuthorTeam().getTitleCache());
++                      return ReferenceDefaultCacheStrategy.putAuthorToEndOfString(cdmObject.getTitleCache(), cdmObject.getAuthorTeam().getTitleCache());
                }
        }
--      
++
        /** {@inheritDoc} */
        @Override
        protected AbstractNewEntityWizard getNewEntityWizard(String parameter) {
        protected String getNewWizardLinkText() {
                return "Click <A>here</A> to create a new reference.";
        }
--      
++
  }
index 741d99e2139e81917734c4cb0196f0e6f1a037dc,533b43b021722b9146b536c7a9cde59a4c2272e0..29f1bb06484c8ae8eed2bd035fd71b209b61b035
@@@ -47,13 -48,15 +48,13 @@@ import eu.etaxonomy.cdm.model.agent.Tea
  import eu.etaxonomy.cdm.model.common.Annotation;
  import eu.etaxonomy.cdm.model.common.CdmBase;
  import eu.etaxonomy.cdm.model.common.Credit;
+ import eu.etaxonomy.cdm.model.common.DefinedTerm;
  import eu.etaxonomy.cdm.model.common.DefinedTermBase;
- import eu.etaxonomy.cdm.model.common.DescriptionElementSource;
 -import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
  import eu.etaxonomy.cdm.model.common.Extension;
  import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
  import eu.etaxonomy.cdm.model.common.Group;
  import eu.etaxonomy.cdm.model.common.ICdmBase;
--import eu.etaxonomy.cdm.model.common.IDefinedTerm;
+ import eu.etaxonomy.cdm.model.common.IEnumTerm;
  import eu.etaxonomy.cdm.model.common.IdentifiableSource;
  import eu.etaxonomy.cdm.model.common.Language;
  import eu.etaxonomy.cdm.model.common.LanguageString;
@@@ -64,6 -68,6 +66,7 @@@ import eu.etaxonomy.cdm.model.common.Ve
  import eu.etaxonomy.cdm.model.description.CategoricalData;
  import eu.etaxonomy.cdm.model.description.CommonTaxonName;
  import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
++import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
  import eu.etaxonomy.cdm.model.description.Distribution;
  import eu.etaxonomy.cdm.model.description.Feature;
  import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
@@@ -89,26 -91,15 +90,27 @@@ import eu.etaxonomy.cdm.model.name.Nome
  import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
  import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
  import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
- import eu.etaxonomy.cdm.model.occurrence.Specimen;
 -import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
++import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
  import eu.etaxonomy.cdm.model.reference.Reference;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
  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.FieldObservationGeneralElement;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.FieldObservationGeneralElementController;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.FieldObservationSection;
 +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.specimen.SpecimenGeneralElement;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.specimen.SpecimenGeneralElementController;
 +import eu.etaxonomy.taxeditor.ui.campanula.detailViews.specimen.SpecimenSection;
  import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement;
  import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
+ import eu.etaxonomy.taxeditor.ui.element.MinMaxTextSection.UnitType;
  import eu.etaxonomy.taxeditor.ui.openurl.IOpenUrlEnabled;
  import eu.etaxonomy.taxeditor.ui.openurl.OpenUrlSelectorElement;
  import eu.etaxonomy.taxeditor.ui.password.EditPasswordElement;
@@@ -586,116 -577,91 +588,90 @@@ public class CdmFormFactory extends For
      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 createIntegerTextWithLabelElement(ICdmFormElement parentElement, String labelString,
-             Integer initialInteger, int style) {
-         NumberWithLabelElement element = new NumberWithLabelElement(this, parentElement, labelString, initialInteger,
-                 style);
-         adapt(element);
-         parentElement.addElement(element);
-         return element;
-     }
-     /**
-      * <p>
-      * createFloatTextWithLabelElement
-      * </p>
-      *
-      * @param parentElement
-      *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-      *            object.
-      * @param labelString
-      *            a {@link java.lang.String} object.
-      * @param initialFloat
-      *            a float.
-      * @param style
-      *            a int.
-      * @return a
-      *         {@link eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement}
-      *         object.
-      */
-     public NumberWithLabelElement createFloatTextWithLabelElement(ICdmFormElement parentElement, String labelString,
-             float initialFloat, int style) {
-         NumberWithLabelElement element = new NumberWithLabelElement(this, parentElement, labelString, initialFloat,
-                 style);
-         adapt(element);
-         parentElement.addElement(element);
-         return element;
-     }
+       public NumberWithLabelElement createNumberTextWithLabelElement(
+                       ICdmFormElement parentElement, String labelString,
+                       Number initialNumber, int style) {
+               NumberWithLabelElement element = new NumberWithLabelElement(this,
+                               parentElement, labelString, initialNumber, 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 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,
              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>
+        * 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> createDefinedTermComboElement(
 -                      TermType termType, 
++                      TermType termType,
+                       ICdmFormElement parentElement,
 -                      String labelString, 
 -                      T selection, 
++                      String labelString,
++                      T selection,
+                       int style) {
+               TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termType, labelString, selection, style);
+               adapt(element);
+               parentElement.addElement(element);
+               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 IDefinedTerm> EnumComboElement<T> createEnumComboElement(Class<T> enumComboType,
-             ICdmFormElement parentElement, int style) {
+       public <T extends IEnumTerm> 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>
+        * createGatheringEventUnitElement
+        * </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.GatheringEvent} object.
+        * @param style
+        *            a int.
+        * @return a {@link eu.etaxonomy.taxeditor.ui.element.GatheringEventUnitElement}
+        *         object.
+        */
+       public GatheringEventUnitElement createGatheringEventUnitElement(
 -                      ICdmFormElement parentElement, 
++                      ICdmFormElement parentElement,
+                       String labelString,
 -                      DerivedUnitFacade gatheringEvent, 
 -                      MinMaxTextSection.UnitType unitType,                    
++                      DerivedUnitFacade gatheringEvent,
++                      MinMaxTextSection.UnitType unitType,
+                       int style) {
 -              GatheringEventUnitElement element = new GatheringEventUnitElement(this, 
++              GatheringEventUnitElement element = new GatheringEventUnitElement(this,
+                               parentElement,
 -                              labelString, 
 -                              gatheringEvent, 
++                              labelString,
++                              gatheringEvent,
+                               unitType,
+                               style);
+               adapt(element);
+               parentElement.addElement(element);
+               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;
 -      }
 -      
 -      /**
 -       * <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.MinMaxTextSection}
 -       *         object.
 -       */
 -      public MinMaxTextSection createMinMaxTextSection(ICdmFormElement parentElement, UnitType unitType, int style) {
 -              MinMaxTextSection section = new MinMaxTextSection(this, parentElement, unitType, style);
 -              parentElement.addElement(section);
 -              adapt(section);
 -              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.
 -     * @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;
 -      }
 -
 -      /**
 -       * <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) {
 -            AbstractUtility.error(this.getClass(),
 -                    "Tried to remove a selection listener from this factories listeners but was null", null);
 -              } 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>
 -       * 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.
 -       */
 -    public Label createHorizontalSeparator(ICdmFormElement parentElement, int style) {
 -        Label separator = this.createSeparator(parentElement.getLayoutComposite(), SWT.HORIZONTAL | style);
 -              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.
 -       */
 -    public VersionElement createVersionElement(ICdmFormElement parentElement, VersionableEntity entity, int style) {
 -        VersionElement element = new VersionElement(this, parentElement, entity, style);
 -              adapt(element);
 -              parentElement.addElement(element);
 -              return element;
 -      }
 -      
 -      /**
 -       * @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;
 -      }
 -
 -
 -      /**
 -       * <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;
 -      }
 -      
 -      /**
 -       * @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) {
 -        EmptyElement element = new EmptyElement(this, parentElement, null, SWT.NULL);
 -              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) {
 -        HeadlineSection section = new HeadlineSection(this, parentElement, SWT.NULL);
 -              parentElement.addElement(section);
 -              adapt(section);
 -              return section;
 -      }
 +        parentElement.addElement(section);
 +        adapt(section);
 +        return section;
 +    }
  
 -       * createParsingMessageElement
+       /**
+        * <p>
 -       * 
++       * createDateDetailSection
+        * </p>
 -       * @param parserProblem
 -       *            a {@link eu.etaxonomy.cdm.strategy.parser.ParserProblem}
 -       *            object.
++       *
+        * @param parentElement
+        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+        *            object.
 -       * @return a
 -       *         {@link eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessageElement}
+        * @param style
+        *            a int.
++       * @return a {@link eu.etaxonomy.taxeditor.ui.element.MinMaxTextSection}
+        *         object.
+        */
++      public MinMaxTextSection createMinMaxTextSection(ICdmFormElement parentElement, UnitType unitType, int style) {
++              MinMaxTextSection section = new MinMaxTextSection(this, parentElement, unitType, style);
++              parentElement.addElement(section);
++              adapt(section);
++              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.
 +     * @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;
 +    }
 +
 +    /**
 +     * <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) {
 +            AbstractUtility.error(this.getClass(),
 +                    "Tried to remove a selection listener from this factories listeners but was null", null);
 +        } 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>
 +     * removePropertyChangeListener
 +     * </p>
 +     *
 +     * @param listener
 +     *            a {@link org.eclipse.jface.util.IPropertyChangeListener}
 +     *            object.
 +     */
 +    public void removePropertyChangeListener(IPropertyChangeListener listener) {
 +        propertyChangeListeners.remove(listener);
 +    }
 +
 +    /**
 +     * @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;
 +    }
 +
 +    /**
 +     * <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;
 +    }
 +
 +    /**
 +     * @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;
 +    }
 +
 +    /**
 +     * <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;
 +    }
 +
 +    /**
 +     * @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) {
 +        EmptyElement element = new EmptyElement(this, parentElement, null, SWT.NULL);
 +        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) {
 +        HeadlineSection section = new HeadlineSection(this, parentElement, SWT.NULL);
 +        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.
 +     */
      public ParsingMessageElement createParsingMessageElement(ICdmFormElement parentElement,
              ParserProblem parserProblem, int style) {
          ParsingMessageElement element = new ParsingMessageElement(this, parentElement, parserProblem, style);
          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);
              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 Scope) {
-             element = new ScopeElement(this, parentElement, (Scope) entity, removeListener, style);
-         } else if (entity instanceof Modifier) {
-             element = new ModifierElement(this, parentElement, (Modifier) entity, removeListener, style);
+               } else if (entity instanceof DefinedTerm) {
+                       switch(((DefinedTerm)entity).getTermType()) {
+                               case Scope:
 -                                      element = new ScopeElement(this, 
 -                                                      parentElement, 
++                                      element = new ScopeElement(this,
++                                                      parentElement,
+                                                       (DefinedTerm) entity,
 -                                                      removeListener, 
++                                                      removeListener,
+                                                       style);
+                                       break;
+                               case Modifier:
 -                                      element = new ModifierElement(this, 
++                                      element = new ModifierElement(this,
+                                                       parentElement,
 -                                                      (DefinedTerm) entity, 
 -                                                      removeListener, 
++                                                      (DefinedTerm) entity,
++                                                      removeListener,
+                                                       style);
+                                       break;
+                               default:
+                                       //FIXME : Actually we should through an exception here
+                                       element = null;
+                                       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) {
-             element = new DerivedUnitElement(this, parentElement, (DerivedUnit) entity, removeListener, style);
++              switch(((DerivedUnit)entity).getRecordBasis()) {
+                               case LivingSpecimen:
+                               case PreservedSpecimen:
+                               case OtherSpecimen:
 -                                      element = new SpecimenCollectionDetailElement(this, 
++                                      element = new SpecimenCollectionDetailElement(this,
+                                                               parentElement,
 -                                                              (DerivedUnit) entity, 
 -                                                              removeListener, 
++                                                              (DerivedUnit) entity,
++                                                              removeListener,
+                                                               style);
+                                       break;
+                               default:
 -                                      element = new DerivedUnitElement(this, 
++                                      element = new DerivedUnitElement(this,
+                                                               parentElement,
 -                                                              (DerivedUnit) entity, 
 -                                                              removeListener, 
++                                                              (DerivedUnit) entity,
++                                                              removeListener,
+                                                               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 Specimen) {
-             element = new SpecimenCollectionDetailElement(this, parentElement, (Specimen) entity, removeListener, style);
++        } else if (entity instanceof DerivedUnit && ((DerivedUnit)entity).getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen) {
++            element = new SpecimenCollectionDetailElement(this, parentElement, (DerivedUnit) 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>
index 13cb8740e6d1f78958a099a4e4fcc1ea6c581d63,b44f464e6802ff2f988186c823aa835f8f2030a5..01dba2a9c5f08f09fc98097eae86910fea91ccd3
@@@ -16,7 -16,7 +16,8 @@@ import org.joda.time.Partial
  
  import eu.etaxonomy.cdm.common.CdmUtils;
  import eu.etaxonomy.cdm.model.common.TimePeriod;
+ import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  
  /**
   * <p>
@@@ -146,8 -146,8 +147,8 @@@ public class DateDetailSection extends 
                        getEntity().setEnd(end);
                } else if (eventSource == text_parseText) {
                        cursorPosition = ((Text) text_parseText.getMainControl())
 -                                      .getCaretPosition();                    
 +                                      .getCaretPosition();
-                       setEntityInternally(TimePeriod.parseString(text_parseText.getText()));
+                       setEntityInternally(TimePeriodParser.parseString(text_parseText.getText()));                    
                } else if (eventSource == text_freeText) {
                        getEntity().setFreeText(text_freeText.getText());
                }
index 0000000000000000000000000000000000000000,b144231fe421e24b24f5df528952931cd5b47b6e..7e8e97badb2e6febdc0b5ab473fa6edb30d82292
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,112 +1,111 @@@
 - * European Distributed Institute of Taxonomy 
+ // $Id$
+ /**
+  * Copyright (C) 2007 EDIT
 - * 
++ * European Distributed Institute of Taxonomy
+  * http://www.e-taxonomy.eu
 -import eu.etaxonomy.cdm.model.common.TimePeriod;
 -import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
++ *
+  * 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.eclipse.jface.util.PropertyChangeEvent;
+ import org.eclipse.swt.graphics.Color;
+ import org.eclipse.swt.widgets.Label;
+ import org.eclipse.ui.forms.widgets.Section;
+ import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 - * 
++import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
+ /**
+  * <p>
+  * GatheringEventUnitElement class.
+  * </p>
 -      
++ *
+  * @author c.mathew
+  * @created 23 Jul. 2013
+  * @version 1.0
+  */
+ public class GatheringEventUnitElement extends AbstractCdmFormElement implements ISelectable {
 -       * 
++
+       private final Label label;
+       private final MinMaxTextSection section_minMaxText;
+       /**
+        * <p>
+        * Constructor for TimePeriodElement.
+        * </p>
 -                      ICdmFormElement parentElement, 
++       *
+        * @param style
+        *            a int.
+        * @param formFactory
+        *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
+        *            object.
+        * @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.
+        */
+       public GatheringEventUnitElement(CdmFormFactory formFactory,
 -                      DerivedUnitFacade gatheringEvent, 
++                      ICdmFormElement parentElement,
+                       String labelString,
 -              
 -              addControl(section_minMaxText); 
++                      DerivedUnitFacade gatheringEvent,
+                       MinMaxTextSection.UnitType unitType,
+                       final int style) {
+               super(formFactory, parentElement);
+               label = formFactory.createLabel(getLayoutComposite(), labelString);
+               addControl(label);
+               section_minMaxText = formFactory.createMinMaxTextSection(this,
+                               unitType,
+                               Section.TWISTIE);
 -              
++
++              addControl(section_minMaxText);
+               section_minMaxText.setEntity(gatheringEvent);
 -              if (eventSource == section_minMaxText) {                        
++
+               formFactory.addPropertyChangeListener(this);
+       }
+       /** {@inheritDoc} */
+       @Override
+       public void propertyChange(PropertyChangeEvent event) {
+               if (event == null) {
+                       return;
+               }
+               Object eventSource = event.getSource();
+               if (getElements().contains(eventSource)) {
+                       handleEvent(eventSource);
+               }
+       }
+       private void handleEvent(Object eventSource) {
 -      
++              if (eventSource == section_minMaxText) {
+                       firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+               }
+       }
+       /** {@inheritDoc} */
+       @Override
+       public void setBackground(Color color) {
+               label.setBackground(color);
+               section_minMaxText.setBackground(color);
+       }
++
+       @Override
+       public void setSelected(boolean selected) {
+               setBackground(selected ? SELECTED : getPersistentBackground());
+       }
+       public void setLabel(String string) {
+               label.setText(string);
+       }
+ }
index 0000000000000000000000000000000000000000,6fb22d599ceb40affc90c726f4ac9202f140c651..6b9c75458fc267c45f4edf8dfe82130a4ec02a41
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,274 +1,271 @@@
 - * European Distributed Institute of Taxonomy 
+ // $Id$
+ /**
+  * Copyright (C) 2007 EDIT
 - * 
++ * European Distributed Institute of Taxonomy
+  * http://www.e-taxonomy.eu
 -import org.eclipse.swt.layout.RowLayout;
++ *
+  * 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.eclipse.jface.util.PropertyChangeEvent;
 -import eu.etaxonomy.cdm.common.CdmUtils;
 -import eu.etaxonomy.cdm.model.common.TimePeriod;
 -import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
+ import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 - * 
++import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
+ /**
+  * <p>
+  * MinMaxTextSection class.
+  * </p>
 -      
++ *
+  * @author c.mathew
+  * @created 23 Jul 2013
+  * @version 1.0
+  */
+ public class MinMaxTextSection extends AbstractFormSection<DerivedUnitFacade> {
+       private final TextWithLabelElement text_freeText;
+       private final NumberWithLabelElement text_minVal;
+       private final NumberWithLabelElement text_maxVal;
+       private int cursorPosition;
 -       * 
++
+       // unit types handled by this section
+       public enum UnitType {
+               ELEVATION,
+               DIST_TO_GROUND,
+               DIST_TO_WATER
+       }
+       private UnitType unitType = UnitType.ELEVATION;
+       /**
+        * <p>
+        * Constructor for DateDetailSection.
+        * </p>
 -              
++       *
+        * @param formFactory
+        *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
+        *            object.
+        * @param parentElement
+        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+        *            object.
+        * @param style
+        *            a int.
+        */
+       protected MinMaxTextSection(CdmFormFactory formFactory,
+                       ICdmFormElement parentElement, UnitType unitType, int style) {
+               super(formFactory, parentElement, style);
+               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);
 -       * 
++
+               text_freeText = formFactory.createTextWithLabelElement(this,
+                               "Freetext : ", getFreetext(), style);
+               formFactory.addPropertyChangeListener(this);
+       }
+       /**
+        * <p>
+        * Setter for the field <code>timePeriod</code>.
+        * </p>
 -                              break;                  
++       *
+        * @param timePeriod
+        *            a {@link eu.etaxonomy.cdm.model.common.TimePeriod} object.
+        */
+       @Override
+       public void setEntity(DerivedUnitFacade gatheringEvent) {
+               super.setEntity(gatheringEvent);
+               updateValues();
+       }
+       private void updateValues() {
+               if(getEntity() != null) {
+                       switch(unitType) {
+                       case ELEVATION:
+                               if(getEntity().getAbsoluteElevation() != null) {
+                                       text_minVal.setNumber(getEntity().getAbsoluteElevation());
+                               }
+                               if(getEntity().getAbsoluteElevationMaximum() != null) {
+                                       text_maxVal.setNumber(getEntity().getAbsoluteElevation());
+                               }
+                               if(getEntity().getAbsoluteElevationText() != null) {
+                                       text_freeText.setText(getEntity().getAbsoluteElevationText());
+                               }
+                               break;
+                       case DIST_TO_GROUND:
+                               if(getEntity().getDistanceToGround() != null) {
+                                       text_minVal.setNumber(getEntity().getDistanceToGround());
+                               }
+                               if(getEntity().getDistanceToGroundMax() != null) {
+                                       text_maxVal.setNumber(getEntity().getDistanceToGroundMax());
+                               }
+                               if(getEntity().getDistanceToGroundText() != null) {
+                                       text_freeText.setText(getEntity().getDistanceToGroundText());
+                               }
 -                              break;          
++                              break;
+                       case DIST_TO_WATER:
+                               if(getEntity().getDistanceToWaterSurface() != null) {
+                                       text_minVal.setNumber(getEntity().getDistanceToWaterSurface());
+                               }
+                               if(getEntity().getDistanceToWaterSurfaceMax() != null) {
+                                       text_maxVal.setNumber(getEntity().getDistanceToWaterSurfaceMax());
+                               }
+                               if(getEntity().getDistanceToWaterSurfaceText() != null) {
+                                       text_freeText.setText(getEntity().getDistanceToWaterSurfaceText());
+                               }
 -              if (eventSource == text_minVal) {                       
++                              break;
+                       default:
+                               break;
+                       }
+               }
+       }
+       /** {@inheritDoc} */
+       @Override
+       public void propertyChange(PropertyChangeEvent event) {
+               if (event == null) {
+                       return;
+               }
+               Object eventSource = event.getSource();
+               if (getElements().contains(eventSource)) {
+                       if (event instanceof CdmPropertyChangeEvent) {
+                               if (((CdmPropertyChangeEvent) event).hasException()) {
+                                       handleException((CdmPropertyChangeEvent) event);
+                                       return;
+                               }
+                       }
+                       handleEvent(eventSource);
+               }
+       }
+       /**
+        * @param event
+        */
+       private void handleException(CdmPropertyChangeEvent event) {
+               firePropertyChangeEvent(new CdmPropertyChangeEvent(this,
+                               event.getException()));
+       }
+       private void handleEvent(Object eventSource) {
 -                      updateFreetext();               
 -              } 
++              if (eventSource == text_minVal) {
+                       updateMinimum();
+               } else if (eventSource == text_maxVal) {
+                       updateMaximum();
+               } else if (eventSource == text_freeText) {
 -      
++                      updateFreetext();
++              }
+               firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+       }
 -       * 
++
+       /*
+        * (non-Javadoc)
 -      
++       *
+        * @see eu.etaxonomy.taxeditor.forms.AbstractFormSection#dispose()
+        */
+       /** {@inheritDoc} */
+       @Override
+       public void dispose() {
+               formFactory.removePropertyChangeListener(this);
+               super.dispose();
+       }
 -                      break;                  
++
+       private void updateMinimum() {
+               switch(unitType) {
+               case ELEVATION:
+                       getEntity().setAbsoluteElevation(text_minVal.getInteger());
+                       break;
+               case DIST_TO_GROUND:
+                       getEntity().setDistanceToGround(text_minVal.getDouble());
 -                      break;                          
++                      break;
+               case DIST_TO_WATER:
+                       getEntity().setDistanceToWaterSurface(text_minVal.getDouble());
 -      
++                      break;
+               }
+       }
 -                      return getEntity().getAbsoluteElevation();                      
++
+       private Number getMinimum() {
+               if(getEntity() == null) {
+                       return null;
+               }
+               switch(unitType) {
+               case ELEVATION:
 -                      return getEntity().getDistanceToGround();                       
++                      return getEntity().getAbsoluteElevation();
+               case DIST_TO_GROUND:
 -                      return getEntity().getDistanceToWaterSurface();                                 
++                      return getEntity().getDistanceToGround();
+               case DIST_TO_WATER:
 -      
++                      return getEntity().getDistanceToWaterSurface();
+               }
+               return null;
+       }
 -                      break;                  
++
+       private void updateMaximum() {
+               switch(unitType) {
+               case ELEVATION:
+                       getEntity().setAbsoluteElevationMax(text_maxVal.getInteger());
+                       break;
+               case DIST_TO_GROUND:
+                       getEntity().setDistanceToGroundMax(text_maxVal.getDouble());
 -                      break;                          
++                      break;
+               case DIST_TO_WATER:
+                       getEntity().setDistanceToWaterSurfaceMax(text_maxVal.getDouble());
 -      
++                      break;
+               }
+       }
 -                      return getEntity().getAbsoluteElevationMaximum();                       
++
+       private Number getMaximum() {
+               if(getEntity() == null) {
+                       return null;
+               }
+               switch(unitType) {
+               case ELEVATION:
 -                      return getEntity().getDistanceToGroundMax();                    
++                      return getEntity().getAbsoluteElevationMaximum();
+               case DIST_TO_GROUND:
 -                      return getEntity().getDistanceToWaterSurfaceMax();                                      
++                      return getEntity().getDistanceToGroundMax();
+               case DIST_TO_WATER:
 -      
++                      return getEntity().getDistanceToWaterSurfaceMax();
+               }
+               return null;
+       }
 -                      break;                  
++
+       private void updateFreetext() {
+               switch(unitType) {
+               case ELEVATION:
+                       getEntity().setAbsoluteElevationText(text_freeText.getText());
+                       break;
+               case DIST_TO_GROUND:
+                       getEntity().setDistanceToGroundText(text_freeText.getText());
 -                      break;                          
++                      break;
+               case DIST_TO_WATER:
+                       getEntity().setDistanceToWaterSurfaceText(text_freeText.getText());
 -      }       
 -      
++                      break;
+               }
 -                      return getEntity().getAbsoluteElevationText();                  
++      }
++
+       private String getFreetext() {
+               if(getEntity() == null) {
+                       return null;
+               }
+               switch(unitType) {
+               case ELEVATION:
 -                      return getEntity().getDistanceToGroundText();                   
++                      return getEntity().getAbsoluteElevationText();
+               case DIST_TO_GROUND:
 -                      return getEntity().getDistanceToWaterSurfaceText();                                     
++                      return getEntity().getDistanceToGroundText();
+               case DIST_TO_WATER:
++                      return getEntity().getDistanceToWaterSurfaceText();
+               }
+               return null;
+       }
+ }
index 04defb9f26c2738bb4ba37a745295883e5535f38,755ecd3b10e39a60363c0b39f5f95b8d6bae6b77..d441b0b2fe51f9fabbfab3d6d0abad4cc0f09e3c
@@@ -43,45 -42,21 +43,21 @@@ public class NumberWithLabelElement ext
         */
        public NumberWithLabelElement(CdmFormFactory toolkit,
                        ICdmFormElement parentElement, String labelString,
-                       Integer initialInteger, int style) {
+                       Number initialNumber, int style) {
                super(toolkit, parentElement, labelString, null, null, style);
-               setInteger(initialInteger);
+               setNumber(initialNumber);
        }
 -      
 -      
 +
-       /**
-        * <p>Constructor for NumberWithLabelElement.</p>
-        *
-        * @param toolkit a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
-        * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
-        * @param labelString a {@link java.lang.String} object.
-        * @param initialFloat a {@link java.lang.Float} object.
-        * @param style a int.
-        */
-       public NumberWithLabelElement(CdmFormFactory toolkit,
-                       ICdmFormElement parentElement, String labelString,
-                       Float initialFloat, int style) {
-               super(toolkit, parentElement, labelString, null, null, style);
-               setFloat(initialFloat);
-       }
 +
        /**
-        * <p>setInteger</p>
+        * <p>setNumber</p>
         *
-        * @param number a {@link java.lang.Integer} object.
+        * @param number a {@link java.lang.Number} object.
         */
-       public void setInteger(Integer number) {
-               super.setText(getStringRepresentation(number));
-       }
-       /**
-        * <p>setFloat</p>
-        *
-        * @param number a {@link java.lang.Float} object.
-        */
-       public void setFloat(Float number) {
+       public void setNumber(Number number) {
                super.setText(getStringRepresentation(number));
        }
 -      
 +
        /**
         * <p>getInteger</p>
         *
                String text = super.getText();
                return new Float(text);
        }
 -      
 +
+       /**
+        * <p>getDouble</p>
+        *
+        * @return a {@link java.lang.Float} object.
+        */
+       public Double getDouble(){
+               String text = super.getText();
+               return new Double(text);
+       }
+       
        private String getStringRepresentation(Object number){
                if(number != null){
                        return number.toString();
index 9efc3247a9926d8d869087ec0e23640fcfbd2788,510aef97529ce5a737fa694bd127dfd5ed578505..a7a8261a097d306b630599e9bce40dc0d58c7c4b
@@@ -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.
   */
@@@ -15,7 -15,7 +15,7 @@@ import eu.etaxonomy.cdm.hibernate.Hiber
  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.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  import eu.etaxonomy.taxeditor.parser.ParseHandler;
@@@ -31,12 -31,12 +31,12 @@@ import eu.etaxonomy.taxeditor.ui.select
   * <p>
   * TaxonNodeDetailElement class.
   * </p>
-- * 
++ *
   * @author n.hoffmann
   * @created Sep 27, 2010
   * @version 1.0
   */
--public class TaxonNodeDetailElement extends AbstractCdmDetailElement<ITreeNode> {
++public class TaxonNodeDetailElement extends AbstractCdmDetailElement<ITaxonTreeNode> {
  
        private EntitySelectionElement<Classification> selection_classification;
  
@@@ -44,7 -44,7 +44,7 @@@
  
        private TaxonNodeSelectionElement selection_parentTaxonNode;
  
--      private ITreeNode parentTreeNode;
++      private ITaxonTreeNode parentTreeNode;
  
        private EntitySelectionElement<Taxon> selection_reuseExistingTaxon;
  
@@@ -64,7 -64,7 +64,7 @@@
         * <p>
         * Constructor for TaxonNodeDetailElement.
         * </p>
--       * 
++       *
         * @param formFactory
         *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
         *            object.
@@@ -79,7 -79,7 +79,7 @@@
  
        /*
         * (non-Javadoc)
--       * 
++       *
         * @see
         * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#createControls
         * (eu.etaxonomy.taxeditor.forms.ICdmFormElement,
@@@ -88,7 -88,7 +88,7 @@@
        /** {@inheritDoc} */
        @Override
        protected void createControls(ICdmFormElement formElement,
--                      ITreeNode entity, int style) {
++              ITaxonTreeNode entity, int style) {
                selection_classification = formFactory
                                .createSelectionElement(Classification.class,
                                                getConversationHolder(), formElement, "Classification",
  
        /*
         * (non-Javadoc)
--       * 
++       *
         * @see
         * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleEvent(java
         * .lang.Object)
         * <p>
         * Getter for the field <code>classification</code>.
         * </p>
--       * 
++       *
         * @return the classification
         */
        public Classification getClassification() {
         * <p>
         * isOpenInEditor
         * </p>
--       * 
++       *
         * @return the openInEditor
         */
        public boolean isOpenInEditor() {
         * <p>
         * Getter for the field <code>parentTreeNode</code>.
         * </p>
--       * 
--       * @return a {@link eu.etaxonomy.cdm.model.taxon.ITreeNode} object.
++       *
++       * @return a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
         */
--      public ITreeNode getParentTreeNode() {
++      public ITaxonTreeNode getParentTreeNode() {
                return parentTreeNode;
        }
  
         * <p>
         * Getter for the field <code>taxon</code>.
         * </p>
--       * 
++       *
         * @return the taxon
         */
        public Taxon getTaxon() {
         * @param parentTreeNode
         *            the parentTreeNode to set
         */
--      private void setParentTreeNode(ITreeNode parentTreeNode) {
++      private void setParentTreeNode(ITaxonTreeNode parentTreeNode) {
                this.parentTreeNode = parentTreeNode;
  
                if (parentTreeNode instanceof Classification) {
                        selection_parentTaxonNode.setEntity((TaxonNode) parentTreeNode);
                        selection_parentTaxonNode.setClassification(classification);
                } else if(parentTreeNode == null){
--                      this.parentTreeNode = selection_classification.getEntity();                     
++                      this.parentTreeNode = selection_classification.getEntity();
                }
        }
  
         * <p>
         * isComplete
         * </p>
--       * 
++       *
         * @return the complete
         */
        public boolean isComplete() {
index 87c13cdc12751f5bc205dd48e04766e46a29ba50,4f261d545aa00361064feb154708d8f54072bfac..54e48f30a07522ded244fa7e8f9d068e112a2afb
@@@ -13,11 -13,11 +13,11 @@@ package eu.etaxonomy.taxeditor.ui.secti
  import org.eclipse.jface.util.PropertyChangeEvent;
  
  import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
--import eu.etaxonomy.cdm.model.taxon.ITreeNode;
++import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
 +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.element.ICdmFormElement;
  
  /**
   * <p>
@@@ -28,7 -28,7 +28,7 @@@
   * @created Sep 15, 2009
   * @version 1.0
   */
--public class TaxonNodeWizardPage extends AbstractCdmEntityWizardPage<ITreeNode> {
++public class TaxonNodeWizardPage extends AbstractCdmEntityWizardPage<ITaxonTreeNode> {
  
        /**
         * <p>
         *            a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
         *            object.
         * @param entity
--       *            a {@link eu.etaxonomy.cdm.model.taxon.ITreeNode} object.
++       *            a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
         */
        public TaxonNodeWizardPage(CdmFormFactory formFactory,
--                      ConversationHolder conversation, ITreeNode entity) {
++                      ConversationHolder conversation, ITaxonTreeNode entity) {
                super(formFactory, conversation, entity);
                setTitle("Create a new Taxon");
        }
         * Getter for the field <code>parentTreeNode</code>.
         * </p>
         *
--       * @return a {@link eu.etaxonomy.cdm.model.taxon.ITreeNode} object.
++       * @return a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
         */
--      public ITreeNode getParentTreeNode() {
++      public ITaxonTreeNode getParentTreeNode() {
                return ((TaxonNodeDetailElement) getDetailElement())
                                .getParentTreeNode();
        }
index 0176c365f21257cb69413bb702a18a8ad62c9027,d1ccc47b6b5290583aa808adc57214aee95c307d..c038a1862969c119d70fc518aa0bdc764b1e836b
@@@ -12,11 -12,11 +12,11 @@@ package eu.etaxonomy.taxeditor.ui.secti
  
  import org.eclipse.swt.events.SelectionListener;
  
- import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
+ import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
  import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 +import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 -import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
  import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;