commit 5b88f807e6e1713face5e3e548dbbef43c1041fa
Author: Andreas Müller <a.mueller@bgbm.org>
Date:   Fri Jan 27 01:02:42 2017 +0100

    ref #6360 replace NonViralName factory methods

diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/ikeyplus/IkeyPlusImport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/ikeyplus/IkeyPlusImport.java
index 7df5a0392a..83dae3c958 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/ikeyplus/IkeyPlusImport.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/ikeyplus/IkeyPlusImport.java
@@ -29,6 +29,7 @@ import eu.etaxonomy.cdm.model.description.PolytomousKey;
 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
 import eu.etaxonomy.cdm.model.name.NonViralName;
 import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import fr.lis.ikeyplus.IO.SDDSaxParser;
 import fr.lis.ikeyplus.model.DataSet;
 import fr.lis.ikeyplus.model.ICharacter;
@@ -172,7 +173,7 @@ public class IkeyPlusImport extends CdmImportBase<IkeyPlusImportConfigurator, Ik
                 pkNode = createPkNode(null, statement);
 
                 //TODO handle rank
-                NonViralName<?> nonViralName = NonViralName.NewInstance(Rank.UNKNOWN_RANK());
+                NonViralName<?> nonViralName = TaxonNameBase.NewNonViralInstance(Rank.UNKNOWN_RANK());
                 nonViralName.setTitleCache(taxon.getName(), true);
                 eu.etaxonomy.cdm.model.taxon.Taxon cdmTaxon = eu.etaxonomy.cdm.model.taxon.Taxon.NewInstance(
                         nonViralName, null); //FIXME !!!!!!
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/in/SDDImport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/in/SDDImport.java
index 4b670d6a30..2bc0a5489d 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/in/SDDImport.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/in/SDDImport.java
@@ -918,7 +918,7 @@ public class SDDImport extends XmlImportBase<SDDImportConfigurator, SDDImportSta
 
 				NonViralName<?> tnb = null;
 				if (!id.equals("")) {
-					tnb = NonViralName.NewInstance(defaultRank);
+					tnb = TaxonNameBase.NewNonViralInstance(defaultRank);
 					IdentifiableSource source = null;
 					if (isNotBlank(uri)) {
 						//TODO type
@@ -1223,7 +1223,7 @@ public class SDDImport extends XmlImportBase<SDDImportConfigurator, SDDImportSta
 	private Taxon handleCDNoScope(Namespace sddNamespace,
 	        SDDImportState cdmState, Element elCodedDescription	) {
 		Taxon taxon = null;
-		NonViralName<?> nonViralName = NonViralName.NewInstance(defaultRank);
+		NonViralName<?> nonViralName = TaxonNameBase.NewNonViralInstance(defaultRank);
 		String id = new String("" + taxonNamesCount);
 		IdentifiableSource source = IdentifiableSource.NewDataImportInstance(id, "TaxonName");
 		importRepresentation(elCodedDescription, sddNamespace, nonViralName, id, cdmState);
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenCdmExcelImport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenCdmExcelImport.java
index abef0e4909..bc9b05d0e7 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenCdmExcelImport.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenCdmExcelImport.java
@@ -506,7 +506,7 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
 			if (nc != null){
 				name = nc.getNewTaxonNameInstance(rank);
 			}else{
-				name = NonViralName.NewInstance(rank);
+				name = TaxonNameBase.NewNonViralInstance(rank);
 			}
 			if (StringUtils.isNotBlank(commonDetermination.genus)){
 				name.setGenusOrUninomial(commonDetermination.genus);
@@ -644,7 +644,7 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
 	 * @return
 	 */
 	private NonViralName<?> makeTaxonName(SpecimenCdmExcelImportState state, DeterminationLight determinationLight) {
-		NonViralName<?> name = NonViralName.NewInstance(null);
+		NonViralName<?> name = TaxonNameBase.NewNonViralInstance(null);
 		NomenclaturalCode nc = state.getConfig().getNomenclaturalCode();
 		if (nc != null){
 			name = (NonViralName<?>)nc.getNewTaxonNameInstance(null);
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenSythesysExcelImport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenSythesysExcelImport.java
index 3cea1271e6..cab2b9b089 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenSythesysExcelImport.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenSythesysExcelImport.java
@@ -50,6 +50,7 @@ import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
 import eu.etaxonomy.cdm.model.name.NonViralName;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.occurrence.Collection;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
@@ -450,7 +451,7 @@ public class SpecimenSythesysExcelImport  extends CdmImportBase<SpecimenSynthesy
                     taxonName = parseScientificName(scientificName);
                 }
                 else{
-                    taxonName = NonViralName.NewInstance(null);
+                    taxonName = TaxonNameBase.NewNonViralInstance(null);
                     taxonName.setTitleCache(scientificName, true);
                 }
                 getNameService().save(taxonName);
@@ -520,7 +521,7 @@ public class SpecimenSythesysExcelImport  extends CdmImportBase<SpecimenSynthesy
         }
 
         if(nomenclatureCode == null){
-            taxonName = NonViralName.NewInstance(null);
+            taxonName = TaxonNameBase.NewNonViralInstance(null);
             taxonName.setTitleCache(scientificName, true);
             return taxonName;
         }
@@ -555,7 +556,7 @@ public class SpecimenSythesysExcelImport  extends CdmImportBase<SpecimenSynthesy
         //      }
         //TODO: parsing of ViralNames?
         if(problem){
-            taxonName = NonViralName.NewInstance(null);
+            taxonName = TaxonNameBase.NewNonViralInstance(null);
             taxonName.setTitleCache(scientificName, true);
         }
         return taxonName;
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/tcsxml/in/TcsXmlTaxonNameImport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/tcsxml/in/TcsXmlTaxonNameImport.java
index 4ca64fea86..66bed3006c 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/tcsxml/in/TcsXmlTaxonNameImport.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/tcsxml/in/TcsXmlTaxonNameImport.java
@@ -290,7 +290,7 @@ public class TcsXmlTaxonNameImport extends TcsXmlImportBase implements ICdmIO<Tc
 			if (nomCode != null){
 				nameBase = nomCode.getNewTaxonNameInstance(rank);
 			}else{
-				nameBase = NonViralName.NewInstance(rank);
+				nameBase = TaxonNameBase.NewNonViralInstance(rank);
 			}
 			childName = "Simple";
 			obligatory = true;
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/tcsxml/in/TcsXmlTaxonRelationsImport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/tcsxml/in/TcsXmlTaxonRelationsImport.java
index ab1d46b413..afacd66512 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/tcsxml/in/TcsXmlTaxonRelationsImport.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/tcsxml/in/TcsXmlTaxonRelationsImport.java
@@ -36,7 +36,6 @@ import eu.etaxonomy.cdm.model.common.OriginalSourceType;
 import eu.etaxonomy.cdm.model.common.RelationshipTermBase;
 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
-import eu.etaxonomy.cdm.model.name.NonViralName;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Classification;
@@ -214,7 +213,7 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
 
 
 			} else{
-				basionymName = NonViralName.NewInstance(name.getRank());
+				basionymName = TaxonNameBase.NewNonViralInstance(name.getRank());
 				childName = "RelatedName";
 				obligatory = true;
 				Element elName = XmlHelp.getSingleChildElement(success, elBasionym, childName, tcsNamespace, obligatory);
@@ -544,7 +543,7 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
 				}else{
 					String title = elToTaxonConcept.getTextNormalize();
 					//TODO synonym?
-					TaxonNameBase<?,?> taxonName = NonViralName.NewInstance(null);
+					TaxonNameBase<?,?> taxonName = TaxonNameBase.NewNonViralInstance(null);
 					taxonName.setTitleCache(title, true);
 					logger.warn("Free text related taxon seems to be bug in TCS");
 					if (isSynonym){
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NonViralName.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NonViralName.java
index 2c4299a0c1..5d16571fd6 100644
--- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NonViralName.java
+++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NonViralName.java
@@ -60,8 +60,7 @@ public class NonViralName<T extends NonViralName>
         extends TaxonNameBase<T, INonViralNameCacheStrategy>
         implements INonViralName{
 
-    private static final long serialVersionUID = 4441110073881088033L;
-
+    private static final long serialVersionUID = -9083811681449792683L;
 
 // ************************** CONSTRUCTORS *************/
 
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/TaxonNameBase.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/TaxonNameBase.java
index 024239a193..46cd902126 100644
--- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/TaxonNameBase.java
+++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/TaxonNameBase.java
@@ -505,7 +505,7 @@ public abstract class TaxonNameBase<T extends TaxonNameBase<?,?>, S extends INam
      * @see    eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy
      * @see    eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy
      */
-    public static NonViralName NewInstance(Rank rank){
+    public static NonViralName NewNonViralInstance(Rank rank){
         return new NonViralName(rank, null);
     }
 
@@ -527,7 +527,7 @@ public abstract class TaxonNameBase<T extends TaxonNameBase<?,?>, S extends INam
      * @see    eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy
      * @see    eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy
      */
-    public static NonViralName NewInstance(Rank rank, HomotypicalGroup homotypicalGroup){
+    public static NonViralName NewNonViralInstance(Rank rank, HomotypicalGroup homotypicalGroup){
         return new NonViralName(rank, homotypicalGroup);
     }
 
diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/aspectj/NewEntityListenerTest.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/aspectj/NewEntityListenerTest.java
index 5dfd76dddb..7fb477759e 100644
--- a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/aspectj/NewEntityListenerTest.java
+++ b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/aspectj/NewEntityListenerTest.java
@@ -17,6 +17,7 @@ import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.name.NonViralName;
 import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 
 /**
  * @author cmathew
@@ -37,7 +38,7 @@ public class NewEntityListenerTest implements NewEntityListener {
     public void testPropertyChange() {
         CdmBase.setNewEntityListener(this);
 
-        NonViralName<?> b = NonViralName.NewInstance(Rank.SPECIES());
+        NonViralName<?> b = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
         Annotation newAnnotation = Annotation.NewDefaultLanguageInstance("test");
         b.addAnnotation(newAnnotation);
         Assert.assertEquals(newAnnotation, lastPropValue);
diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/aspectj/PropertyChangeTest.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/aspectj/PropertyChangeTest.java
index c5eceab164..0228f5999c 100644
--- a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/aspectj/PropertyChangeTest.java
+++ b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/aspectj/PropertyChangeTest.java
@@ -1,15 +1,15 @@
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy 
+* European Distributed Institute of Taxonomy
 * http://www.e-taxonomy.eu
-* 
+*
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 package eu.etaxonomy.cdm.aspectj;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
@@ -22,21 +22,23 @@ import org.junit.Test;
 import eu.etaxonomy.cdm.model.name.BotanicalName;
 import eu.etaxonomy.cdm.model.name.NonViralName;
 import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 
 	public class PropertyChangeTest implements PropertyChangeListener {
 		static Logger logger = Logger.getLogger(PropertyChangeTest.class);
 		private Object lastPropValue;
 
-		public void propertyChange(PropertyChangeEvent e){
-		logger.debug("Property [" + e.getPropertyName() 
-				+ "] changed from " + e.getOldValue() 
+		@Override
+        public void propertyChange(PropertyChangeEvent e){
+		logger.debug("Property [" + e.getPropertyName()
+				+ "] changed from " + e.getOldValue()
 				+ " to " + e.getNewValue());
 		lastPropValue = e.getNewValue() == null ? null : e.getNewValue();
 		}
 
 		@Test
 		public void testPropertyChange() {
-			NonViralName b = NonViralName.NewInstance(Rank.SPECIES());
+			NonViralName<?> b = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
 			b.addPropertyChangeListener(this);
 			b.setGenusOrUninomial("Abies");
 				assertEquals(b.getGenusOrUninomial(), lastPropValue);
@@ -57,7 +59,7 @@ import eu.etaxonomy.cdm.model.name.Rank;
 			b.setAnamorphic(true);
 			assertEquals(b.isAnamorphic(), lastPropValue);
 		}
-		
+
 		@Before
 		public void updateDebugLevel(){
 			logger.setLevel(Level.INFO);
diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/common/IdentifiableEntityTest.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/common/IdentifiableEntityTest.java
index 074eeb1497..dd3dfb121f 100644
--- a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/common/IdentifiableEntityTest.java
+++ b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/common/IdentifiableEntityTest.java
@@ -1,8 +1,8 @@
 /**
 * Copyright (C) 2009 EDIT
-* European Distributed Institute of Taxonomy 
+* European Distributed Institute of Taxonomy
 * http://www.e-taxonomy.eu
-* 
+*
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
@@ -25,6 +25,7 @@ import eu.etaxonomy.cdm.model.name.BotanicalName;
 import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
 import eu.etaxonomy.cdm.model.name.NonViralName;
 import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
@@ -35,7 +36,7 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
  * @version 1.0
  */
 public class IdentifiableEntityTest {
-	
+
 	private NonViralName<?> abies;
 	private NonViralName<?> abiesMill;
 	private NonViralName<?> abiesAlba;
@@ -43,25 +44,25 @@ public class IdentifiableEntityTest {
 	private NonViralName<?> abiesAlbaMill;
 	private NonViralName<?> abiesAlbaxPinusBeta;
 	private NonViralName<?> pinusBeta;
-	
+
 	private Taxon abiesTaxon;
 	private Taxon abiesMillTaxon;
-	
+
 	private NonViralName<?> abiesAutonym;
 	private Taxon abiesAutonymTaxon;
-	
+
 	private NonViralName<?> abiesBalsamea;
 	private Taxon abiesBalsameaTaxon;
 	private Taxon abiesAlbaxPinusBetaTaxon;
 	/**
 	 * @throws java.lang.Exception
 	 */
-	
+
 	@BeforeClass
 	public static void setUpBeforeClass() {
 		DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();
 		vocabularyStore.initialize();
-		
+
 	}
 	/**
 	 * @throws java.lang.Exception
@@ -76,54 +77,54 @@ public class IdentifiableEntityTest {
 	@Before
 	public void setUp() throws Exception {
 
-		abies = NonViralName.NewInstance(Rank.GENUS(), null);
+		abies = TaxonNameBase.NewNonViralInstance(Rank.GENUS(), null);
 		abies.setNameCache("Abies");
 		abies.setTitleCache("Abies", true);
 		Reference sec = ReferenceFactory.newArticle();
 		sec.setTitle("Abies alba Ref");
-		
+
 		abiesTaxon = Taxon.NewInstance(abies, sec);
-		
-		abiesMill = NonViralName.NewInstance(Rank.GENUS(), null);
+
+		abiesMill = TaxonNameBase.NewNonViralInstance(Rank.GENUS(), null);
 		abiesMill.setNameCache("Abies");
 		abiesMill.setTitleCache("Abies Mill.", true);
 		abiesMillTaxon = Taxon.NewInstance(abiesMill, sec);
-		
-		abiesAlba = NonViralName.NewInstance(Rank.SPECIES(), null);
+
+		abiesAlba = TaxonNameBase.NewNonViralInstance(Rank.SPECIES(), null);
 		abiesAlba.setNameCache("Abies alba");
 		abiesAlba.setTitleCache("Abies alba", true);
-		
-		abiesAlbaMichx = NonViralName.NewInstance(Rank.SPECIES(), null);
+
+		abiesAlbaMichx = TaxonNameBase.NewNonViralInstance(Rank.SPECIES(), null);
 		abiesAlbaMichx.setNameCache("Abies alba");
 		abiesAlbaMichx.setTitleCache("Abies alba Michx.", true);
-		
-		abiesAlbaMill = NonViralName.NewInstance(Rank.SPECIES(), null);
+
+		abiesAlbaMill = TaxonNameBase.NewNonViralInstance(Rank.SPECIES(), null);
 		abiesAlbaMill.setNameCache("Abies alba");
 		abiesAlbaMill.setTitleCache("Abies alba Mill.", true);
-		
-		abiesAutonym  = NonViralName.NewInstance(Rank.SECTION_BOTANY());
+
+		abiesAutonym  = TaxonNameBase.NewNonViralInstance(Rank.SECTION_BOTANY());
 		abiesAutonym.setGenusOrUninomial("Abies");
 		abiesAutonym.setInfraGenericEpithet("Abies");
-		
+
 		abiesAutonym.setTitleCache("Abies Mill. sect. Abies", true);
 		abiesAutonym.getNameCache();
 		abiesAutonymTaxon = Taxon.NewInstance(abiesAutonym, sec);
-		
-		abiesBalsamea  = NonViralName.NewInstance(Rank.SECTION_BOTANY());
+
+		abiesBalsamea  = TaxonNameBase.NewNonViralInstance(Rank.SECTION_BOTANY());
 		abiesBalsamea.setGenusOrUninomial("Abies");
 		abiesBalsamea.setInfraGenericEpithet("Balsamea");
 		abiesBalsamea.getNameCache();
 		abiesBalsamea.setTitleCache("Abies sect. Balsamea L.", true);
 		abiesBalsameaTaxon = Taxon.NewInstance(abiesBalsamea, sec);
-		
-		abiesAlbaxPinusBeta = NonViralName.NewInstance(Rank.SPECIES());
-		pinusBeta = NonViralName.NewInstance(Rank.SPECIES());
+
+		abiesAlbaxPinusBeta = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
+		pinusBeta = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
 		pinusBeta.setGenusOrUninomial("Pinus");
 		pinusBeta.setSpecificEpithet("beta");
 		abiesAlbaxPinusBeta.setHybridFormula(true);
 		abiesAlbaxPinusBeta.addHybridParent(abiesAlba, HybridRelationshipType.FIRST_PARENT(), null);
 		abiesAlbaxPinusBeta.addHybridParent(pinusBeta, HybridRelationshipType.SECOND_PARENT(), null);
-		
+
 	}
 
 	/**
@@ -132,34 +133,34 @@ public class IdentifiableEntityTest {
 	@After
 	public void tearDown() throws Exception {
 	}
-	
+
 	/**
 	 * Test method for {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity#compareTo(eu.etaxonomy.cdm.model.common.IdentifiableEntity)}.
 	 */
 	@Test
 	public void testCompareTo() {
 		int result = 0;
-		
+
 		// "Abies" < "Abies Mill."
 		result = abies.compareTo(abiesMill);
 		assertTrue(result < 0);
-		
+
 		abiesTaxon = abies.getTaxa().iterator().next();
-		
+
 		assertTrue(abiesTaxon.compareTo(abiesTaxon) == 0);
-		
+
 		assertTrue(abiesMillTaxon.compareTo(abiesTaxon) > 0);
-		
+
 		assertTrue(abiesTaxon.compareTo(abiesMillTaxon) < 0);
-		
+
 		// "Abies Mill." > "Abies"
 		result = abiesMill.compareTo(abies);
 		assertTrue(result > 0);
-		
+
 		// "Abies" < "Abies alba"
 		result = abies.compareTo(abiesAlba);
 		assertTrue(result < 0);
-		
+
 		// "Abies alba" > "Abies"
 		result = abiesAlba.compareTo(abies);
 		assertTrue(result > 0);
@@ -167,34 +168,34 @@ public class IdentifiableEntityTest {
 		// "Abies Mill." < "Abies alba Michx."
 		result = abiesMill.compareTo(abiesAlbaMichx);
 		assertTrue(result < 0);
-		
+
 		// "Abies alba Michx." > "Abies Mill."
 		result = abiesAlbaMichx.compareTo(abiesMill);
 		assertTrue(result > 0);
-		
+
 		//Autonym should sorted without the authorstring
-		
+
 		result = abiesAutonym.compareTo(abiesBalsamea);
 		assertTrue(result < 0);
-	    // Test consistency of compareTo() with equals(): 
+	    // Test consistency of compareTo() with equals():
 		// Is consistent if and only if for every e1 and e2 of class C
-		// e1.compareTo(e2) == 0 has the same boolean value as e1.equals(e2) 
-		
+		// e1.compareTo(e2) == 0 has the same boolean value as e1.equals(e2)
+
 		boolean compareResult = false;
 		boolean equalsResult = false;
-		
+
 		compareResult = (abies.compareTo(abies) == 0);
 		equalsResult = abies.equals(abies);
 		assertEquals(compareResult, equalsResult);
-		
+
 		compareResult = (abies.compareTo(abiesAlba) == 0);
 		equalsResult = abies.equals(abiesAlba);
 		assertEquals(compareResult, equalsResult);
-		
+
 		compareResult = (abiesMill.compareTo(abies) == 0);
 		equalsResult = abiesMill.equals(abies);
 		assertEquals(compareResult, equalsResult);
-		
+
 		//Abies alba x Pinus beta < Abies alba xinus
 		BotanicalName abiesAlbaXinus = BotanicalName.NewInstance(Rank.SUBSPECIES());
 		abiesAlbaXinus.setGenusOrUninomial("Abies");
@@ -203,7 +204,7 @@ public class IdentifiableEntityTest {
 		result = abiesAlbaxPinusBeta.compareTo(abiesAlbaXinus);
 		assertTrue(result < 0);
 	}
-	
+
 	/**
 	 * Test method for {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity#addCredit(eu.etaxonomy.cdm.model.common.IdentifiableEntity)}.
 	 */
@@ -223,7 +224,7 @@ public class IdentifiableEntityTest {
 		assertEquals("Number of credits should be 3",3,abies.getCredits().size());
 		assertEquals("Credit0 should be last in list", text3, abies.getCredits(2).getText());
 	}
-	
+
 	/**
 	 * Test method for {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity#addCredit(eu.etaxonomy.cdm.model.common.IdentifiableEntity)}.
 	 */
@@ -247,7 +248,7 @@ public class IdentifiableEntityTest {
 		assertNotNull("A list should always be returned",abies.getCredits());
 		assertTrue("No credits should exist",abies.getCredits().isEmpty());
 	}
-	
+
 	@Test
 	public void testClone(){
 		IdentifiableEntity clone = (IdentifiableEntity)abies.clone();
diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/name/NonViralNameTest.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/name/NonViralNameTest.java
index a6dce3c46e..43ac7e65cb 100644
--- a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/name/NonViralNameTest.java
+++ b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/name/NonViralNameTest.java
@@ -98,7 +98,7 @@ public class NonViralNameTest extends EntityTestBase {
 	 */
 	@Test
 	public final void testNonViralNameRank() {
-		NonViralName<?> nonViralName = NonViralName.NewInstance(Rank.GENUS());
+		NonViralName<?> nonViralName = TaxonNameBase.NewNonViralInstance(Rank.GENUS());
 		assertNotNull(nonViralName);
 	}
 
@@ -325,7 +325,7 @@ public class NonViralNameTest extends EntityTestBase {
 		assertEquals(0, botanicalName1.getHybridParentRelations().size());
 		assertEquals(0, botanicalName1.getHybridChildRelations().size());
 		BotanicalName femaleParent = BotanicalName.NewInstance(null);
-		NonViralName<?> maleParent = NonViralName.NewInstance(null);
+		NonViralName<?> maleParent = TaxonNameBase.NewNonViralInstance(null);
 		ZoologicalName child = TaxonNameBase.NewZoologicalInstance(null);
 
 		botanicalName1.addHybridParent(femaleParent, HybridRelationshipType.FEMALE_PARENT(), null);
@@ -365,10 +365,10 @@ public class NonViralNameTest extends EntityTestBase {
 		nonViralName1.setInfraSpecificEpithet("infrabus");
 		nonViralName1.setBinomHybrid(true);
 
-		NonViralName<?> parent = NonViralName.NewInstance(Rank.SPECIES());
-		NonViralName<?> parent2 = NonViralName.NewInstance(Rank.SPECIES());
-		NonViralName<?> child = NonViralName.NewInstance(Rank.SPECIES());
-		NonViralName<?> child2 = NonViralName.NewInstance(Rank.SPECIES());
+		NonViralName<?> parent = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
+		NonViralName<?> parent2 = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
+		NonViralName<?> child = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
+		NonViralName<?> child2 = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
 		nonViralName1.addHybridParent(parent, HybridRelationshipType.FIRST_PARENT(), "parent rule");
 		nonViralName1.addHybridParent(parent2, HybridRelationshipType.SECOND_PARENT(), "parent rule2");
 		nonViralName1.addHybridChild(child, HybridRelationshipType.FEMALE_PARENT(), "child rule");
diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/name/TaxonNameBaseTest.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/name/TaxonNameBaseTest.java
index ce9d9991e4..3f38ec19f5 100644
--- a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/name/TaxonNameBaseTest.java
+++ b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/name/TaxonNameBaseTest.java
@@ -801,13 +801,13 @@ public class TaxonNameBaseTest {
 
 	@Test
 	public void testClone(){
-		NonViralName taxonNameBase1 = NonViralName.NewInstance(Rank.SPECIES());
-		NonViralName<?> genusName = NonViralName.NewInstance(Rank.GENUS());
+		NonViralName taxonNameBase1 = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
+		NonViralName<?> genusName = TaxonNameBase.NewNonViralInstance(Rank.GENUS());
 		Taxon taxonBase = Taxon.NewInstance(taxonNameBase1, null);
 
 		//basionym & homonym
-		NonViralName<?> basionym = NonViralName.NewInstance(Rank.SPECIES());
-		NonViralName<?> earlierHomonym = NonViralName.NewInstance(Rank.SPECIES());
+		NonViralName<?> basionym = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
+		NonViralName<?> earlierHomonym = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
 		taxonNameBase1.addBasionym(basionym);
 		taxonNameBase1.addRelationshipToName(earlierHomonym, NameRelationshipType.LATER_HOMONYM(), "later homonym rule");
 		//status
diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/name/NonViralNameDefaultCacheStrategyTest.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/name/NonViralNameDefaultCacheStrategyTest.java
index 6d455fc2af..dfffd99a29 100644
--- a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/name/NonViralNameDefaultCacheStrategyTest.java
+++ b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/name/NonViralNameDefaultCacheStrategyTest.java
@@ -284,8 +284,8 @@ public class NonViralNameDefaultCacheStrategyTest extends NameCacheStrategyTestB
         Assert.assertEquals(author.getNomenclaturalTitle(), speciesName.getAuthorshipCache());
         Assert.assertEquals("Should be 'Abies alba L.'", "Abies alba L.", speciesName.getTitleCache());
 
-        NonViralName hybridName = NonViralName.NewInstance(Rank.SPECIES());
-        NonViralName secondParent = NonViralName.NewInstance(Rank.SPECIES());
+        NonViralName<?> hybridName = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
+        NonViralName<?> secondParent = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
 
         secondParent.setTitleCache("Second parent Mill.", true);
         hybridName.addHybridParent(speciesName, HybridRelationshipType.FIRST_PARENT(), null);
@@ -518,7 +518,7 @@ public class NonViralNameDefaultCacheStrategyTest extends NameCacheStrategyTestB
     @Test
     public void testGetInfraGenericNames(){
         String author = "Anyauthor";
-        NonViralName nonViralName = NonViralName.NewInstance(Rank.SUBGENUS());
+        NonViralName<?> nonViralName = TaxonNameBase.NewNonViralInstance(Rank.SUBGENUS());
         nonViralName.setGenusOrUninomial("Genus");
         nonViralName.setInfraGenericEpithet("subgenus");
         nonViralName.setAuthorshipCache(author);
diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/generate/IdentificationKeyGeneratorTest.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/generate/IdentificationKeyGeneratorTest.java
index 11a6e57569..9870b16a10 100644
--- a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/generate/IdentificationKeyGeneratorTest.java
+++ b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/generate/IdentificationKeyGeneratorTest.java
@@ -19,23 +19,24 @@ import eu.etaxonomy.cdm.model.description.StateData;
 import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
 import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
-import eu.etaxonomy.cdm.model.name.NonViralName;
+import eu.etaxonomy.cdm.model.name.INonViralName;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 
 /**
  * @author m.venin
  * @created 16.12.2010
- * @version 1.0
  */
 
 public class IdentificationKeyGeneratorTest {
-	private static final Logger logger = Logger.getLogger(IdentificationKeyGeneratorTest.class);
-	
+	@SuppressWarnings("unused")
+    private static final Logger logger = Logger.getLogger(IdentificationKeyGeneratorTest.class);
+
 	private Feature feature1;
 	private Feature feature2;
 	private Feature feature3;
 	private Feature feature4;
-	
+
 	private Taxon taxon1;
 	private Taxon taxon2;
 	private Taxon taxon3;
@@ -44,7 +45,7 @@ public class IdentificationKeyGeneratorTest {
 	private Taxon taxon6;
 	private Taxon taxon7;
 	private Taxon taxon8;
-	
+
 	private TaxonDescription taxond1;
 	private TaxonDescription taxond2;
 	private TaxonDescription taxond3;
@@ -53,28 +54,28 @@ public class IdentificationKeyGeneratorTest {
 	private TaxonDescription taxond6;
 	private TaxonDescription taxond7;
 	private TaxonDescription taxond8;
-	
+
 	private Set<TaxonDescription> taxa;
 	private List<Feature> features;
-	
+
 	private PolytomousKeyGenerator generator;
-	
+
 	@Before
 	public void setUp() throws Exception {
 		feature1 = Feature.NewInstance("","Shape of the head","");
 		feature2 = Feature.NewInstance("","Presence of wings","");
 		feature3 = Feature.NewInstance("","Length of wings","");
 		feature4 = Feature.NewInstance("","Colour","");
-		
-		NonViralName tn1 = NonViralName.NewInstance(null);
-		NonViralName tn2 = NonViralName.NewInstance(null);
-		NonViralName tn3 = NonViralName.NewInstance(null);
-		NonViralName tn4 = NonViralName.NewInstance(null);
-		NonViralName tn5 = NonViralName.NewInstance(null);
-		NonViralName tn6 = NonViralName.NewInstance(null);
-		NonViralName tn7 = NonViralName.NewInstance(null);
-		NonViralName tn8 = NonViralName.NewInstance(null);
-		
+
+		INonViralName tn1 = TaxonNameBase.NewNonViralInstance(null);
+		INonViralName tn2 = TaxonNameBase.NewNonViralInstance(null);
+		INonViralName tn3 = TaxonNameBase.NewNonViralInstance(null);
+		INonViralName tn4 = TaxonNameBase.NewNonViralInstance(null);
+		INonViralName tn5 = TaxonNameBase.NewNonViralInstance(null);
+		INonViralName tn6 = TaxonNameBase.NewNonViralInstance(null);
+		INonViralName tn7 = TaxonNameBase.NewNonViralInstance(null);
+		INonViralName tn8 = TaxonNameBase.NewNonViralInstance(null);
+
 		taxon1 = Taxon.NewInstance(tn1, null);
 		taxon2 = Taxon.NewInstance(tn2, null);
 		taxon3 = Taxon.NewInstance(tn3, null);
@@ -83,7 +84,7 @@ public class IdentificationKeyGeneratorTest {
 		taxon6 = Taxon.NewInstance(tn6, null);
 		taxon7 = Taxon.NewInstance(tn7, null);
 		taxon8 = Taxon.NewInstance(tn8, null);
-		
+
 		taxond1 = TaxonDescription.NewInstance(taxon1);
 		taxond2 = TaxonDescription.NewInstance(taxon2);
 		taxond3 = TaxonDescription.NewInstance(taxon3);
@@ -92,7 +93,7 @@ public class IdentificationKeyGeneratorTest {
 		taxond6 = TaxonDescription.NewInstance(taxon6);
 		taxond7 = TaxonDescription.NewInstance(taxon7);
 		taxond8 = TaxonDescription.NewInstance(taxon8);
-		
+
 		CategoricalData catd11 = CategoricalData.NewInstance();
 		catd11.setFeature(feature1);
 		StateData sd11 = StateData.NewInstance();
@@ -100,51 +101,51 @@ public class IdentificationKeyGeneratorTest {
 		State s12 = State.NewInstance("","Circular","");
 		sd11.setState(s11);
 		catd11.addStateData(sd11);
-		
+
 		CategoricalData catd12 = CategoricalData.NewInstance();
 		catd12.setFeature(feature1);
 		StateData sd12 = StateData.NewInstance();
 		sd12.setState(s11);
 		catd12.addStateData(sd12);
-		
+
 		CategoricalData catd13 = CategoricalData.NewInstance();
 		catd13.setFeature(feature1);
 		StateData sd13 = StateData.NewInstance();
 		sd13.setState(s11);
 		catd13.addStateData(sd13);
-		
+
 		CategoricalData catd14 = CategoricalData.NewInstance();
 		catd14.setFeature(feature1);
 		StateData sd14 = StateData.NewInstance();
 		sd14.setState(s11);
 		catd14.addStateData(sd14);
-		
+
 		CategoricalData catd15 = CategoricalData.NewInstance();
 		catd15.setFeature(feature1);
 		StateData sd15 = StateData.NewInstance();
 		sd15.setState(s12);
 		catd15.addStateData(sd15);
-		
+
 		CategoricalData catd16 = CategoricalData.NewInstance();
 		catd16.setFeature(feature1);
 		StateData sd16 = StateData.NewInstance();
 		sd16.setState(s12);
 		catd16.addStateData(sd16);
-		
+
 		CategoricalData catd17 = CategoricalData.NewInstance();
 		catd17.setFeature(feature1);
 		StateData sd17 = StateData.NewInstance();
 		sd17.setState(s12);
 		catd17.addStateData(sd17);
-		
+
 		CategoricalData catd18 = CategoricalData.NewInstance();
 		catd18.setFeature(feature1);
 		StateData sd18 = StateData.NewInstance();
 		sd18.setState(s12);
 		catd18.addStateData(sd18);
-		
+
 		/*************************/
-		
+
 		CategoricalData catd21 = CategoricalData.NewInstance();
 		catd21.setFeature(feature2);
 		StateData sd21 = StateData.NewInstance();
@@ -152,51 +153,51 @@ public class IdentificationKeyGeneratorTest {
 		State s22 = State.NewInstance("","No","");
 		sd21.setState(s21);
 		catd21.addStateData(sd21);
-		
+
 		CategoricalData catd22 = CategoricalData.NewInstance();
 		catd22.setFeature(feature2);
 		StateData sd22 = StateData.NewInstance();
 		sd22.setState(s21);
 		catd22.addStateData(sd22);
-		
+
 		CategoricalData catd23 = CategoricalData.NewInstance();
 		catd23.setFeature(feature2);
 		StateData sd23 = StateData.NewInstance();
 		sd23.setState(s21);
 		catd23.addStateData(sd23);
-		
+
 		CategoricalData catd24 = CategoricalData.NewInstance();
 		catd24.setFeature(feature2);
 		StateData sd24 = StateData.NewInstance();
 		sd24.setState(s21);
 		catd24.addStateData(sd24);
-		
+
 		CategoricalData catd25 = CategoricalData.NewInstance();
 		catd25.setFeature(feature2);
 		StateData sd25 = StateData.NewInstance();
 		sd25.setState(s21);
 		catd25.addStateData(sd25);
-		
+
 		CategoricalData catd26 = CategoricalData.NewInstance();
 		catd26.setFeature(feature2);
 		StateData sd26 = StateData.NewInstance();
 		sd26.setState(s21);
 		catd26.addStateData(sd26);
-		
+
 		CategoricalData catd27 = CategoricalData.NewInstance();
 		catd27.setFeature(feature2);
 		StateData sd27 = StateData.NewInstance();
 		sd27.setState(s21);
 		catd27.addStateData(sd27);
-		
+
 		CategoricalData catd28 = CategoricalData.NewInstance();
 		catd28.setFeature(feature2);
 		StateData sd28 = StateData.NewInstance();
 		sd28.setState(s22);
 		catd28.addStateData(sd28);
-		
+
 		/*************************/
-		
+
 		QuantitativeData qtd31 = QuantitativeData.NewInstance();
 		StatisticalMeasurementValue smv311 = StatisticalMeasurementValue.NewInstance();
 		smv311.setValue(0);
@@ -208,7 +209,7 @@ public class IdentificationKeyGeneratorTest {
 		smv312.setType(sm312);
 		qtd31.addStatisticalValue(smv311);
 		qtd31.addStatisticalValue(smv312);
-		
+
 		QuantitativeData qtd32 = QuantitativeData.NewInstance();
 		StatisticalMeasurementValue smv321 = StatisticalMeasurementValue.NewInstance();
 		smv321.setValue(0);
@@ -220,7 +221,7 @@ public class IdentificationKeyGeneratorTest {
 		smv322.setType(sm322);
 		qtd32.addStatisticalValue(smv321);
 		qtd32.addStatisticalValue(smv322);
-		
+
 		QuantitativeData qtd33 = QuantitativeData.NewInstance();
 		StatisticalMeasurementValue smv331 = StatisticalMeasurementValue.NewInstance();
 		smv331.setValue(6);
@@ -232,7 +233,7 @@ public class IdentificationKeyGeneratorTest {
 		smv332.setType(sm332);
 		qtd33.addStatisticalValue(smv331);
 		qtd33.addStatisticalValue(smv332);
-		
+
 		QuantitativeData qtd34 = QuantitativeData.NewInstance();
 		StatisticalMeasurementValue smv341 = StatisticalMeasurementValue.NewInstance();
 		smv341.setValue(6);
@@ -244,7 +245,7 @@ public class IdentificationKeyGeneratorTest {
 		smv342.setType(sm342);
 		qtd34.addStatisticalValue(smv341);
 		qtd34.addStatisticalValue(smv342);
-		
+
 		QuantitativeData qtd35 = QuantitativeData.NewInstance();
 		StatisticalMeasurementValue smv351 = StatisticalMeasurementValue.NewInstance();
 		smv351.setValue(0);
@@ -256,7 +257,7 @@ public class IdentificationKeyGeneratorTest {
 		smv352.setType(sm352);
 		qtd35.addStatisticalValue(smv351);
 		qtd35.addStatisticalValue(smv352);
-		
+
 		QuantitativeData qtd36 = QuantitativeData.NewInstance();
 		StatisticalMeasurementValue smv361 = StatisticalMeasurementValue.NewInstance();
 		smv361.setValue(0);
@@ -268,7 +269,7 @@ public class IdentificationKeyGeneratorTest {
 		smv362.setType(sm362);
 		qtd36.addStatisticalValue(smv361);
 		qtd36.addStatisticalValue(smv362);
-		
+
 		QuantitativeData qtd37 = QuantitativeData.NewInstance();
 		StatisticalMeasurementValue smv371 = StatisticalMeasurementValue.NewInstance();
 		smv371.setValue(6);
@@ -280,7 +281,7 @@ public class IdentificationKeyGeneratorTest {
 		smv372.setType(sm372);
 		qtd37.addStatisticalValue(smv371);
 		qtd37.addStatisticalValue(smv372);
-		
+
 //		QuantitativeData qtd38 = QuantitativeData.NewInstance();
 //		StatisticalMeasurementValue smv381 = StatisticalMeasurementValue.NewInstance();
 //		smv381.setValue(6);
@@ -292,9 +293,9 @@ public class IdentificationKeyGeneratorTest {
 //		smv382.setType(sm382);
 //		qtd38.addStatisticalValue(smv381);
 //		qtd38.addStatisticalValue(smv382);
-		
+
 		/*************************/
-		
+
 		CategoricalData catd41 = CategoricalData.NewInstance();
 		catd41.setFeature(feature4);
 		StateData sd41 = StateData.NewInstance();
@@ -302,99 +303,99 @@ public class IdentificationKeyGeneratorTest {
 		State s42 = State.NewInstance("","Yellow","");
 		sd41.setState(s41);
 		catd41.addStateData(sd41);
-		
+
 		CategoricalData catd42 = CategoricalData.NewInstance();
 		catd42.setFeature(feature4);
 		StateData sd42 = StateData.NewInstance();
 		sd42.setState(s42);
 		catd42.addStateData(sd42);
-		
+
 		CategoricalData catd43 = CategoricalData.NewInstance();
 		catd43.setFeature(feature4);
 		StateData sd43 = StateData.NewInstance();
 		sd43.setState(s41);
 		catd43.addStateData(sd43);
-		
+
 		CategoricalData catd44 = CategoricalData.NewInstance();
 		catd44.setFeature(feature4);
 		StateData sd44 = StateData.NewInstance();
 		sd44.setState(s42);
 		catd44.addStateData(sd44);
-		
+
 		CategoricalData catd45 = CategoricalData.NewInstance();
 		catd45.setFeature(feature4);
 		StateData sd45 = StateData.NewInstance();
 		sd45.setState(s41);
 		catd45.addStateData(sd45);
-		
+
 		CategoricalData catd46 = CategoricalData.NewInstance();
 		catd46.setFeature(feature4);
 		StateData sd46 = StateData.NewInstance();
 		sd46.setState(s41);
 		catd46.addStateData(sd46);
-		
+
 		CategoricalData catd47 = CategoricalData.NewInstance();
 		catd47.setFeature(feature4);
 		StateData sd47 = StateData.NewInstance();
 		sd47.setState(s41);
 		catd47.addStateData(sd47);
-		
+
 		CategoricalData catd48 = CategoricalData.NewInstance();
 		catd48.setFeature(feature4);
 		StateData sd48 = StateData.NewInstance();
 		sd48.setState(s41);
 		catd48.addStateData(sd48);
-		
+
 		/*************************/
-		
+
 		taxond1.addElement(catd11);
 		taxond1.addElement(catd21);
 		taxond1.addElement(qtd31);
 		taxond1.addElement(catd41);
-		
+
 		taxond2.addElement(catd12);
 		taxond2.addElement(catd22);
 		taxond2.addElement(qtd32);
 		taxond2.addElement(catd42);
-		
+
 		taxond3.addElement(catd13);
 		taxond3.addElement(catd23);
 		taxond3.addElement(qtd33);
 		taxond3.addElement(catd43);
-		
+
 		taxond4.addElement(catd14);
 		taxond4.addElement(catd24);
 		taxond4.addElement(qtd34);
 		taxond4.addElement(catd44);
-		
+
 		taxond5.addElement(catd15);
 		taxond5.addElement(catd25);
 		taxond5.addElement(qtd35);
 		taxond5.addElement(catd45);
-		
+
 		taxond6.addElement(catd16);
 		taxond6.addElement(catd26);
 		taxond6.addElement(qtd36);
 		taxond6.addElement(catd46);
-		
+
 		taxond7.addElement(catd17);
 		taxond7.addElement(catd27);
 		taxond7.addElement(qtd37);
 		taxond7.addElement(catd47);
-		
+
 		taxond8.addElement(catd18);
 		taxond8.addElement(catd28);
 //		taxond8.addElement(qtd38); // This taxon has no wings
 		taxond8.addElement(catd48);
-		
+
 		/*************************/
-		
+
 		features = new ArrayList<Feature>();
 		features.add(feature1);
 		features.add(feature2);
 		features.add(feature3);
 		features.add(feature4);
-		
+
 		taxa = new HashSet<TaxonDescription>();
 		taxa.add(taxond1);
 		taxa.add(taxond2);
@@ -404,11 +405,11 @@ public class IdentificationKeyGeneratorTest {
 		taxa.add(taxond6);
 		taxa.add(taxond7);
 		taxa.add(taxond8);
-		
+
 	}
-	
+
 //*************************** TESTS *********************** /
-	
+
 
 	@Test
 	public void testInvoke() {
@@ -427,7 +428,7 @@ public class IdentificationKeyGeneratorTest {
 //		generator.invoke();
 //		assertNotNull("Key should exist (merge mode ON).",generator.invoke());;
 	}
-	
+
 	@Test
 	public void testInvokeWithDependencies() {
 //		generator = new IdentificationKeyGenerator();
@@ -437,5 +438,5 @@ public class IdentificationKeyGeneratorTest {
 //		generator.invoke();
 //		assertNotNull("Key should exist (dependencies are present).",generator.invoke());;
 	}
-	
+
 }
diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/cache/CdmCacherTest.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/cache/CdmCacherTest.java
index 358856a1eb..f3daeb2c99 100644
--- a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/cache/CdmCacherTest.java
+++ b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/cache/CdmCacherTest.java
@@ -13,6 +13,7 @@ import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.name.NonViralName;
 import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
@@ -46,7 +47,7 @@ public class CdmCacherTest extends CdmIntegrationTest {
 		// to a taxon name with no name cache to begin with
 		Reference sec = ReferenceFactory.newDatabase();
         referenceService.save(sec);
-		Taxon taxon = Taxon.NewInstance(NonViralName.NewInstance(Rank.SERIES()), sec);
+		Taxon taxon = Taxon.NewInstance(TaxonNameBase.NewNonViralInstance(Rank.SERIES()), sec);
         taxon.setTitleCache("Tax" + "CdmCacher", true);
         taxonService.save(taxon);
         NonViralName<?> nvn = (NonViralName<?>)taxon.getName();
diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/NaturalLanguageGeneratorTest.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/NaturalLanguageGeneratorTest.java
index 9ed606f48a..0f9ecbb536 100644
--- a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/NaturalLanguageGeneratorTest.java
+++ b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/NaturalLanguageGeneratorTest.java
@@ -18,8 +18,8 @@ import org.unitils.spring.annotation.SpringBeanByType;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.description.CategoricalData;
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.description.MeasurementUnit;
 import eu.etaxonomy.cdm.model.description.QuantitativeData;
 import eu.etaxonomy.cdm.model.description.State;
@@ -28,19 +28,20 @@ import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
 import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.description.TextData;
-import eu.etaxonomy.cdm.model.name.NonViralName;
+import eu.etaxonomy.cdm.model.name.INonViralName;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;
 
 @Ignore //FIXME Remove @Ignore once maximes code is completely comitted
 public class NaturalLanguageGeneratorTest extends CdmIntegrationTest {
-	
+
 	@SuppressWarnings("unused")
 	private static final Logger logger = Logger.getLogger(NaturalLanguageGeneratorTest.class);
-	
+
 	@SpringBeanByType
 	private INaturalLanguageGenerator generator;
-	
+
     private FeatureTree featureTree;
     private TaxonDescription description;
     Set<Feature> featureSet  = new HashSet<Feature>();
@@ -48,11 +49,11 @@ public class NaturalLanguageGeneratorTest extends CdmIntegrationTest {
 	@Before
 	public void setUp() throws Exception {
         // set up your test objects here
-		
-		NonViralName tnb = NonViralName.NewInstance(null);
+
+		INonViralName tnb = TaxonNameBase.NewNonViralInstance(null);
 		Taxon taxon = Taxon.NewInstance(tnb, null);
 		description = TaxonDescription.NewInstance(taxon);
-		
+
 		featureTree= FeatureTree.NewInstance();
 		FeatureNode root = FeatureNode.NewInstance();
 		featureTree.setRoot(root);
@@ -81,7 +82,7 @@ public class NaturalLanguageGeneratorTest extends CdmIntegrationTest {
 		FeatureNode qNode = FeatureNode.NewInstance(qFeature);
 		root.addChild(qNode);
 	}
-	
+
 	@Test
 	public void testGenerateNaturalLanguageDescription() {
 		assertNotNull("FeatureTree should exist", featureTree);
@@ -95,7 +96,7 @@ public class NaturalLanguageGeneratorTest extends CdmIntegrationTest {
 		assertTrue("Empty text",!stringBuilder.equals(""));
 		System.out.println(stringBuilder.toString());
 	}
-	
+
 	public void buildBranches(FeatureNode parent, String[][][] children, int level, int depth, int nodeNumber) {
 		int i = nodeNumber;
 		int j;
@@ -108,7 +109,7 @@ public class NaturalLanguageGeneratorTest extends CdmIntegrationTest {
 						buildBranches(child, children,level+1,depth, j);
 					}
 			}
-		
+
 	}
 
     /* (non-Javadoc)
@@ -117,7 +118,7 @@ public class NaturalLanguageGeneratorTest extends CdmIntegrationTest {
     @Override
     public void createTestDataSet() throws FileNotFoundException {
         // TODO Auto-generated method stub
-        
+
     }
-	
+
 }
diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceImplBusinessTest.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceImplBusinessTest.java
index abe8c952f3..dc6fb68d60 100644
--- a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceImplBusinessTest.java
+++ b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceImplBusinessTest.java
@@ -72,16 +72,16 @@ public class TaxonServiceImplBusinessTest extends CdmIntegrationTest {
 		//service = new TaxonServiceImpl();
 		//nameService = new NameServiceImpl();
 
-		t1n = NonViralName.NewInstance(null);
+		t1n = TaxonNameBase.NewNonViralInstance(null);
 		t1 = Taxon.NewInstance(t1n, reference);
 
-		t2n = NonViralName.NewInstance(null);
+		t2n = TaxonNameBase.NewNonViralInstance(null);
 		t2 = Taxon.NewInstance(t2n, reference);
 
-		s1n = NonViralName.NewInstance(null);
+		s1n = TaxonNameBase.NewNonViralInstance(null);
 		s1 = Synonym.NewInstance(s1n, reference);
 
-		s2n = NonViralName.NewInstance(null);
+		s2n = TaxonNameBase.NewNonViralInstance(null);
 		s2 = Synonym.NewInstance(s2n, reference);
 
 		// referencing
@@ -142,9 +142,9 @@ public class TaxonServiceImplBusinessTest extends CdmIntegrationTest {
 	@Test
 	public final void testChangeSynonymWithMultipleSynonymsInHomotypicalGroupToAcceptedTaxon() {
 		t1.addSynonym(s1, heteroTypicSynonymType);
-		TaxonNameBase<?,?> otherHeteroSynonymName = NonViralName.NewInstance(null);
+		TaxonNameBase<?,?> otherHeteroSynonymName = TaxonNameBase.NewNonViralInstance(null);
 		t1.addHeterotypicSynonymName(otherHeteroSynonymName);
-		TaxonNameBase<?,?> homotypicSynonymName = NonViralName.NewInstance(null);
+		TaxonNameBase<?,?> homotypicSynonymName = TaxonNameBase.NewNonViralInstance(null);
 		Synonym homotypicSynonym = Synonym.NewInstance(homotypicSynonymName, t1.getSec());
 		t1.addHomotypicSynonym(homotypicSynonym);
 
@@ -250,16 +250,16 @@ public class TaxonServiceImplBusinessTest extends CdmIntegrationTest {
 		t1.addSynonym(s1, heteroTypicSynonymType);
 
 		//s2 - heterotypic
-		TaxonNameBase otherHeteroSynonymName = NonViralName.NewInstance(null);
+		TaxonNameBase otherHeteroSynonymName = TaxonNameBase.NewNonViralInstance(null);
 		Synonym s2 = Synonym.NewInstance(otherHeteroSynonymName, t1.getSec());
 		t1.addSynonym(s2, heteroTypicSynonymType);
-		TaxonNameBase<?,?> otherHeteroSynonymNameB = NonViralName.NewInstance(null);
+		TaxonNameBase<?,?> otherHeteroSynonymNameB = TaxonNameBase.NewNonViralInstance(null);
 		otherHeteroSynonymName.addBasionym(otherHeteroSynonymNameB);
 		Synonym s2b = Synonym.NewInstance(otherHeteroSynonymNameB, t1.getSec());
 		t1.addSynonym(s2b, heteroTypicSynonymType);
 
 		//homotypic
-		TaxonNameBase<?,?> homotypicSynonymName = NonViralName.NewInstance(null);
+		TaxonNameBase<?,?> homotypicSynonymName = TaxonNameBase.NewNonViralInstance(null);
 		Synonym homotypicSynonym = Synonym.NewInstance(homotypicSynonymName, t1.getSec());
 		t1.addHomotypicSynonym(homotypicSynonym);
 		t1.getName().addBasionym(homotypicSynonymName);
diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceImplTest.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceImplTest.java
index b693b2c552..b08e3d9181 100644
--- a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceImplTest.java
+++ b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceImplTest.java
@@ -288,11 +288,11 @@ public class TaxonServiceImplTest extends CdmTransactionalIntegrationTest {
         Reference reference = ReferenceFactory.newGeneric();
         String referenceDetail = "test";
 
-        NonViralName<?> t1n = NonViralName.NewInstance(null);
+        NonViralName<?> t1n = TaxonNameBase.NewNonViralInstance(null);
         Taxon t1 = Taxon.NewInstance(t1n, reference);
-        NonViralName<?> t2n = NonViralName.NewInstance(null);
+        NonViralName<?> t2n = TaxonNameBase.NewNonViralInstance(null);
         Taxon t2 = Taxon.NewInstance(t2n, reference);
-        NonViralName<?> s1n = NonViralName.NewInstance(null);
+        NonViralName<?> s1n = TaxonNameBase.NewNonViralInstance(null);
         Synonym s1 = Synonym.NewInstance(s1n, reference);
         t1.addSynonym(s1, heteroTypicSynonymType);
         service.saveOrUpdate(t1);
diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestService.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestService.java
index e17bd69791..02eb355a30 100644
--- a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestService.java
+++ b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestService.java
@@ -59,7 +59,7 @@ public class TestService {
 
 	public void testAppController() {
 		logger.info("Create name objects...");
-		NonViralName<?> nvn = NonViralName.NewInstance(Rank.SPECIES());
+		NonViralName<?> nvn = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
 
 		BotanicalName bn = BotanicalName.NewInstance(Rank.SUBSPECIES());
 		ZoologicalName zn = TaxonNameBase.NewZoologicalInstance(Rank.FAMILY());
@@ -224,10 +224,10 @@ public class TestService {
 			appCtr = CdmApplicationController.NewInstance(dbSchemaValidation);
 
 
-			TaxonNameBase<?,?> name = NonViralName.NewInstance(null);
+			TaxonNameBase<?,?> name = TaxonNameBase.NewNonViralInstance(null);
 			name.setTitleCache("Abies alba", true);
 
-			TaxonNameBase<?,?> name2 = NonViralName.NewInstance(null);
+			TaxonNameBase<?,?> name2 = TaxonNameBase.NewNonViralInstance(null);
 			name2.setTitleCache("Abies beta", true);
 
 			//appCtr.getNameService().saveTaxonName(name);
