commit cb89f4f7e3766c95635f684be724a814c6ae5281
Author: Andreas Müller <a.mueller@bgbm.org>
Date:   Wed Jul 24 20:10:11 2019 +0200

    ref #6794  adapt TaxEditor to new term structure (rename FeatureNode and FeatureTree)

diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java
index 778431f3c..dcd95054c 100644
--- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java
+++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java
@@ -45,6 +45,7 @@ import eu.etaxonomy.cdm.api.service.ICollectionService;
 import eu.etaxonomy.cdm.api.service.ICommonService;
 import eu.etaxonomy.cdm.api.service.IDatabaseService;
 import eu.etaxonomy.cdm.api.service.IDescriptionService;
+import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;
 import eu.etaxonomy.cdm.api.service.IEntityValidationService;
 import eu.etaxonomy.cdm.api.service.IEventBaseService;
@@ -65,20 +66,19 @@ import eu.etaxonomy.cdm.api.service.IProgressMonitorService;
 import eu.etaxonomy.cdm.api.service.IReferenceService;
 import eu.etaxonomy.cdm.api.service.IRegistrationService;
 import eu.etaxonomy.cdm.api.service.IRightsService;
-import eu.etaxonomy.cdm.api.service.IService;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.api.service.ITermNodeService;
 import eu.etaxonomy.cdm.api.service.ITermService;
+import eu.etaxonomy.cdm.api.service.ITermTreeService;
 import eu.etaxonomy.cdm.api.service.ITestService;
 import eu.etaxonomy.cdm.api.service.IUserService;
 import eu.etaxonomy.cdm.api.service.IVocabularyService;
-import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;
 import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
 import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
 import eu.etaxonomy.cdm.ext.geo.IEditGeoService;
 import eu.etaxonomy.cdm.io.service.IIOService;
-import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmPermissionEvaluator;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.UnanimousBasedUnrevokable;
@@ -375,11 +375,20 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic
     public IFeatureTreeService getFeatureTreeService(){
         return (IFeatureTreeService) getService(IFeatureTreeService.class, "/remoting/featuretree.service", new CdmServiceRequestExecutor());
     }
+    @Override
+    public ITermTreeService getTermTreeService() {
+    	return (ITermTreeService) getService(ITermTreeService.class, "/remoting/termtree.service", new CdmServiceRequestExecutor());
+    }
 
     @Override
     public IFeatureNodeService getFeatureNodeService(){
         return (IFeatureNodeService) getService(IFeatureNodeService.class, "/remoting/featurenode.service", new CdmServiceRequestExecutor());
     }
+    
+	@Override
+	public ITermNodeService getTermNodeService() {
+        return (ITermNodeService) getService(ITermNodeService.class, "/remoting/termnode.service", new CdmServiceRequestExecutor());
+	}
 
     @Override
     public IVocabularyService getVocabularyService(){
@@ -499,4 +508,6 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic
     public ITestService getTestService() {
         return (ITestService) getService(ITestService.class, "/remoting/test.service", new CdmServiceRequestExecutor());
     }
+
+
 }
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetComposite.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetComposite.java
index fcb0a3195..e6ae0ab87 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetComposite.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetComposite.java
@@ -22,10 +22,10 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Tree;
 
-import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.cdm.model.description.Character;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
 import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.term.TermTree;
+import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.cdm.remote.l10n.TermRepresentation_L10n;
 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
@@ -165,10 +165,10 @@ public class DescriptiveDataSetComposite extends Composite {
         return featureTreeEditorComposite;
     }
 
-    public FeatureTree<Character> getCharacters(){
+    public TermTree<Character> getCharacters(){
         return featureTreeEditorComposite.getFeatureTree();
     }
-    public void setCharacters(FeatureTree<Character> characters) {
+    public void setCharacters(TermTree<Character> characters) {
         featureTreeEditorComposite.setSelectedTree(characters);
     }
 
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetEditor.java
index 66011b2e0..00553008b 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetEditor.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetEditor.java
@@ -64,7 +64,7 @@ import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
@@ -289,10 +289,10 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
                 }
             }
         }
-        FeatureTree<Character> characters = composite.getCharacters();
+        TermTree<Character> characters = composite.getCharacters();
         if(characters!=null){
             //save characters because they can be modified in this editor
-            characters.getDistinctFeatures().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
+            characters.getDistinctTerms().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
         }
 
 
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDragListener.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDragListener.java
index 874b8eff6..f183b56e1 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDragListener.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDragListener.java
@@ -22,7 +22,7 @@ import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Display;
 
 import eu.etaxonomy.cdm.model.description.Character;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.featuretree.CharacterTransfer;
 import eu.etaxonomy.taxeditor.featuretree.e4.FeatureNodeDragListener;
 
@@ -72,9 +72,9 @@ public class CharacterDragListener extends FeatureNodeDragListener {
                 !structureViewer.getSelection().isEmpty()
                 && !propertyViewer.getSelection().isEmpty()
                 && ((IStructuredSelection) structureViewer.getSelection()).toList()
-                .stream().allMatch(element -> element instanceof FeatureNode)
+                .stream().allMatch(element -> element instanceof TermNode)
                 && ((IStructuredSelection) propertyViewer.getSelection()).toList()
-                .stream().allMatch(element -> element instanceof FeatureNode);
+                .stream().allMatch(element -> element instanceof TermNode);
         if(!event.doit){
             return;
         }
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDropAdapter.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDropAdapter.java
index 9e733912d..956b86343 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDropAdapter.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDropAdapter.java
@@ -15,8 +15,9 @@ import org.eclipse.swt.dnd.TransferData;
 
 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
 import eu.etaxonomy.cdm.model.description.Character;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.featuretree.CharacterTransfer;
 import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeDropAdapter;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -39,7 +40,7 @@ public class CharacterDropAdapter extends FeatureTreeDropAdapter {
 
 	@Override
 	protected Object determineTarget(DropTargetEvent event) {
-        return event.item == null ? ((FeatureTree)getViewer().getInput()).getRoot() : event.item.getData();
+        return event.item == null ? ((TermTree<Feature>)getViewer().getInput()).getRoot() : event.item.getData();
 	}
 
 	@Override
@@ -53,7 +54,7 @@ public class CharacterDropAdapter extends FeatureTreeDropAdapter {
 	    if(!characterEditor.isVocabularySet()){
 	        return false;
 	    }
-	    FeatureNode target = (FeatureNode) getCurrentTarget();
+	    TermNode<Feature> target = (TermNode<Feature>) getCurrentTarget();
 	    if(data instanceof Object[]){
 	        Object[] transferObjects = (Object[])data;
 	        for(int i=0;i<transferObjects.length;i++){
@@ -62,7 +63,7 @@ public class CharacterDropAdapter extends FeatureTreeDropAdapter {
 	                Character character = (Character)object;
 	                if(target==null){
                         //drop on feature tree
-                        target = ((FeatureTree)getViewer().getInput()).getRoot();
+                        target = ((TermTree<Feature>)getViewer().getInput()).getRoot();
                     }
                     CdmStore.getService(IFeatureNodeService.class).createChildFeatureNode(target.getUuid(), character, characterEditor.getVocabulary().getUuid());
 	            }
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterEditor.java
index 0c549f6be..212ce6d46 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterEditor.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterEditor.java
@@ -59,10 +59,11 @@ import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
 import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.api.service.IVocabularyService;
 import eu.etaxonomy.cdm.model.description.Character;
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
 import eu.etaxonomy.cdm.model.term.Representation;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.cdm.model.term.VocabularyEnum;
@@ -226,7 +227,7 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
                     return;
                 }
                 Collection<Character> characters = createCharacters((TreeSelection)structureTreeSelection, (TreeSelection)propertyTreeSelection);
-                FeatureNode<Character> parent = ((FeatureTree<Character>) characterTreeEditorComposite.getViewer().getInput()).getRoot();
+                TermNode<Character> parent = ((TermTree<Character>) characterTreeEditorComposite.getViewer().getInput()).getRoot();
                 for (Character character : characters) {
                     //add new Character to feature tree
                     CdmStore.getService(IFeatureNodeService.class).createChildFeatureNode(parent.getUuid(), character, vocabulary.getUuid());
@@ -291,14 +292,14 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
     public static Collection<Character> createCharacters(TreeSelection structureTreeSelection, TreeSelection propertyTreeSelection){
         Set<Character> characters = new HashSet<>();
         //get selected structures and properties
-        Iterator<FeatureNode<DefinedTermBase>> structureIterator = structureTreeSelection.iterator();
+        Iterator<TermNode<DefinedTermBase>> structureIterator = structureTreeSelection.iterator();
 
         //create all combinations of structures and properties
         while(structureIterator.hasNext()){
-            FeatureNode<DefinedTermBase> structureNode = structureIterator.next();
-            Iterator<FeatureNode<DefinedTermBase>> propertiesIterator = propertyTreeSelection.iterator();
+            TermNode<DefinedTermBase> structureNode = structureIterator.next();
+            Iterator<TermNode<DefinedTermBase>> propertiesIterator = propertyTreeSelection.iterator();
             while(propertiesIterator.hasNext()){
-                FeatureNode<DefinedTermBase> propertyNode = propertiesIterator.next();
+                TermNode<DefinedTermBase> propertyNode = propertiesIterator.next();
                 Representation structureRepresentation = structureNode.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
                 Representation propertyRepresentation = propertyNode.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
                 String label = null;
@@ -327,10 +328,10 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
         // commit the conversation and start a new transaction immediately
         conversation.commit(true);
 
-        FeatureTree<Character> featureTree = characterTreeEditorComposite.getFeatureTree();
+        TermTree<Character> featureTree = characterTreeEditorComposite.getFeatureTree();
         if(featureTree!=null){
             //save characters because they can be modified in this editor
-            featureTree.getDistinctFeatures().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
+            featureTree.getDistinctTerms().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
         }
         CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(featureTree);
 
@@ -376,13 +377,13 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
         });
         Map<Object, List<String>> propertyPathMap =
                 new HashMap<Object, List<String>>();
-        propertyPathMap.put(FeatureNode.class,propertyPaths);
+        propertyPathMap.put(TermNode.class,propertyPaths);
         return propertyPathMap;
     }
 
     @Override
-    public List<FeatureTree<Character>> getRootEntities() {
-        List<FeatureTree<Character>> root = new ArrayList<>();
+    public List<TermTree<Character>> getRootEntities() {
+        List<TermTree<Character>> root = new ArrayList<>();
         root.add(characterTreeEditorComposite.getFeatureTree());
         return root;
     }
@@ -422,7 +423,7 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
         return (IStructuredSelection) characterTreeEditorComposite.getViewer().getSelection();
     }
 
-    public FeatureTree<Character> getCharacterTree(){
+    public TermTree<Character> getCharacterTree(){
         return characterTreeEditorComposite.getFeatureTree();
     }
 
@@ -434,10 +435,10 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
     }
 
     private class FeatureTreeChooserListener extends SelectionAdapter{
-        private FeatureTreeEditorComposite<?> featureTreeEditorComposite;
+        private FeatureTreeEditorComposite<Feature> featureTreeEditorComposite;
         private TermType termType;
 
-        public FeatureTreeChooserListener(FeatureTreeEditorComposite<?> featureTreeEditorComposite, TermType termType) {
+        public FeatureTreeChooserListener(FeatureTreeEditorComposite<Feature> featureTreeEditorComposite, TermType termType) {
             super();
             this.featureTreeEditorComposite = featureTreeEditorComposite;
             this.termType = termType;
@@ -445,7 +446,7 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
 
         @Override
         public void widgetSelected(SelectionEvent e) {
-            FeatureTree tree = FeatureTreeSelectionDialog.select(featureTreeEditorComposite.getDisplay().getActiveShell(), null, termType);
+            TermTree<Feature> tree = FeatureTreeSelectionDialog.select(featureTreeEditorComposite.getDisplay().getActiveShell(), null, termType);
             if(tree!=null){
                 featureTreeEditorComposite.setSelectedTree(tree);
             }
@@ -475,7 +476,7 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
     @Override
     public boolean postOperation(Object objectAffectedByOperation) {
         characterTreeEditorComposite.getViewer().refresh();
-        if(objectAffectedByOperation instanceof FeatureNode){
+        if(objectAffectedByOperation instanceof TermNode){
             StructuredSelection selection = new StructuredSelection(objectAffectedByOperation);
             characterTreeEditorComposite.getViewer().setSelection(selection);
         }
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrix.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrix.java
index 6e96a0a12..0ed4e1265 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrix.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrix.java
@@ -105,8 +105,8 @@ import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.MeasurementUnit;
 import eu.etaxonomy.cdm.model.description.State;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
@@ -277,7 +277,7 @@ public class CharacterMatrix extends Composite {
         getNatTableState().remove(PersistenceDialog.ACTIVE_VIEW_CONFIGURATION_KEY);
     }
 
-    private List<Character> initCharacterList(FeatureNode<Character> node){
+    private List<Character> initCharacterList(TermNode<Character> node){
         List<Character> characters = new ArrayList<>();
         node.getChildNodes().forEach(childNode->
                 {
@@ -290,7 +290,7 @@ public class CharacterMatrix extends Composite {
     public void initDescriptiveDataSet(DescriptiveDataSet descriptiveDataSet){
         this.descriptiveDataSet = descriptiveDataSet;
         //get features/columns stored in descriptive data set
-        FeatureTree<Character> tree = descriptiveDataSet.getDescriptiveSystem();
+        TermTree<Character> tree = descriptiveDataSet.getDescriptiveSystem();
         characters = initCharacterList(tree.getRoot());
 
         //init state data for categorical features
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java
index 9cf54bb45..25f619d56 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java
@@ -17,10 +17,11 @@ import org.eclipse.jface.viewers.Viewer;
 import eu.etaxonomy.cdm.model.common.Marker;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.IDescribable;
 import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
 import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;
 import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
 import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree;
@@ -181,9 +182,9 @@ public class DescriptiveContentProvider implements ITreeContentProvider {
 	 * @param description
 	 * @return
 	 */
-	private FeatureTree getFeatureTree(DescriptionBase description){
+	private TermTree<Feature> getFeatureTree(DescriptionBase description){
 
-	        FeatureTree<?> featureTree = null;
+	        TermTree<Feature> featureTree = null;
 
 	        // TODO change this to the feature tree associated with this taxon
 	        // description
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/e4/handler/DynamicFeatureMenuE4.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/e4/handler/DynamicFeatureMenuE4.java
index 950497bfb..25e412686 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/e4/handler/DynamicFeatureMenuE4.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/e4/handler/DynamicFeatureMenuE4.java
@@ -31,8 +31,8 @@ import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.VocabularyEnum;
 import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;
 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
@@ -61,20 +61,20 @@ public class DynamicFeatureMenuE4 {
         Object selectedElement = selection.getFirstElement();
 
         if (selectedElement instanceof DescriptionBase<?>) {
-            FeatureTree<?> featureTree = getFeatureTree((DescriptionBase<?>) selectedElement);
+            TermTree<?> featureTree = getFeatureTree((DescriptionBase<?>) selectedElement);
 
-            for (FeatureNode<?> childNode : featureTree.getRootChildren()) {
+            for (TermNode<?> childNode : featureTree.getRootChildren()) {
                 createMenuItem(menu, childNode.getTerm(), globalLanguage);
             }
         } else if (selectedElement instanceof FeatureNodeContainer) {
-            FeatureNode<?> featureNode = ((FeatureNodeContainer) selectedElement)
+            TermNode<?> featureNode = ((FeatureNodeContainer) selectedElement)
                     .getFeatureNode();
 
             // add the feature to the menu
             createMenuItem(menu, featureNode.getTerm(), globalLanguage);
 
             // add possible children to the menu
-            for (FeatureNode<?> childNode : featureNode.getChildNodes()) {
+            for (TermNode<?> childNode : featureNode.getChildNodes()) {
                 createMenuItem(menu, childNode.getTerm(), globalLanguage);
             }
         } else if (selectedElement instanceof DescriptionElementBase) {
@@ -123,8 +123,8 @@ public class DynamicFeatureMenuE4 {
 	 * @param description
 	 * @return
 	 */
-	private FeatureTree<?> getFeatureTree(DescriptionBase description) {
-		FeatureTree<?> featureTree = null;
+	private TermTree<?> getFeatureTree(DescriptionBase description) {
+		TermTree<?> featureTree = null;
 
 		// TODO change this to the feature tree associated with this taxon
 		// description
@@ -138,11 +138,11 @@ public class DynamicFeatureMenuE4 {
 
 		if (featureTree == null) {
 		    featureTree = TermEditorInput.getDefaultFeatureTree();
-		    		}
+		}
 		if (description instanceof TaxonNameDescription){
 		    List<Feature> terms = CdmStore.getTermManager().getPreferredTerms(CdmStore.getService(IVocabularyService.class).load(VocabularyEnum.NameFeature.getUuid()));
 		    terms.remove(Feature.PROTOLOGUE());
-		    featureTree = FeatureTree.NewInstance(terms);
+		    featureTree = TermTree.NewInstance(terms);
 		}
 
 		return featureTree;
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/wizard/DatabaseRepairUpdateSortIndicesWizard.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/wizard/DatabaseRepairUpdateSortIndicesWizard.java
index 9b6079f9f..ea9863932 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/wizard/DatabaseRepairUpdateSortIndicesWizard.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/wizard/DatabaseRepairUpdateSortIndicesWizard.java
@@ -25,7 +25,6 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
 /**
  * @author k.luther
  * @date 06.12.2016
- *
  */
 public class DatabaseRepairUpdateSortIndicesWizard extends Wizard implements IPostMoniteredOperationEnabled{
    // private final DatabaseRepairSortIndexPage repairSortIndexPage;
@@ -51,12 +50,10 @@ public class DatabaseRepairUpdateSortIndicesWizard extends Wizard implements IPo
             if (config == null){
                 ICdmSource source= CdmStore.getActiveCdmSource();
                 config = SortIndexUpdaterConfigurator.NewInstance();
-                config.setDoFeatureNode(false);
+                config.setDoTermNode(false);
                 config.setDoPolytomousKeyNode(false);
-
-
              }
-            if (config.isDoFeatureNode() || config.isDoPolytomousKeyNode() || config.isDoTaxonNode()){
+            if (config.isDoTermNode() || config.isDoPolytomousKeyNode() || config.isDoTaxonNode()){
 
                 final UUID uuid = longRunningTaskService.monitLongRunningTask(config);
                 Display.getDefault().asyncExec(new Runnable() {
@@ -69,15 +66,10 @@ public class DatabaseRepairUpdateSortIndicesWizard extends Wizard implements IPo
                                 DatabaseRepairUpdateSortIndicesWizard.this,
                                 null,
                                 true);
-
                     }
-
                 });
-
-
             }
 
-
         return true;
     }
 
@@ -92,8 +84,5 @@ public class DatabaseRepairUpdateSortIndicesWizard extends Wizard implements IPo
     @Override
     public void postOperation(IRemotingProgressMonitor monitor) {
         // TODO Auto-generated method stub
-
     }
-
-
 }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/wizard/SortIndexUpdaterWizardPage.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/wizard/SortIndexUpdaterWizardPage.java
index f934b8928..048431470 100755
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/wizard/SortIndexUpdaterWizardPage.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/wizard/SortIndexUpdaterWizardPage.java
@@ -68,14 +68,14 @@ public class SortIndexUpdaterWizardPage extends WizardPage {
         });
 
         Button checkBoxFeatureNode = new Button(composite, SWT.CHECK);
-        checkBoxFeatureNode.setSelection(sortIndexConfig.isDoFeatureNode());
+        checkBoxFeatureNode.setSelection(sortIndexConfig.isDoTermNode());
         checkBoxFeatureNode.setText(Messages.DatabaseRepairPage_featureNodes);
         checkBoxFeatureNode
         .setToolTipText(Messages.DatabaseRepairPage_toolTipFeatureNodes);
         checkBoxFeatureNode.addSelectionListener(new SelectionAdapter() {
             @Override
             public void widgetSelected(SelectionEvent e) {
-                sortIndexConfig.setDoFeatureNode(!sortIndexConfig.isDoFeatureNode());
+                sortIndexConfig.setDoTermNode(!sortIndexConfig.isDoTermNode());
             }
         });
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/FeatureTreeViewerComparator.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/FeatureTreeViewerComparator.java
index 8a068f761..864bff11c 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/FeatureTreeViewerComparator.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/FeatureTreeViewerComparator.java
@@ -12,20 +12,19 @@ package eu.etaxonomy.taxeditor.editor.definedterm;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerComparator;
 
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermTree;
 
 /**
  *
  * @author pplitzner
  * @since May 24, 2019
- *
  */
 public class FeatureTreeViewerComparator extends ViewerComparator {
 
     @Override
     public int compare(Viewer viewer, Object e1, Object e2) {
-        if(e1 instanceof FeatureTree && e2 instanceof FeatureTree) {
-            return ((FeatureTree)e1).getTitleCache().toLowerCase().compareTo(((FeatureTree) e2).getTitleCache().toLowerCase());
+        if(e1 instanceof TermTree && e2 instanceof TermTree) {
+            return ((TermTree<?>)e1).getTitleCache().toLowerCase().compareTo(((TermTree<?>) e2).getTitleCache().toLowerCase());
         }
         return super.compare(viewer, e1, e2);
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/TermEditorInput.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/TermEditorInput.java
index 235714cfe..a659f235c 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/TermEditorInput.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/TermEditorInput.java
@@ -17,7 +17,7 @@ import java.util.Set;
 import eu.etaxonomy.cdm.api.service.IVocabularyService;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.term.DefinedTerm;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.cdm.model.term.VocabularyEnum;
@@ -39,8 +39,8 @@ public class TermEditorInput extends AbstractDefinedTermEditorInput<DefinedTerm>
 
 	// FIXME: the default feature should be move to CdmApplicationState
 	//        where it is a singleton instance variable
-	private static FeatureTree defaultFeatureTree = null;
-	private static FeatureTree defaultNameFeatureTree = null;
+	private static TermTree<Feature> defaultFeatureTree = null;
+	private static TermTree<Feature> defaultNameFeatureTree = null;
 
 	private List<String> termClasses = Arrays.asList(new String[]{
 			DefinedTerm.class.getName()
@@ -98,7 +98,7 @@ public class TermEditorInput extends AbstractDefinedTermEditorInput<DefinedTerm>
         updateDefaultFeatureTree();
     }
 
-    public static FeatureTree getDefaultFeatureTree() {
+    public static TermTree<Feature> getDefaultFeatureTree() {
         if(defaultFeatureTree == null) {
             List<Feature> features = TermStore.getTerms(Feature.class);
             List<Feature> nameFeatures = CdmStore.getTermManager().getPreferredTerms(CdmStore.getService(IVocabularyService.class).load(VocabularyEnum.NameFeature.getUuid()), null);
@@ -108,15 +108,15 @@ public class TermEditorInput extends AbstractDefinedTermEditorInput<DefinedTerm>
                     features.remove(feature);
                 }
             }
-            defaultFeatureTree = FeatureTree.NewInstance(features);
+            defaultFeatureTree = TermTree.NewInstance(features);
         }
         return defaultFeatureTree;
     }
 
-    public static FeatureTree getDefaultNameFeatureTree() {
+    public static TermTree<Feature> getDefaultNameFeatureTree() {
         if(defaultNameFeatureTree == null) {
             List<Feature> nameFeatures = CdmStore.getTermManager().getPreferredTerms(CdmStore.getService(IVocabularyService.class).load(VocabularyEnum.NameFeature.getUuid()), null);
-            defaultNameFeatureTree = FeatureTree.NewInstance(nameFeatures);
+            defaultNameFeatureTree = TermTree.NewInstance(nameFeatures);
         }
         return defaultNameFeatureTree;
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/CharacterTransfer.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/CharacterTransfer.java
index d8ac8d129..c4f614b51 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/CharacterTransfer.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/CharacterTransfer.java
@@ -23,9 +23,10 @@ import org.eclipse.swt.dnd.ByteArrayTransfer;
 import org.eclipse.swt.dnd.TransferData;
 
 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
-import eu.etaxonomy.cdm.model.term.Representation;
 import eu.etaxonomy.cdm.model.description.Character;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.term.DefinedTerm;
+import eu.etaxonomy.cdm.model.term.Representation;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
@@ -100,8 +101,8 @@ public class CharacterTransfer extends ByteArrayTransfer {
                         String string = in.readUTF();
                         String[] split = string.split(",");
                         IFeatureNodeService featureNodeService = CdmStore.getService(IFeatureNodeService.class);
-                        FeatureNode structure = featureNodeService.load(UUID.fromString(split[0]));
-                        FeatureNode property = featureNodeService.load(UUID.fromString(split[1]));
+                        TermNode<DefinedTerm> structure = featureNodeService.load(UUID.fromString(split[0]));
+                        TermNode<DefinedTerm> property = featureNodeService.load(UUID.fromString(split[1]));
                         Representation structureRepresentation = structure.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
                         Representation propertyRepresentation = property.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
                         String label = null;
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureNodeTransfer.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureNodeTransfer.java
index 5d8a0f085..cacd6e2de 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureNodeTransfer.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureNodeTransfer.java
@@ -12,7 +12,8 @@ package eu.etaxonomy.taxeditor.featuretree;
 import java.util.UUID;
 
 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.model.CdmObjectTransfer;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
@@ -21,9 +22,8 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  *
  * @author n.hoffmann
  * @created Aug 5, 2010
- * @version 1.0
  */
-public class FeatureNodeTransfer extends CdmObjectTransfer<FeatureNode> {
+public class FeatureNodeTransfer extends CdmObjectTransfer<TermNode<Feature>> {
 
 	private static FeatureNodeTransfer instance = new FeatureNodeTransfer();
 	private static final String TYPE_NAME = "featureNode-transfer-format";
@@ -53,11 +53,8 @@ public class FeatureNodeTransfer extends CdmObjectTransfer<FeatureNode> {
 		return new String[] { TYPE_NAME };
 	}
 
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.taxeditor.model.CdmObjectTransfer#loadElement(java.util.UUID)
-	 */
 	@Override
-	public FeatureNode loadElement(UUID uuid) {
+	public TermNode<Feature> loadElement(UUID uuid) {
 		return  CdmStore.getService(IFeatureNodeService.class).load(uuid);
 	}
 }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java
index 2b78666f0..ce357273e 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java
@@ -14,8 +14,9 @@ import java.util.List;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
 
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
 
 /**
  * <p>FeatureTreeContentProvider class.</p>
@@ -44,9 +45,6 @@ public class FeatureTreeContentProvider implements ITreeContentProvider {
 
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
-	 */
 	/** {@inheritDoc} */
 	@Override
 	public Object[] getElements(Object inputElement) {
@@ -56,14 +54,14 @@ public class FeatureTreeContentProvider implements ITreeContentProvider {
 	/** {@inheritDoc} */
 	@Override
 	public Object[] getChildren(Object parentElement) {
-		if(parentElement instanceof FeatureTree){
-			List<FeatureNode> children = ((FeatureTree) parentElement).getRootChildren();
+		if(parentElement instanceof TermTree){
+			List<TermNode<Feature>> children = ((TermTree<Feature>) parentElement).getRootChildren();
 			return children.toArray();
-		}else if(parentElement instanceof FeatureNode){
-			List<FeatureNode> children = ((FeatureNode) parentElement).getChildNodes();
+		}else if(parentElement instanceof TermNode){
+			List<TermNode<Feature>> children = ((TermNode<Feature>) parentElement).getChildNodes();
 			return children.toArray();
 		}else if(parentElement instanceof List){
-			return ((List) parentElement).toArray();
+			return ((List<TermNode<Feature>>) parentElement).toArray();
 		}else{
 			return new Object[]{};
 		}
@@ -72,8 +70,8 @@ public class FeatureTreeContentProvider implements ITreeContentProvider {
 	/** {@inheritDoc} */
 	@Override
 	public Object getParent(Object element) {
-	    if(element instanceof FeatureNode){
-	        return ((FeatureNode) element).getParent();
+	    if(element instanceof TermNode){
+	        return ((TermNode<Feature>) element).getParent();
 	    }
 		return null;
 	}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeLabelProvider.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeLabelProvider.java
index d97bb2e73..7139a9783 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeLabelProvider.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeLabelProvider.java
@@ -13,11 +13,11 @@ import java.util.ArrayList;
 
 import org.eclipse.jface.viewers.LabelProvider;
 
-import eu.etaxonomy.cdm.model.term.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.term.DefinedTermBase;
 import eu.etaxonomy.cdm.model.term.Representation;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 
 /**
@@ -31,10 +31,10 @@ public class FeatureTreeLabelProvider extends LabelProvider {
 	/** {@inheritDoc} */
 	@Override
 	public String getText(Object element) {
-		if(element instanceof FeatureTree){
-			return ((FeatureTree) element).getTitleCache();
-		}else if(element instanceof FeatureNode){
-		    DefinedTermBase term = ((FeatureNode) element).getTerm();
+		if(element instanceof TermTree){
+			return ((TermTree) element).getTitleCache();
+		}else if(element instanceof TermNode){
+		    DefinedTermBase term = ((TermNode) element).getTerm();
 		    if(term!=null){
 		        Representation rep = term.getRepresentation(PreferencesUtil.getGlobalLanguage());
 		        if (rep == null){
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreePropertyTester.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreePropertyTester.java
index b1dbdd68c..a7240e246 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreePropertyTester.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreePropertyTester.java
@@ -6,7 +6,7 @@ package eu.etaxonomy.taxeditor.featuretree;
 import org.eclipse.core.expressions.PropertyTester;
 import org.eclipse.jface.viewers.IStructuredSelection;
 
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermTree;
 
 /**
  * Property tester used by the feature tree menu.
@@ -40,7 +40,7 @@ public class FeatureTreePropertyTester extends PropertyTester {
 
 	private boolean isFeatureTree(Object[] selectedElements) {
 	    for (Object object : selectedElements){
-	        if(!(object instanceof FeatureTree)){
+	        if(!(object instanceof TermTree)){
 	            return false;
 	        }
 	    }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureNodeDragListener.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureNodeDragListener.java
index 6987524df..e4dab040b 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureNodeDragListener.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureNodeDragListener.java
@@ -13,7 +13,8 @@ import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.dnd.DragSourceAdapter;
 import org.eclipse.swt.dnd.DragSourceEvent;
 
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
 
 public class FeatureNodeDragListener extends DragSourceAdapter {
@@ -31,7 +32,7 @@ public class FeatureNodeDragListener extends DragSourceAdapter {
     public void dragSetData(DragSourceEvent event) {
         IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
         if(selection!=null && !selection.isEmpty()){
-            FeatureNode[] featureNodes = (FeatureNode[]) selection.toList().toArray(new FeatureNode[selection.size()]);
+            TermNode<Feature>[] featureNodes = (TermNode<Feature>[]) selection.toList().toArray(new TermNode[selection.size()]);
             if (FeatureNodeTransfer.getInstance().isSupportedType(event.dataType)) {
                 event.data = featureNodes;
             }
@@ -45,7 +46,7 @@ public class FeatureNodeDragListener extends DragSourceAdapter {
 	public void dragStart(DragSourceEvent event) {
         event.doit = !viewer.getSelection().isEmpty()
                 && ((IStructuredSelection) viewer.getSelection()).toList()
-                .stream().allMatch(element -> element instanceof FeatureNode);
+                .stream().allMatch(element -> element instanceof TermNode);
 	}
 
 }
\ No newline at end of file
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeDropAdapter.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeDropAdapter.java
index 3c4257ce8..fb3f1d764 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeDropAdapter.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeDropAdapter.java
@@ -21,10 +21,10 @@ import org.eclipse.jface.viewers.ViewerDropAdapter;
 import org.eclipse.swt.dnd.TransferData;
 
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
 import eu.etaxonomy.cdm.model.term.IHasTermType;
 import eu.etaxonomy.cdm.model.term.OrderedTermVocabulary;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
@@ -58,18 +58,18 @@ public class FeatureTreeDropAdapter extends ViewerDropAdapter {
 	        return false;
 	    }
 		Object currentTarget = getCurrentTarget();
-		FeatureNode target = null;
-		if(currentTarget instanceof FeatureTree){
-		    target = ((FeatureTree) currentTarget).getRoot();
+		TermNode<Feature> target = null;
+		if(currentTarget instanceof TermTree){
+		    target = ((TermTree) currentTarget).getRoot();
 		}
-		else if(currentTarget instanceof FeatureNode){
-		    target = (FeatureNode) currentTarget;
+		else if(currentTarget instanceof TermNode){
+		    target = (TermNode) currentTarget;
 		}
 		int position = 0;
 
 		if (target != null) {
 			int location = getCurrentLocation();
-			FeatureNode parent = target.getParent();
+			TermNode<Feature> parent = target.getParent();
 			if(parent!=null){
 			    if (location == LOCATION_BEFORE) {
 			        position = Math.max(0, parent.getIndex(target));
@@ -125,8 +125,8 @@ public class FeatureTreeDropAdapter extends ViewerDropAdapter {
                     continue;
                 }
 		    }
-		    if(droppedObject instanceof FeatureNode){
-		        FeatureNode droppedNode = (FeatureNode) droppedObject;
+		    if(droppedObject instanceof TermNode){
+		    	TermNode<Feature> droppedNode = (TermNode<Feature>) droppedObject;
 		        int currentPosition = target.getIndex(droppedNode);
 		        if(currentPosition<position){
 		            position -= 1;
@@ -185,7 +185,7 @@ public class FeatureTreeDropAdapter extends ViewerDropAdapter {
         isSupported |= TermTransfer.getInstance().isSupportedType(transferData);
         isSupported |= LocalSelectionTransfer.getTransfer().isSupportedType(transferData);
         isSupported &= getViewer().getInput()!=null;
-        if(target instanceof FeatureTree && getCurrentLocation()!=ViewerDropAdapter.LOCATION_ON){
+        if(target instanceof TermTree && getCurrentLocation()!=ViewerDropAdapter.LOCATION_ON){
             isSupported = false;
         }
         return isSupported;
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditor.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditor.java
index a57bdd9b6..88b1bf7c7 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditor.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditor.java
@@ -48,8 +48,9 @@ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
 import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.model.description.Character;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.definedterm.FeatureTreeViewerComparator;
@@ -135,7 +136,7 @@ public class FeatureTreeEditor implements IFeatureTreeEditor, ISelectionChangedL
             }
         });
 
-        List<FeatureTree> trees = CdmStore.getService(IFeatureTreeService.class).list(FeatureTree.class, null, null, null, null);
+        List<TermTree> trees = CdmStore.getService(IFeatureTreeService.class).list(TermTree.class, null, null, null, null);
         viewer.setComparator(new FeatureTreeViewerComparator());
         viewer.setInput(trees);
 
@@ -150,15 +151,15 @@ public class FeatureTreeEditor implements IFeatureTreeEditor, ISelectionChangedL
 
         ISelection clipBoardSelection = LocalSelectionTransfer.getTransfer().getSelection();
         Object firstElement = selection.getFirstElement();
-        FeatureNode parentNode = null;
-        if(firstElement instanceof FeatureNode){
-            parentNode = (FeatureNode) firstElement;
+        TermNode<Feature> parentNode = null;
+        if(firstElement instanceof TermNode){
+            parentNode = (TermNode<Feature>) firstElement;
         }
-        else if(firstElement instanceof FeatureTree){
-            parentNode = ((FeatureTree)firstElement).getRoot();
+        else if(firstElement instanceof TermTree){
+            parentNode = ((TermTree<Feature>)firstElement).getRoot();
         }
         if(parentNode!=null){
-            FeatureNode copiedNode = (FeatureNode) ((IStructuredSelection)clipBoardSelection).getFirstElement();
+        	TermNode<Feature> copiedNode = (TermNode<Feature>) ((IStructuredSelection)clipBoardSelection).getFirstElement();
 
             AddFeatureOperation operation = new AddFeatureOperation(copiedNode.getTerm().getUuid(), parentNode, this, this);
             AbstractUtility.executeOperation(operation, sync);
@@ -248,14 +249,14 @@ public class FeatureTreeEditor implements IFeatureTreeEditor, ISelectionChangedL
         // commit the conversation and start a new transaction immediately
         conversation.commit(true);
 
-        CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(getRootEntities());
+        CdmStore.getService(IFeatureTreeService.class).saveOrUpdate((List)getRootEntities());
 
-        List<FeatureTree> rootEntities = getRootEntities();
-        for (FeatureTree featureTree : rootEntities) {
+        List<TermTree<Feature>> rootEntities = getRootEntities();
+        for (TermTree featureTree : rootEntities) {
             if(featureTree.getTermType().equals(TermType.Character)){
-                FeatureTree<Character> characterTree = featureTree;
+                TermTree<Character> characterTree = featureTree;
                 //save characters because they can be modified in this editor
-                characterTree.getDistinctFeatures().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
+                characterTree.getDistinctTerms().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
             }
         }
 
@@ -267,7 +268,7 @@ public class FeatureTreeEditor implements IFeatureTreeEditor, ISelectionChangedL
     private void initializeTrees() {
         Object[] expandedElements = viewer.getExpandedElements();
         viewer.getTree().removeAll();
-        List<FeatureTree> trees = CdmStore.getService(IFeatureTreeService.class).list(FeatureTree.class, null, null, null, null);
+        List<TermTree> trees = CdmStore.getService(IFeatureTreeService.class).list(TermTree.class, null, null, null, null);
         viewer.setInput(trees);
         viewer.setExpandedElements(expandedElements);
     }
@@ -292,13 +293,13 @@ public class FeatureTreeEditor implements IFeatureTreeEditor, ISelectionChangedL
         });
         Map<Object, List<String>> propertyPathMap =
                 new HashMap<Object, List<String>>();
-        propertyPathMap.put(FeatureNode.class,propertyPaths);
+        propertyPathMap.put(TermNode.class,propertyPaths);
         return propertyPathMap;
     }
 
     @Override
-    public List<FeatureTree> getRootEntities() {
-        return (List<FeatureTree>) viewer.getInput();
+    public List<TermTree<Feature>> getRootEntities() {
+        return (List<TermTree<Feature>>) viewer.getInput();
     }
 
     @Override
@@ -347,9 +348,9 @@ public class FeatureTreeEditor implements IFeatureTreeEditor, ISelectionChangedL
     public boolean postOperation(Object objectAffectedByOperation) {
         initializeTrees();
         viewer.refresh();
-        if(objectAffectedByOperation instanceof FeatureNode){
-            FeatureNode node = (FeatureNode)objectAffectedByOperation;
-            viewer.expandToLevel(node.getFeatureTree(), 1);
+        if(objectAffectedByOperation instanceof TermNode){
+        	TermNode<Feature> node = (TermNode)objectAffectedByOperation;
+            viewer.expandToLevel(node.getGraph(), 1);
         }
         if(objectAffectedByOperation!=null){
             StructuredSelection selection = new StructuredSelection(objectAffectedByOperation);
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditorComposite.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditorComposite.java
index c89e67f89..5b88ecdf5 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditorComposite.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditorComposite.java
@@ -29,8 +29,8 @@ import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Tree;
 
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermType;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
 import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
 import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
@@ -43,11 +43,10 @@ import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
 /**
  * @author pplitzner
  * @since Jun 19, 2017
- *
  */
 public class FeatureTreeEditorComposite <T extends DefinedTermBase> extends Composite{
 
-    private FeatureTree<T> featureTree;
+    private TermTree<T> featureTree;
 
     private Label label_title;
     private Text text_title;
@@ -181,7 +180,7 @@ public class FeatureTreeEditorComposite <T extends DefinedTermBase> extends Comp
             btnOpenFeatureTree.addSelectionListener(new SelectionAdapter(){
                 @Override
                 public void widgetSelected(SelectionEvent e) {
-                    FeatureTree<T> tree = FeatureTreeSelectionDialog.select(getDisplay().getActiveShell(),
+                    TermTree<T> tree = FeatureTreeSelectionDialog.select(getDisplay().getActiveShell(),
                             null, termType);
                     if(tree!=null){
                         setSelectedTree(tree);
@@ -194,7 +193,7 @@ public class FeatureTreeEditorComposite <T extends DefinedTermBase> extends Comp
         }
     }
 
-    public void setSelectedTree(FeatureTree<T> featureTree) {
+    public void setSelectedTree(TermTree<T> featureTree) {
         this.featureTree = featureTree;
 
         viewer.setInput(featureTree);
@@ -209,7 +208,7 @@ public class FeatureTreeEditorComposite <T extends DefinedTermBase> extends Comp
         }
     }
 
-    public FeatureTree<T> getFeatureTree() {
+    public TermTree<T> getFeatureTree() {
         return featureTree;
     }
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/AddChildFeatureHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/AddChildFeatureHandler.java
index 3a36b5e20..ed9a135bf 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/AddChildFeatureHandler.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/AddChildFeatureHandler.java
@@ -24,8 +24,9 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Shell;
 
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.featuretree.AvailableFeaturesWizard;
 import eu.etaxonomy.taxeditor.featuretree.e4.IFeatureTreeEditor;
 import eu.etaxonomy.taxeditor.featuretree.e4.operation.AddFeatureOperation;
@@ -34,8 +35,7 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
 
 /**
  * @author pplitzner
- * @since Jul 12, 2017
- *
+ * @since Jul 12, 2017 
  */
 public class AddChildFeatureHandler {
 
@@ -48,7 +48,7 @@ public class AddChildFeatureHandler {
         if (StoreUtil.promptCheckIsDirty(editor)) {
             return;
         }
-        FeatureNode parent = (FeatureNode)selection.getFirstElement();
+        TermNode<Feature> parent = (TermNode<Feature>)selection.getFirstElement();
 
 //        TermChooseWizard wizard = new TermChooseWizard(parent.getTermType());
 //        WizardDialog dialog = new WizardDialog(shell, wizard);
@@ -82,7 +82,7 @@ public class AddChildFeatureHandler {
         canExecute = thisPart.getObject() instanceof IFeatureTreeEditor
                 && selection!=null
                 && selection.size()==1
-                && selection.getFirstElement() instanceof FeatureNode;
+                && selection.getFirstElement() instanceof TermNode;
         menuItem.setVisible(canExecute);
         return canExecute;
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/AddFeatureHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/AddFeatureHandler.java
index 0a7a1b54a..04dc31881 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/AddFeatureHandler.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/AddFeatureHandler.java
@@ -24,8 +24,9 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Shell;
 
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.featuretree.AvailableFeaturesWizard;
 import eu.etaxonomy.taxeditor.featuretree.e4.IFeatureTreeEditor;
 import eu.etaxonomy.taxeditor.featuretree.e4.operation.AddFeatureOperation;
@@ -47,7 +48,7 @@ public class AddFeatureHandler {
         if (StoreUtil.promptCheckIsDirty(editor)) {
             return;
         }
-        FeatureTree tree = (FeatureTree) selection.getFirstElement();
+        TermTree<Feature> tree = (TermTree<Feature>) selection.getFirstElement();
 //
 //        TermChooseWizard wizard = new TermChooseWizard(tree.getTermType());
 //        WizardDialog dialog = new WizardDialog(shell, wizard);
@@ -81,7 +82,7 @@ public class AddFeatureHandler {
         canExecute = thisPart.getObject() instanceof IFeatureTreeEditor
                 && selection!=null
                 && selection.size()==1
-                && selection.getFirstElement() instanceof FeatureTree;
+                && selection.getFirstElement() instanceof TermTree;
         menuItem.setVisible(canExecute);
         return canExecute;
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/CopyFeatureHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/CopyFeatureHandler.java
index 1a607cb3c..dff2c0c8b 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/CopyFeatureHandler.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/CopyFeatureHandler.java
@@ -11,7 +11,7 @@ import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.jface.viewers.IStructuredSelection;
 
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor;
 
 public class CopyFeatureHandler {
@@ -30,7 +30,7 @@ public class CopyFeatureHandler {
         canExecute =part.getObject() instanceof FeatureTreeEditor
                 && selection!=null
                 && selection.size()==1
-                && selection.getFirstElement() instanceof FeatureNode;
+                && selection.getFirstElement() instanceof TermNode;
         menuItem.setVisible(canExecute);
         return canExecute;
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/CreateFeatureTreeHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/CreateFeatureTreeHandler.java
index 4e8349a64..12930b929 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/CreateFeatureTreeHandler.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/CreateFeatureTreeHandler.java
@@ -17,7 +17,8 @@ import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
 import org.eclipse.e4.ui.services.IServiceConstants;
 
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.taxeditor.featuretree.e4.IFeatureTreeEditor;
 import eu.etaxonomy.taxeditor.featuretree.e4.operation.CreateFeatureTreeOperation;
@@ -39,7 +40,7 @@ public class CreateFeatureTreeHandler {
             return;
         }
 
-        FeatureTree tree = FeatureTree.NewInstance(getTermType());
+        TermTree<Feature> tree = TermTree.NewInstance(getTermType());
         tree.setTitleCache("New feature tree", true);
         CreateFeatureTreeOperation operation = new CreateFeatureTreeOperation(tree, editor, editor);
         AbstractUtility.executeOperation(operation, sync);
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/FeatureTreeExportOntologyHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/FeatureTreeExportOntologyHandler.java
index 234158cfe..8a9f108ea 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/FeatureTreeExportOntologyHandler.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/FeatureTreeExportOntologyHandler.java
@@ -28,7 +28,7 @@ import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.progress.IProgressConstants;
 
 import eu.etaxonomy.cdm.io.descriptive.owl.out.StructureTreeOwlExportConfigurator;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.featuretree.e4.IFeatureTreeEditor;
 import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
@@ -53,7 +53,7 @@ public class FeatureTreeExportOntologyHandler {
         }
 
         List<UUID> featureTreeUuids = new ArrayList<>();
-        selection.toList().stream().filter(o->o instanceof FeatureTree).forEach(tree->featureTreeUuids.add(((FeatureTree)tree).getUuid()));
+        selection.toList().stream().filter(o->o instanceof TermTree).forEach(tree->featureTreeUuids.add(((TermTree)tree).getUuid()));
 
         FileDialog dialog = new FileDialog(shell);
         String[] filterNames = {
@@ -90,7 +90,7 @@ public class FeatureTreeExportOntologyHandler {
         canExecute = PreferencesUtil.getBooleanValue(IPreferenceKeys.SHOW_EXPERIMENTAL_FEATURES)
                 && selection!=null
                 && selection.size()==1
-                && selection.getFirstElement() instanceof FeatureTree;
+                && selection.getFirstElement() instanceof TermTree;
         menuItem.setVisible(canExecute);
         return canExecute;
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/FeatureTreeExportWordHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/FeatureTreeExportWordHandler.java
index 872f64f20..45767758b 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/FeatureTreeExportWordHandler.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/FeatureTreeExportWordHandler.java
@@ -25,7 +25,8 @@ import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.progress.IProgressConstants;
 
 import eu.etaxonomy.cdm.io.descriptive.word.out.WordExportConfigurator;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.featuretree.e4.IFeatureTreeEditor;
 import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
@@ -49,7 +50,7 @@ public class FeatureTreeExportWordHandler {
             return;
         }
 
-        FeatureTree selectedFeatureTree = (FeatureTree) selection.getFirstElement();
+        TermTree<Feature> selectedFeatureTree = (TermTree<Feature>) selection.getFirstElement();
         DirectoryDialog dialog = new DirectoryDialog(shell);
         String directoryString = dialog.open();
         if(directoryString!=null){
@@ -71,7 +72,7 @@ public class FeatureTreeExportWordHandler {
         canExecute = PreferencesUtil.getBooleanValue(IPreferenceKeys.SHOW_EXPERIMENTAL_FEATURES)
                 && selection!=null
                 && selection.size()==1
-                && selection.getFirstElement() instanceof FeatureTree;
+                && selection.getFirstElement() instanceof TermTree;
         menuItem.setVisible(canExecute);
         return canExecute;
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/PasteFeatureHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/PasteFeatureHandler.java
index 0044cf1a9..636a74ebe 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/PasteFeatureHandler.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/PasteFeatureHandler.java
@@ -13,7 +13,7 @@ import org.eclipse.jface.util.LocalSelectionTransfer;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor;
 
 public class PasteFeatureHandler {
@@ -36,7 +36,7 @@ public class PasteFeatureHandler {
                 && selection.size()==1
                 && transferSelection instanceof IStructuredSelection
                 && ((IStructuredSelection)transferSelection).size()==1
-                && ((IStructuredSelection)transferSelection).getFirstElement() instanceof FeatureNode;
+                && ((IStructuredSelection)transferSelection).getFirstElement() instanceof TermNode;
         menuItem.setVisible(canExecute);
         return canExecute;
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/RemoveFeatureHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/RemoveFeatureHandler.java
index 5d5a5c316..dd959da31 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/RemoveFeatureHandler.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/RemoveFeatureHandler.java
@@ -19,7 +19,8 @@ import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.jface.viewers.IStructuredSelection;
 
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.featuretree.e4.IFeatureTreeEditor;
 import eu.etaxonomy.taxeditor.featuretree.e4.operation.RemoveFeatureOperation;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
@@ -45,7 +46,7 @@ public class RemoveFeatureHandler {
         }
 
         for (Object selectedObject : selection.toArray()) {
-            FeatureNode featureNode = (FeatureNode) selectedObject;
+        	TermNode<Feature> featureNode = (TermNode<Feature>) selectedObject;
             RemoveFeatureOperation operation = new RemoveFeatureOperation(featureNode, editor, editor);
             AbstractUtility.executeOperation(operation, sync);
         }
@@ -59,7 +60,7 @@ public class RemoveFeatureHandler {
         boolean canExecute = selection!=null && !selection.isEmpty();
         if(selection!=null){
             for(Object object:selection.toArray()){
-                canExecute &= object instanceof FeatureNode;
+                canExecute &= object instanceof TermNode;
             }
         }
         canExecute &= thisPart.getObject() instanceof IFeatureTreeEditor;
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/RemoveFeatureTreeHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/RemoveFeatureTreeHandler.java
index b99616fa5..6c04da9e2 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/RemoveFeatureTreeHandler.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/RemoveFeatureTreeHandler.java
@@ -19,7 +19,8 @@ import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.jface.viewers.IStructuredSelection;
 
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.featuretree.e4.IFeatureTreeEditor;
 import eu.etaxonomy.taxeditor.featuretree.e4.operation.RemoveFeatureTreeOperation;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
@@ -45,7 +46,7 @@ public class RemoveFeatureTreeHandler {
         }
 
         for (Object selectedObject : selection.toArray()) {
-            FeatureTree featureTree = (FeatureTree) selectedObject;
+        	TermTree<Feature> featureTree = (TermTree<Feature>) selectedObject;
             RemoveFeatureTreeOperation operation = new RemoveFeatureTreeOperation(featureTree, editor, editor);
             AbstractUtility.executeOperation(operation, sync);
         }
@@ -59,7 +60,7 @@ public class RemoveFeatureTreeHandler {
         boolean canExecute = selection!=null && !selection.isEmpty();
         if(canExecute){
             for(Object object:selection.toArray()){
-                canExecute &= object instanceof FeatureTree;
+                canExecute &= object instanceof TermTree;
             }
         }
         canExecute &= thisPart.getObject() instanceof IFeatureTreeEditor;
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/AddFeatureOperation.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/AddFeatureOperation.java
index 3f1b3d407..431277013 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/AddFeatureOperation.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/AddFeatureOperation.java
@@ -18,7 +18,7 @@ import org.eclipse.core.runtime.IStatus;
 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
@@ -32,15 +32,15 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
  */
 public class AddFeatureOperation extends AbstractPostOperation<Feature> {
 
-    private FeatureNode node;
+    private TermNode<Feature> node;
     private int position;
     private UUID featureUuid;
 
-    public AddFeatureOperation(UUID featureUuid, FeatureNode node,
+    public AddFeatureOperation(UUID featureUuid, TermNode<Feature> node,
             IPostOperationEnabled postOperationEnabled, ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
         this(featureUuid, node, 0, postOperationEnabled, cdmEntitySessionEnabled);
     }
-    public AddFeatureOperation(UUID featureUuid, FeatureNode node, int position,
+    public AddFeatureOperation(UUID featureUuid, TermNode<Feature> node, int position,
             IPostOperationEnabled postOperationEnabled, ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
         super("Add Feature", StoreUtil.getUndoContext(), null, postOperationEnabled, cdmEntitySessionEnabled);
         this.node = node;
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/AddOntologyTermOperation.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/AddOntologyTermOperation.java
index 64dd5929f..ec7379246 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/AddOntologyTermOperation.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/AddOntologyTermOperation.java
@@ -18,7 +18,7 @@ import org.eclipse.core.runtime.IStatus;
 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
@@ -32,13 +32,13 @@ import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.OntologyTermWrap
  * @since Apr 30, 2018
  *
  */
-public class AddOntologyTermOperation extends AbstractPostOperation<FeatureNode> {
+public class AddOntologyTermOperation extends AbstractPostOperation<TermNode<Feature>> {
 
-    private FeatureNode target;
+    private TermNode<Feature> target;
     private OntologyTermWrapper wrapper;
     private TermVocabulary vocabulary;
 
-    public AddOntologyTermOperation(OntologyTermWrapper wrapper, FeatureNode target, TermVocabulary vocabulary,
+    public AddOntologyTermOperation(OntologyTermWrapper wrapper, TermNode<Feature> target, TermVocabulary vocabulary,
             IPostOperationEnabled postOperationEnabled, ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
         super("Add ontology term", StoreUtil.getUndoContext(), target, postOperationEnabled, cdmEntitySessionEnabled);
         this.wrapper = wrapper;
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/CreateFeatureTreeOperation.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/CreateFeatureTreeOperation.java
index 5a9d9cf7e..398960246 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/CreateFeatureTreeOperation.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/CreateFeatureTreeOperation.java
@@ -14,7 +14,8 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 
 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
@@ -26,9 +27,9 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
  * @since Apr 30, 2018
  *
  */
-public class CreateFeatureTreeOperation extends AbstractPostOperation<FeatureTree>{
+public class CreateFeatureTreeOperation extends AbstractPostOperation<TermTree<Feature>>{
 
-    public CreateFeatureTreeOperation(FeatureTree element,
+    public CreateFeatureTreeOperation(TermTree<Feature> element,
             IPostOperationEnabled postOperationEnabled, ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
         super("Create Feature Tree", StoreUtil.getUndoContext(), element, postOperationEnabled, cdmEntitySessionEnabled);
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/MoveFeatureOperation.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/MoveFeatureOperation.java
index fc744128d..a7086c453 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/MoveFeatureOperation.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/MoveFeatureOperation.java
@@ -17,7 +17,8 @@ import org.eclipse.swt.dnd.DND;
 
 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
@@ -30,14 +31,14 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
  * @date 21.01.2019
  *
  */
-public class MoveFeatureOperation extends AbstractPostOperation<FeatureNode> {
+public class MoveFeatureOperation extends AbstractPostOperation<TermNode<Feature>> {
 
-    private FeatureNode droppedNode;
-    private FeatureNode target;
+    private TermNode<Feature> droppedNode;
+    private TermNode<Feature> target;
     private int currentOperation;
     private int position;
 
-    public MoveFeatureOperation(FeatureNode droppedNode, FeatureNode target, int position,
+    public MoveFeatureOperation(TermNode<Feature> droppedNode, TermNode<Feature> target, int position,
             int currentOperation,
             IPostOperationEnabled postOperationEnabled, ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
         super(currentOperation == DND.DROP_MOVE ? "Move Feature" : "Copy Feature", StoreUtil.getUndoContext(),
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/RemoveFeatureOperation.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/RemoveFeatureOperation.java
index e465c0119..c6af77f13 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/RemoveFeatureOperation.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/RemoveFeatureOperation.java
@@ -15,8 +15,9 @@ import org.eclipse.core.runtime.IStatus;
 
 import eu.etaxonomy.cdm.api.service.DeleteResult;
 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
-import eu.etaxonomy.cdm.api.service.config.FeatureNodeDeletionConfigurator;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.api.service.config.TermNodeDeletionConfigurator;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
@@ -28,16 +29,16 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
  * @since Apr 30, 2018
  *
  */
-public class RemoveFeatureOperation extends AbstractPostOperation<FeatureNode>{
+public class RemoveFeatureOperation extends AbstractPostOperation<TermNode<Feature>>{
 
-    public RemoveFeatureOperation(FeatureNode element,
+    public RemoveFeatureOperation(TermNode<Feature> element,
             IPostOperationEnabled postOperationEnabled, ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
         super("Remove Feature", StoreUtil.getUndoContext(), element, postOperationEnabled, cdmEntitySessionEnabled);
     }
 
     @Override
     public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-        DeleteResult result = CdmStore.getService(IFeatureNodeService.class).deleteFeatureNode(element.getUuid(), new FeatureNodeDeletionConfigurator());
+        DeleteResult result = CdmStore.getService(IFeatureNodeService.class).deleteFeatureNode(element.getUuid(), new TermNodeDeletionConfigurator());
         return postExecute(null);
     }
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/RemoveFeatureTreeOperation.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/RemoveFeatureTreeOperation.java
index 286d8e577..8b29c8222 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/RemoveFeatureTreeOperation.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/operation/RemoveFeatureTreeOperation.java
@@ -14,7 +14,8 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 
 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
@@ -26,9 +27,9 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
  * @since Apr 30, 2018
  *
  */
-public class RemoveFeatureTreeOperation extends AbstractPostOperation<FeatureTree>{
+public class RemoveFeatureTreeOperation extends AbstractPostOperation<TermTree<Feature>>{
 
-    public RemoveFeatureTreeOperation(FeatureTree element,
+    public RemoveFeatureTreeOperation(TermTree<Feature> element,
             IPostOperationEnabled postOperationEnabled, ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
         super("Remove Feature Tree", StoreUtil.getUndoContext(), element, postOperationEnabled, cdmEntitySessionEnabled);
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/e4/out/owl/OwlTermExportWizardPage.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/e4/out/owl/OwlTermExportWizardPage.java
index f0b982553..19a465a40 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/e4/out/owl/OwlTermExportWizardPage.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/e4/out/owl/OwlTermExportWizardPage.java
@@ -24,7 +24,8 @@ import org.eclipse.swt.widgets.FileDialog;
 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
 import eu.etaxonomy.cdm.api.service.IVocabularyService;
 import eu.etaxonomy.cdm.common.CdmUtils;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -32,7 +33,6 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
 /**
  * @author pplitzner
  * @since May 23, 2019
- *
  */
 public class OwlTermExportWizardPage extends WizardPage {
 
@@ -58,7 +58,7 @@ public class OwlTermExportWizardPage extends WizardPage {
         composite.getSelectVocabularyComposite().getViewer().setInput(areaVocabularies);
         composite.getSelectVocabularyComposite().getViewer().addCheckStateListener(e->updateButtons());
 
-        List<FeatureTree> trees = CdmStore.getService(IFeatureTreeService.class).list(FeatureTree.class, null, null, null, null);
+        List<TermTree<Feature>> trees = (List)CdmStore.getService(IFeatureTreeService.class).list(TermTree.class, null, null, null, null);
         composite.getSelectFeatureTreeComposite().getViewer().setInput(trees);
         composite.getSelectFeatureTreeComposite().getViewer().addCheckStateListener(e->updateButtons());
 
@@ -99,8 +99,8 @@ public class OwlTermExportWizardPage extends WizardPage {
         List<UUID> selectedTrees = new ArrayList<>();
         Object[] checkedElements = composite.getSelectFeatureTreeComposite().getViewer().getCheckedElements();
         for (Object object : checkedElements) {
-            if(object instanceof FeatureTree) {
-                selectedTrees.add(((FeatureTree) object).getUuid());
+            if(object instanceof TermTree) {
+                selectedTrees.add(((TermTree) object).getUuid());
             }
         }
         return selectedTrees;
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/FeatureNodeContainer.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/FeatureNodeContainer.java
index 6a5316169..e050bc2b0 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/FeatureNodeContainer.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/FeatureNodeContainer.java
@@ -16,9 +16,8 @@ import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.term.TermNode;
 
 /**
  * This class is a simple container to allow generation of a datastructure that
@@ -41,7 +40,7 @@ public class FeatureNodeContainer{
 
 
 
-	private FeatureNode<Feature> featureNode;
+	private TermNode<Feature> featureNode;
 	private List<FeatureNodeContainer> children = new ArrayList<FeatureNodeContainer>();
 	private List<DescriptionElementBase> descriptionElements = new ArrayList<DescriptionElementBase>();
 
@@ -64,11 +63,11 @@ public class FeatureNodeContainer{
 	 * @param description
 	 * @return
 	 */
-	protected void findLeaves(FeatureNode<Feature> featureNode) {
+	protected void findLeaves(TermNode<Feature> featureNode) {
 		if(featureNode.isLeaf()){
 			buildLeaf(featureNode);
 		}else{
-			for(FeatureNode<Feature> childNode : featureNode.getChildNodes()){
+			for(TermNode<Feature> childNode : featureNode.getChildNodes()){
 				findLeaves(childNode);
 			}
 		}
@@ -80,7 +79,7 @@ public class FeatureNodeContainer{
 	 * @param description
 	 * @return
 	 */
-	private void buildLeaf(FeatureNode<Feature> featureNode){
+	private void buildLeaf(TermNode<Feature> featureNode){
 		if(featureNode.getTerm() == null){
 			throw new IllegalArgumentException("The given feature node does not have a feature.");
 		}
@@ -140,7 +139,7 @@ public class FeatureNodeContainer{
 	 */
 	private void buildBranch(){
 		if(getParent() == null){
-			FeatureNode<Feature> parentFeatureNode = getFeatureNode().getParent();
+			TermNode<Feature> parentFeatureNode = getFeatureNode().getParent();
 
 			if(parentFeatureNode.isRoot()){
 				containerTree.getRoot().addChild(this);
@@ -277,7 +276,7 @@ public class FeatureNodeContainer{
 	 *
 	 * @param featureNode a {@link eu.etaxonomy.cdm.model.term.FeatureNode} object.
 	 */
-	public void setFeatureNode(FeatureNode<Feature> featureNode) {
+	public void setFeatureNode(TermNode<Feature> featureNode) {
 		this.featureNode = featureNode;
 	}
 
@@ -286,7 +285,7 @@ public class FeatureNodeContainer{
 	 *
 	 * @return a {@link eu.etaxonomy.cdm.model.term.FeatureNode} object.
 	 */
-	public FeatureNode<Feature> getFeatureNode() {
+	public TermNode<Feature> getFeatureNode() {
 		return featureNode;
 	}
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/FeatureNodeContainerTree.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/FeatureNodeContainerTree.java
index 5c4adf19e..35cd77359 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/FeatureNodeContainerTree.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/FeatureNodeContainerTree.java
@@ -20,14 +20,13 @@ import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
 
 /**
  * @author n.hoffmann
  * @created Dec 2, 2010
- * @version 1.0
  */
 public class FeatureNodeContainerTree {
 
@@ -48,13 +47,13 @@ public class FeatureNodeContainerTree {
 		}
 	};
 
-	private Set<FeatureNodeContainer> featureNodeContainers = new HashSet<FeatureNodeContainer>();
+	private Set<FeatureNodeContainer> featureNodeContainers = new HashSet<>();
 
 	private FeatureNodeContainer root;
 	private DescriptionBase description;
-	private FeatureTree featureTree;
+	private TermTree<Feature> featureTree;
 
-	public FeatureNodeContainerTree(DescriptionBase description, FeatureTree featureTree){
+	public FeatureNodeContainerTree(DescriptionBase description, TermTree<Feature> featureTree){
 		this.description = description;
 		this.featureTree = featureTree;
 
@@ -69,13 +68,13 @@ public class FeatureNodeContainerTree {
 	 * or null if there are no elements.
 	 */
 	public void buildTree(){
-		List<FeatureNode> children = featureTree.getRootChildren();
+		List<TermNode<Feature>> children = featureTree.getRootChildren();
 
 //		if(description.getElements().isEmpty()){
 //			return;
 //		}
 
-		for(FeatureNode featureNode : children){
+		for(TermNode<Feature> featureNode : children){
 			root.findLeaves(featureNode);
 		}
 	}
@@ -138,7 +137,7 @@ public class FeatureNodeContainerTree {
 		return null;
 	}
 
-	public FeatureNodeContainer getFeatureNodeContainer(FeatureNode featureNode){
+	public FeatureNodeContainer getFeatureNodeContainer(TermNode<Feature> featureNode){
 		List<FeatureNodeContainer> leafs = root.getLeafs();
 
 		for(FeatureNodeContainer container : leafs){
@@ -168,7 +167,7 @@ public class FeatureNodeContainerTree {
 		return description;
 	}
 
-	public FeatureTree getFeatureTree() {
+	public TermTree<Feature> getFeatureTree() {
 		return featureTree;
 	}
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/DefaultFeatureTreePreferenecs.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/DefaultFeatureTreePreferenecs.java
index 862fb7ab2..6b9175e65 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/DefaultFeatureTreePreferenecs.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/DefaultFeatureTreePreferenecs.java
@@ -24,7 +24,8 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 
 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
 import eu.etaxonomy.taxeditor.l10n.Messages;
@@ -37,12 +38,11 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  *
  * @author n.hoffmann
  * @created Sep 16, 2010
- * @version 1.0
  */
 public class DefaultFeatureTreePreferenecs extends CdmPreferencePage {
 
-	private FeatureTree defaultFeatureTreeForTextualDescription;
-	private FeatureTree defaultFeatureTreeForStructuredDescription;
+	private TermTree<Feature> defaultFeatureTreeForTextualDescription;
+	private TermTree<Feature> defaultFeatureTreeForStructuredDescription;
 
 	/** {@inheritDoc} */
 	@Override
@@ -79,11 +79,11 @@ public class DefaultFeatureTreePreferenecs extends CdmPreferencePage {
 			    setApply(true);
 				IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
 
-				defaultFeatureTreeForTextualDescription = (FeatureTree) selection.getFirstElement();
+				defaultFeatureTreeForTextualDescription = (TermTree<Feature>)selection.getFirstElement();
 			}
 		});
 
-		List<FeatureTree> input = CdmStore.getService(IFeatureTreeService.class).list(FeatureTree.class, null, null, null, null);
+		List<TermTree<Feature>> input = (List)CdmStore.getService(IFeatureTreeService.class).list(TermTree.class, null, null, null, null);
 
 		viewer.setInput(input);
 
@@ -110,11 +110,11 @@ public class DefaultFeatureTreePreferenecs extends CdmPreferencePage {
 			    setApply(true);
 				IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
 
-				defaultFeatureTreeForStructuredDescription = (FeatureTree) selection.getFirstElement();
+				defaultFeatureTreeForStructuredDescription = (TermTree<Feature>) selection.getFirstElement();
 			}
 		});
 
-		List<FeatureTree> input = CdmStore.getService(IFeatureTreeService.class).list(FeatureTree.class, null, null, null, null);
+		List<TermTree<Feature>> input = (List)CdmStore.getService(IFeatureTreeService.class).list(TermTree.class, null, null, null, null);
 
 		viewer.setInput(input);
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java
index 2e98c3ba4..fc6b8236a 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java
@@ -51,6 +51,7 @@ import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.MarkerType;
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.metadata.CdmPreference;
 import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
 import eu.etaxonomy.cdm.model.metadata.IPreferencePredicate;
@@ -58,10 +59,10 @@ import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
 import eu.etaxonomy.cdm.model.metadata.PreferenceSubject;
 import eu.etaxonomy.cdm.model.metadata.TermDisplayEnum;
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
 import eu.etaxonomy.cdm.model.term.IDefinedTerm;
 import eu.etaxonomy.cdm.model.term.ISimpleTerm;
 import eu.etaxonomy.cdm.model.term.TermBase;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.strategy.match.DefaultMatchStrategy;
 import eu.etaxonomy.cdm.strategy.match.FieldMatcher;
 import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
@@ -961,13 +962,13 @@ public class PreferencesUtil implements IPreferenceKeys {
         return false;
     }
 
-    public static FeatureTree getDefaultFeatureTreeForTextualDescription() {
+    public static TermTree<Feature> getDefaultFeatureTreeForTextualDescription() {
         String uuidString = getStringValue(
                 FEATURE_TREE_DEFAULT_TEXT);
         if (StringUtils.isBlank(uuidString)) {
             return null;
         }
-        FeatureTree tree = CdmStore.getService(
+        TermTree<Feature> tree = CdmStore.getService(
                     IFeatureTreeService.class).load(UUID.fromString(uuidString));
         if (tree.getId() == 0) {
             return null;
@@ -975,10 +976,10 @@ public class PreferencesUtil implements IPreferenceKeys {
         return tree;
     }
 
-    public static FeatureTree getDefaultFeatureTreeForStructuredDescription() {
+    public static TermTree<Feature> getDefaultFeatureTreeForStructuredDescription() {
         String uuidString = getStringValue(
                 FEATURE_TREE_DEFAULT_STRUCTURE);
-        return CdmUtils.isEmpty(uuidString) ? null : CdmStore.getService(
+        return StringUtils.isBlank(uuidString) ? null : CdmStore.getService(
                 IFeatureTreeService.class).load(UUID.fromString(uuidString));
     }
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/NameFeatureMenuPreference.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/NameFeatureMenuPreference.java
index c5be640f2..bb76a052b 100755
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/NameFeatureMenuPreference.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/NameFeatureMenuPreference.java
@@ -35,9 +35,6 @@ public class NameFeatureMenuPreference extends AbstractMenuPreferences<Feature>
                 false);
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.preference.menu.AbstractMenuPreferences#getTermClass()
-     */
     /** {@inheritDoc} */
     @Override
     protected TermType getTermType() {
@@ -46,9 +43,9 @@ public class NameFeatureMenuPreference extends AbstractMenuPreferences<Feature>
     @Override
     protected List<Feature> getTerms(){
         if(CdmStore.isActive() ){
-            List<Feature> termList = new ArrayList(TermEditorInput.getDefaultNameFeatureTree().getDistinctFeatures());
+            List<Feature> termList = new ArrayList(TermEditorInput.getDefaultNameFeatureTree().getDistinctTerms());
             return termList;
         }
-        return new ArrayList<Feature>();
+        return new ArrayList<>();
     }
 }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java
index f69e23e89..398ea677c 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java
@@ -70,8 +70,8 @@ import eu.etaxonomy.cdm.model.common.Group;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.description.PolytomousKey;
 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
@@ -728,10 +728,10 @@ public class CdmStore {
             else if (cdmBase instanceof EntityValidation) {
                 service = (IService<T>) getService(IEntityValidationService.class);
             }
-            else if (cdmBase instanceof FeatureNode) {
+            else if (cdmBase instanceof TermNode) {
                 service = (IService<T>) getService(IFeatureNodeService.class);
             }
-            else if (cdmBase instanceof FeatureTree) {
+            else if (cdmBase instanceof TermTree) {
                 service = (IService<T>) getService(IFeatureTreeService.class);
             }
             else if (cdmBase instanceof GrantedAuthority) {
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/AbstractFilteredCdmResourceSelectionDialog.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/AbstractFilteredCdmResourceSelectionDialog.java
index dec0ff3ef..0373c0cc7 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/AbstractFilteredCdmResourceSelectionDialog.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/AbstractFilteredCdmResourceSelectionDialog.java
@@ -68,12 +68,10 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
 //	private final ConversationHolder conversation = null;
 
 	protected List<UuidAndTitleCache<T>> model;
-	private final Set<T> transientCdmObjects = new HashSet<T>();
+	private final Set<T> transientCdmObjects = new HashSet<>();
 	private final String settings;
 	protected final Integer limitOfInitialElements = null;
 
-	private T selectedObject;
-
 	protected Set<UUID> cdmBaseToBeFiltered;
 
 	protected Job searchJob;
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/FeatureTreeSelectionDialog.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/FeatureTreeSelectionDialog.java
index 6abad824e..82e7e606c 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/FeatureTreeSelectionDialog.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/FeatureTreeSelectionDialog.java
@@ -19,8 +19,9 @@ import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.widgets.Shell;
 
 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermType;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
 import eu.etaxonomy.taxeditor.l10n.Messages;
 import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -30,17 +31,17 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @created Sep 17, 2010
  */
 public class FeatureTreeSelectionDialog extends
-		AbstractFilteredCdmResourceSelectionDialog<FeatureTree> {
+		AbstractFilteredCdmResourceSelectionDialog<TermTree<Feature>> {
 
     private final TermType termType;
 
-    public static FeatureTree select(Shell shell,
-            FeatureTree featureTree) {
+    public static TermTree<Feature> select(Shell shell,
+    		TermTree<Feature> featureTree) {
         return select(shell, featureTree, null);
 
     }
-	public static FeatureTree select(Shell shell,
-	        FeatureTree featureTree, TermType termType) {
+	public static TermTree<Feature> select(Shell shell,
+	        TermTree<Feature> featureTree, TermType termType) {
 		FeatureTreeSelectionDialog dialog = new FeatureTreeSelectionDialog(shell,
 				Messages.FeatureTreeSelectionDialog_CHOOSE_TREE, false, featureTree, termType);
 		return getSelectionFromDialog(dialog);
@@ -48,19 +49,19 @@ public class FeatureTreeSelectionDialog extends
 
 	protected FeatureTreeSelectionDialog(Shell shell,
 			 String title, boolean multi,
-			FeatureTree cdmObject, TermType termType) {
+			 TermTree<Feature> cdmObject, TermType termType) {
 		super(shell, title, multi, FeatureTreeSelectionDialog.class.getCanonicalName(), cdmObject);
 		this.termType = termType;
 	}
 
 	@Override
-	protected FeatureTree getPersistentObject(UUID uuid) {
+	protected TermTree<Feature> getPersistentObject(UUID uuid) {
 		return CdmStore.getService(IFeatureTreeService.class).load(uuid);
 	}
 
 	@Override
 	protected void callService(String pattern) {
-        model = CdmStore.getService(IFeatureTreeService.class).getUuidAndTitleCacheByTermType(FeatureTree.class, termType, limitOfInitialElements, pattern);
+        model = CdmStore.getService(IFeatureTreeService.class).getUuidAndTitleCacheByTermType(TermTree.class, termType, limitOfInitialElements, pattern);
 	}
 
 	@Override
@@ -72,12 +73,12 @@ public class FeatureTreeSelectionDialog extends
                 InputDialog dialog = new InputDialog(getShell(), Messages.FeatureTreeSelectionDialog_TREE_LABEL, Messages.FeatureTreeSelectionDialog_ENTER_LABEL, null, null);
                 if (dialog.open() == Window.OK) {
                     // User clicked OK; update the label with the input
-                    FeatureTree tree = null;
+                	TermTree<Feature> tree = null;
                     if(termType!=null){
-                        tree = FeatureTree.NewInstance(termType);
+                        tree = TermTree.NewInstance(termType);
                     }
                     else{
-                        tree = FeatureTree.NewInstance();
+                        tree = TermTree.NewInstance();
                     }
                     tree.setTitleCache(dialog.getValue(), true);
                     CdmStore.getService(IFeatureTreeService.class).merge(tree,true);
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/SelectionDialogFactory.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/SelectionDialogFactory.java
index 111cfab25..31fe8187e 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/SelectionDialogFactory.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/SelectionDialogFactory.java
@@ -44,7 +44,7 @@ import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
@@ -139,9 +139,9 @@ public class SelectionDialogFactory {
 			return (T) FeatureSelectionDialog.select(shell, //conversation,
 			        (Feature) currentSelection);
 		}
-		if(clazz.equals(FeatureTree.class)){
+		if(clazz.equals(TermTree.class)){
 			return (T) FeatureTreeSelectionDialog.select(shell, //conversation,
-			        (FeatureTree) currentSelection);
+			        (TermTree) currentSelection);
 		}
 		if(clazz.equals(PolytomousKey.class)){
 			return (T) PolytomousKeySelectionDialog.select(shell, //conversation,
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/NaturalLanguageDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/NaturalLanguageDetailElement.java
index fa090b3ab..077b4e9f5 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/NaturalLanguageDetailElement.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/NaturalLanguageDetailElement.java
@@ -20,9 +20,10 @@ import org.eclipse.e4.ui.workbench.modeling.EPartService;
 import org.eclipse.swt.widgets.Display;
 
 import eu.etaxonomy.cdm.api.service.NaturalLanguageGenerator;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.description.TextData;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -83,7 +84,7 @@ public class NaturalLanguageDetailElement extends AbstractCdmDetailElement<Taxon
 
 		private TaxonDescription entity;
 		private NaturalLanguageGenerator generator = new NaturalLanguageGenerator();
-		private FeatureTree featureTree = PreferencesUtil.getDefaultFeatureTreeForStructuredDescription();
+		private TermTree<Feature> featureTree = PreferencesUtil.getDefaultFeatureTreeForStructuredDescription();
 		private Display display = Display.getCurrent();
 
 		public FetchNaturalLanguageDescriptionJob(String jobName, TaxonDescription entity){
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/CharacterDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/CharacterDetailElement.java
index 87e0af057..8664e19d1 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/CharacterDetailElement.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/CharacterDetailElement.java
@@ -12,9 +12,10 @@ import org.eclipse.swt.widgets.Label;
 
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.description.Character;
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.term.DefinedTerm;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
 import eu.etaxonomy.cdm.model.term.Representation;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.taxeditor.editor.definedterm.TermBasePropertyTester;
 import eu.etaxonomy.taxeditor.model.ColorResources;
@@ -109,9 +110,9 @@ public class CharacterDetailElement extends AbstractCdmDetailElement<Character>
         }
     }
 
-	private String getPath(FeatureNode node){
+	private String getPath(TermNode<Feature> node){
 	    String path = node.getTerm().getLabel();
-	    FeatureNode parent = node.getParent();
+	    TermNode<Feature> parent = node.getParent();
 	    while(parent != null && parent.getTerm()!=null){
 	        path = parent.getTerm().getLabel() + "/" + path;
 	        parent = parent.getParent();
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureNodeDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureNodeDetailElement.java
index aea88de0c..28017a7a1 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureNodeDetailElement.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureNodeDetailElement.java
@@ -8,7 +8,8 @@
 */
 package eu.etaxonomy.taxeditor.ui.section.feature;
 
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
@@ -21,7 +22,7 @@ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
  * @since Dec 21, 2017
  *
  */
-public class FeatureNodeDetailElement extends AbstractCdmDetailElement<FeatureNode> {
+public class FeatureNodeDetailElement extends AbstractCdmDetailElement<TermNode<Feature>> {
 
     private InapplicableIfEntityCollectionSection sectionInapplicableIf;
     private OnlyApplicableIfEntityCollectionSection sectionOnlyApplicableIf;
@@ -32,7 +33,7 @@ public class FeatureNodeDetailElement extends AbstractCdmDetailElement<FeatureNo
 	}
 
 	@Override
-	protected void createControls(ICdmFormElement formElement, FeatureNode entity, int style) {
+	protected void createControls(ICdmFormElement formElement, TermNode<Feature> entity, int style) {
 	    sectionInapplicableIf = formFactory.createInapplicableIfEntityCollectionSection(getConversationHolder(),
                     formElement, StoreUtil.getSectionStyle(InapplicableIfEntityCollectionSection.class, getEntity().getClass().getCanonicalName()));
 	    sectionInapplicableIf.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureNodeDetailSection.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureNodeDetailSection.java
index 22c95b7f1..9395a92b9 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureNodeDetailSection.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureNodeDetailSection.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.taxeditor.ui.section.feature;
 import org.eclipse.jface.viewers.ISelectionProvider;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
@@ -23,7 +24,7 @@ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
  * @since Dec 21, 2017
  *
  */
-public class FeatureNodeDetailSection extends AbstractCdmDetailSection<FeatureNode> {
+public class FeatureNodeDetailSection extends AbstractCdmDetailSection<TermNode<Feature>> {
 
 	public FeatureNodeDetailSection(CdmFormFactory formFactory,
 	        ConversationHolder conversation, ICdmFormElement parentElement,
@@ -33,14 +34,14 @@ public class FeatureNodeDetailSection extends AbstractCdmDetailSection<FeatureNo
 
 	@Override
 	public String getHeading() {
-		return FeatureNode.class.getSimpleName();
+		return TermNode.class.getSimpleName();
 	}
 
     /**
      * {@inheritDoc}
      */
     @Override
-    protected AbstractCdmDetailElement<FeatureNode> createCdmDetailElement(AbstractCdmDetailSection<FeatureNode> parentElement,
+    protected AbstractCdmDetailElement<TermNode<Feature>> createCdmDetailElement(AbstractCdmDetailSection<TermNode<Feature>> parentElement,
             int style) {
         return formFactory.createFeatureNodeDetailElement(parentElement, style);
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureTreeDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureTreeDetailElement.java
index 7bfa04b0e..559ce8a5d 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureTreeDetailElement.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureTreeDetailElement.java
@@ -10,7 +10,8 @@ package eu.etaxonomy.taxeditor.ui.section.feature;
 
 import org.eclipse.swt.widgets.Label;
 
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.model.ColorResources;
 import eu.etaxonomy.taxeditor.preference.Resources;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
@@ -23,7 +24,7 @@ import eu.etaxonomy.taxeditor.ui.section.AbstractIdentifiableEntityDetailElement
  * @since Dec 21, 2017
  *
  */
-public class FeatureTreeDetailElement extends AbstractIdentifiableEntityDetailElement<FeatureTree> {
+public class FeatureTreeDetailElement extends AbstractIdentifiableEntityDetailElement<TermTree<Feature>> {
 
 	public FeatureTreeDetailElement(CdmFormFactory formFactory,
 			ICdmFormElement formElement) {
@@ -32,7 +33,7 @@ public class FeatureTreeDetailElement extends AbstractIdentifiableEntityDetailEl
 
 
 	@Override
-	protected void createControls(ICdmFormElement formElement, FeatureTree entity, int style) {
+	protected void createControls(ICdmFormElement formElement, TermTree<Feature> entity, int style) {
 	    Label lblTermType = new Label(formElement.getLayoutComposite(), style);
 	    lblTermType.setText("Term Type");
 	    Label lblStructureText = new Label(formElement.getLayoutComposite(), style);
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureTreeDetailSection.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureTreeDetailSection.java
index c1c735c4d..a86d6d762 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureTreeDetailSection.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureTreeDetailSection.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.taxeditor.ui.section.feature;
 import org.eclipse.jface.viewers.ISelectionProvider;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
@@ -23,7 +24,7 @@ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
  * @since Dec 21, 2017
  *
  */
-public class FeatureTreeDetailSection extends AbstractCdmDetailSection<FeatureTree> {
+public class FeatureTreeDetailSection extends AbstractCdmDetailSection<TermTree<Feature>> {
 
 	public FeatureTreeDetailSection(CdmFormFactory formFactory,
 	        ConversationHolder conversation, ICdmFormElement parentElement,
@@ -33,14 +34,14 @@ public class FeatureTreeDetailSection extends AbstractCdmDetailSection<FeatureTr
 
 	@Override
 	public String getHeading() {
-		return FeatureTree.class.getSimpleName();
+		return TermTree.class.getSimpleName();
 	}
 
     /**
      * {@inheritDoc}
      */
     @Override
-    protected AbstractCdmDetailElement<FeatureTree> createCdmDetailElement(AbstractCdmDetailSection<FeatureTree> parentElement,
+    protected AbstractCdmDetailElement<TermTree<Feature>> createCdmDetailElement(AbstractCdmDetailSection<TermTree<Feature>> parentElement,
             int style) {
         return formFactory.createFeatureTreeDetailElement(parentElement, style);
     }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/InapplicableIfCollectionElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/InapplicableIfCollectionElement.java
index eba0c7d51..6c752c1ff 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/InapplicableIfCollectionElement.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/InapplicableIfCollectionElement.java
@@ -11,9 +11,10 @@ package eu.etaxonomy.taxeditor.ui.section.feature;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Color;
 
-import eu.etaxonomy.cdm.model.term.TermType;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.State;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
@@ -54,7 +55,7 @@ public class InapplicableIfCollectionElement extends AbstractEntityCollectionEle
         if(eventSource==comboState && comboState.getSelection()!=null){
             if(getParentElement() instanceof InapplicableIfEntityCollectionSection){
                 InapplicableIfEntityCollectionSection parentElement = (InapplicableIfEntityCollectionSection) getParentElement();
-                FeatureNode node = parentElement.getEntity();
+                TermNode<Feature> node = parentElement.getEntity();
                 node.removeInapplicableState(entity);
                 State state = comboState.getSelection();
                 node.addInapplicableState(state);
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/InapplicableIfEntityCollectionSection.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/InapplicableIfEntityCollectionSection.java
index bbc344cad..972daa687 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/InapplicableIfEntityCollectionSection.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/InapplicableIfEntityCollectionSection.java
@@ -13,8 +13,9 @@ import java.util.Collection;
 import java.util.Comparator;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.State;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.section.DefaultCdmBaseComparator;
@@ -25,7 +26,7 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AbstractUnboundEntityCol
  * @date 06.03.2018
  *
  */
-public class InapplicableIfEntityCollectionSection extends AbstractUnboundEntityCollectionSection<FeatureNode, State>{
+public class InapplicableIfEntityCollectionSection extends AbstractUnboundEntityCollectionSection<TermNode<Feature>, State>{
 
     public InapplicableIfEntityCollectionSection(CdmFormFactory formFactory, ConversationHolder conversation,
             ICdmFormElement parentElement, int style) {
@@ -36,7 +37,7 @@ public class InapplicableIfEntityCollectionSection extends AbstractUnboundEntity
      * {@inheritDoc}
      */
     @Override
-    protected Collection<State> getEntityCollection(FeatureNode entity) {
+    protected Collection<State> getEntityCollection(TermNode<Feature> entity) {
         return entity.getInapplicableIf();
     }
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/OnlyApplicableIfCollectionElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/OnlyApplicableIfCollectionElement.java
index e5e0c63c4..2da9e090d 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/OnlyApplicableIfCollectionElement.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/OnlyApplicableIfCollectionElement.java
@@ -11,9 +11,10 @@ package eu.etaxonomy.taxeditor.ui.section.feature;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Color;
 
-import eu.etaxonomy.cdm.model.term.TermType;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.State;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
@@ -54,7 +55,7 @@ public class OnlyApplicableIfCollectionElement extends AbstractEntityCollectionE
         if(eventSource==comboState && comboState.getSelection()!=null){
             if(getParentElement() instanceof OnlyApplicableIfEntityCollectionSection){
                 OnlyApplicableIfEntityCollectionSection parentElement = (OnlyApplicableIfEntityCollectionSection) getParentElement();
-                FeatureNode node = parentElement.getEntity();
+                TermNode<Feature> node = parentElement.getEntity();
                 node.removeApplicableState(entity);
                 State state = comboState.getSelection();
                 node.addApplicableState(state);
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/OnlyApplicableIfEntityCollectionSection.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/OnlyApplicableIfEntityCollectionSection.java
index 17c87f49d..4c5544370 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/OnlyApplicableIfEntityCollectionSection.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/OnlyApplicableIfEntityCollectionSection.java
@@ -13,8 +13,9 @@ import java.util.Collection;
 import java.util.Comparator;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.State;
+import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.section.DefaultCdmBaseComparator;
@@ -25,7 +26,7 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AbstractUnboundEntityCol
  * @date 06.03.2018
  *
  */
-public class OnlyApplicableIfEntityCollectionSection extends AbstractUnboundEntityCollectionSection<FeatureNode, State>{
+public class OnlyApplicableIfEntityCollectionSection extends AbstractUnboundEntityCollectionSection<TermNode<Feature>, State>{
 
     public OnlyApplicableIfEntityCollectionSection(CdmFormFactory formFactory, ConversationHolder conversation,
             ICdmFormElement parentElement, int style) {
@@ -36,7 +37,7 @@ public class OnlyApplicableIfEntityCollectionSection extends AbstractUnboundEnti
      * {@inheritDoc}
      */
     @Override
-    protected Collection<State> getEntityCollection(FeatureNode entity) {
+    protected Collection<State> getEntityCollection(TermNode<Feature> entity) {
         return entity.getOnlyApplicableIf();
     }
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/e4/details/DetailsViewerE4.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/e4/details/DetailsViewerE4.java
index 7ec5946cb..bef62d406 100755
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/e4/details/DetailsViewerE4.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/e4/details/DetailsViewerE4.java
@@ -53,8 +53,8 @@ import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
-import eu.etaxonomy.cdm.model.term.FeatureNode;
-import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.TermNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.IDistributionEditor;
@@ -177,9 +177,9 @@ public class DetailsViewerE4 extends AbstractCdmDataViewerE4 {
         if(input instanceof GbifResponse){
             input = ((GbifResponse) input).getDerivedUnitFacade();
         }
-        if(input instanceof FeatureNode
-                && HibernateProxyHelper.isInstanceOf(((FeatureNode) input).getTerm(), Character.class)){
-            input = HibernateProxyHelper.deproxy(((FeatureNode) input).getTerm(), Character.class);
+        if(input instanceof TermNode
+                && HibernateProxyHelper.isInstanceOf(((TermNode) input).getTerm(), Character.class)){
+            input = HibernateProxyHelper.deproxy(((TermNode) input).getTerm(), Character.class);
         }
         if (input !=null && input.getClass().equals(DerivedUnit.class)) {
             DerivedUnit derivedUnit = (DerivedUnit)input;
@@ -358,10 +358,10 @@ public class DetailsViewerE4 extends AbstractCdmDataViewerE4 {
         else if (input instanceof FeatureNodeContainer) {
             createFeatureDistributionSection(rootElement);
 
-        } else if (input instanceof FeatureNode) {
+        } else if (input instanceof TermNode) {
             createFeatureNodeSection(rootElement);
 
-        } else if (input instanceof FeatureTree) {
+        } else if (input instanceof TermTree) {
             createFeatureTreeSection(rootElement);
 
         } else if (input instanceof Character) {
