commit c150ee7fc213c042856b2ac7cc866a6469c909cd
Author: Andreas Müller <a.mueller@bgbm.org>
Date:   Fri Jun 28 10:59:05 2013 +0000

    rename FieldObservation -> FieldUnit  #3351

diff --git a/.gitattributes b/.gitattributes
index 26e7bcd469..c246f144ed 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -861,7 +861,7 @@ cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/DerivationEvent.jav
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/DerivationEventType.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/DerivedUnit.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/DeterminationEvent.java -text
-cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/FieldObservation.java -text
+cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/FieldUnit.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/GatheringEvent.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/PreservationMethod.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/SpecimenOrObservationBase.java -text
@@ -1940,7 +1940,7 @@ cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/conversation/IConversationEna
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacade.java -text
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeCacheStrategy.java -text
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeConfigurator.java -text
-cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldObservationCacheStrategy.java -text
+cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldUnitCacheStrategy.java -text
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeNotSupportedException.java -text
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/MethodNotSupportedByDerivedUnitTypeException.java -text
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/AbstractCategoricalDescriptionBuilder.java -text
@@ -2094,7 +2094,7 @@ cdmlib-services/src/main/resources/wsdl/LSIDDataServiceSOAPBindings.wsdl -text
 cdmlib-services/src/main/resources/wsdl/LSIDPortTypes.wsdl -text
 cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/application/FirstDataInserterTest.java -text
 cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeCacheStrategyTest.java -text
-cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldObservationCacheStrategyTest.java -text
+cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldUnitCacheStrategyTest.java -text
 cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.java -text
 cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/ClassificationServiceImplTest.java -text
 cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/CommonServiceImplTest.java -text
diff --git a/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoService.java b/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoService.java
index 96f68d751a..5b55b14d7f 100644
--- a/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoService.java
+++ b/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoService.java
@@ -30,7 +30,7 @@ import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.location.Point;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
@@ -150,7 +150,7 @@ public class EditGeoService implements IEditGeoService {
             Map<SpecimenOrObservationType, Color> specimenOrObservationTypeColors,
             Boolean doReturnImage, Integer width, Integer height, String bbox, String backLayer) {
 
-        List<Point> fieldObservationPoints = new ArrayList<Point>();
+        List<Point> fieldUnitPoints = new ArrayList<Point>();
         List<Point> derivedUnitPoints = new ArrayList<Point>();
 
         IndividualsAssociation individualsAssociation;
@@ -160,8 +160,8 @@ public class EditGeoService implements IEditGeoService {
             SpecimenOrObservationBase<?> specimenOrObservation = occurrenceDao
                     .load(specimenOrObservationBase.getUuid());
 
-            if (specimenOrObservation instanceof FieldObservation) {
-                fieldObservationPoints.add(((FieldObservation) specimenOrObservation).getGatheringEvent()
+            if (specimenOrObservation instanceof FieldUnit) {
+                fieldUnitPoints.add(((FieldUnit) specimenOrObservation).getGatheringEvent()
                         .getExactLocation());
             }
             if (specimenOrObservation instanceof DerivedUnit) {
@@ -169,7 +169,7 @@ public class EditGeoService implements IEditGeoService {
             }
         }
 
-        return EditGeoServiceUtilities.getOccurrenceServiceRequestParameterString(fieldObservationPoints,
+        return EditGeoServiceUtilities.getOccurrenceServiceRequestParameterString(fieldUnitPoints,
                 derivedUnitPoints, specimenOrObservationTypeColors, doReturnImage, width, height, bbox, backLayer);
 
     }
@@ -183,9 +183,9 @@ public class EditGeoService implements IEditGeoService {
         Set<SpecimenOrObservationBase> originals = derivedUnit.getOriginals();
         if (originals != null) {
             for (SpecimenOrObservationBase original : originals) {
-                if (original instanceof FieldObservation) {
-                    if (((FieldObservation) original).getGatheringEvent() != null) {
-                        Point point = ((FieldObservation) original).getGatheringEvent().getExactLocation();
+                if (original instanceof FieldUnit) {
+                    if (((FieldUnit) original).getGatheringEvent() != null) {
+                        Point point = ((FieldUnit) original).getGatheringEvent().getExactLocation();
                         if (point != null) {
                             // FIXME: remove next statement after
                             // DerivedUnitFacade or ABCD import is fixed
diff --git a/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoServiceUtilities.java b/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoServiceUtilities.java
index 664aceffee..e69be9c9a9 100644
--- a/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoServiceUtilities.java
+++ b/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoServiceUtilities.java
@@ -599,7 +599,7 @@ public class EditGeoServiceUtilities {
     }
 
     /**
-     * @param fieldObservationPoints
+     * @param fieldUnitPoints
      * @param derivedUnitPoints
      * @param specimenOrObservationTypeColors
      * @param doReturnImage TODO
@@ -619,7 +619,7 @@ public class EditGeoServiceUtilities {
      *  &os=1%3Ac%2FFFD700%2F10%2FAporrectodea caliginosa
      */
     public static String getOccurrenceServiceRequestParameterString(
-            	List<Point> fieldObservationPoints,
+            	List<Point> fieldUnitPoints,
             	List<Point> derivedUnitPoints,
             	Map<SpecimenOrObservationType, Color> specimenOrObservationTypeColors,
             	Boolean doReturnImage, Integer width, Integer height, String bbox, String backLayer) {
@@ -639,7 +639,7 @@ public class EditGeoServiceUtilities {
 
             Map<String, String> styleAndData = new HashMap<String, String>();
 
-            addToStyleAndData(fieldObservationPoints, SpecimenOrObservationType.FieldUnit, specimenOrObservationTypeColors, styleAndData);
+            addToStyleAndData(fieldUnitPoints, SpecimenOrObservationType.FieldUnit, specimenOrObservationTypeColors, styleAndData);
             addToStyleAndData(derivedUnitPoints, SpecimenOrObservationType.DerivedUnit, specimenOrObservationTypeColors, styleAndData);
 
             parameters.put("os", StringUtils.join(styleAndData.keySet().iterator(), "||"));
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CacheUpdaterConfigurator.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CacheUpdaterConfigurator.java
index cff7ff2fb7..7c7cb7048a 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CacheUpdaterConfigurator.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CacheUpdaterConfigurator.java
@@ -73,7 +73,7 @@ public class CacheUpdaterConfigurator extends ImportConfiguratorBase<DefaultImpo
 	private boolean doReferenceBase = true;
 	
 	//SpecimenOrObservationBase
-	private boolean doFieldObservation = true;
+	private boolean doFieldUnit = true;
 	private boolean doDeriveUnit = true;
 	private boolean doDnaSample = true;
 	
@@ -126,7 +126,7 @@ public class CacheUpdaterConfigurator extends ImportConfiguratorBase<DefaultImpo
 			doReferenceBase = false;
 			
 			//SpecimenOrObservationBase
-			doFieldObservation = false;
+			doFieldUnit = false;
 			doDeriveUnit = false;
 			doDnaSample = false;
 			
@@ -222,11 +222,11 @@ public class CacheUpdaterConfigurator extends ImportConfiguratorBase<DefaultImpo
 	public boolean isDoReferenceBase() {
 		return doReferenceBase;
 	}
-	public void setDoFieldObservation(boolean doFieldObservation) {
-		this.doFieldObservation = doFieldObservation;
+	public void setDoFieldUnit(boolean doFieldUnit) {
+		this.doFieldUnit = doFieldUnit;
 	}
-	public boolean isDoFieldObservation() {
-		return doFieldObservation;
+	public boolean isDoFieldUnit() {
+		return doFieldUnit;
 	}
 	public void setDoDeriveUnit(boolean doDeriveUnit) {
 		this.doDeriveUnit = doDeriveUnit;
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/jaxb/DataSet.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/jaxb/DataSet.java
index 8f533676a2..aecc7a298d 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/jaxb/DataSet.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/jaxb/DataSet.java
@@ -83,7 +83,7 @@ import eu.etaxonomy.cdm.model.name.ZoologicalName;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
@@ -217,7 +217,7 @@ public class DataSet {
     @XmlElements({
     	@XmlElement(name = "DerivedUnit", namespace = "http://etaxonomy.eu/cdm/model/occurrence/1.0", type = DerivedUnit.class),
     	@XmlElement(name = "DnaSample", namespace = "http://etaxonomy.eu/cdm/model/occurrence/1.0", type = DnaSample.class),
-    	@XmlElement(name = "FieldObservation", namespace = "http://etaxonomy.eu/cdm/model/occurrence/1.0", type = FieldObservation.class)
+    	@XmlElement(name = "FieldUnit", namespace = "http://etaxonomy.eu/cdm/model/occurrence/1.0", type = FieldUnit.class)
     })
     protected List<SpecimenOrObservationBase> occurrences = new ArrayList<SpecimenOrObservationBase>();
     
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/markup/MarkupSpecimenImport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/markup/MarkupSpecimenImport.java
index f71d17fa97..7de555f1f5 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/markup/MarkupSpecimenImport.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/markup/MarkupSpecimenImport.java
@@ -451,7 +451,7 @@ public class MarkupSpecimenImport extends MarkupImportBase  {
 				if (facade.innerDerivedUnit() != null){
 					specimen = facade.innerDerivedUnit();
 				}else{
-					specimen = facade.innerFieldObservation();
+					specimen = facade.innerFieldUnit();
 				}
 				IndividualsAssociation individualsAssociation = IndividualsAssociation.NewInstance();
 				individualsAssociation.setAssociatedSpecimenOrObservation(specimen);
@@ -563,10 +563,10 @@ private void addCurrentAreas(MarkupImportState state, XMLEvent event, DerivedUni
 	public String handleInLineGathering(MarkupImportState state, XMLEventReader reader, XMLEvent parentEvent) throws XMLStreamException {
 		DerivedUnitFacade facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit);
 		handleGathering(state, reader, parentEvent, facade);
-		SpecimenOrObservationBase<?> specimen  = facade.innerFieldObservation();
+		SpecimenOrObservationBase<?> specimen  = facade.innerFieldUnit();
 		if (specimen == null){
 			specimen = facade.innerDerivedUnit();
-			String message = "Inline gaterhing has no field observation";
+			String message = "Inline gaterhing has no field unit";
 			fireWarningEvent(message, parentEvent, 2);
 		}
 		
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/out/SDDDataSet.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/out/SDDDataSet.java
index a637aadf4f..ac1f71b81b 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/out/SDDDataSet.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/out/SDDDataSet.java
@@ -80,7 +80,7 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.name.ViralName;
 import eu.etaxonomy.cdm.model.name.ZoologicalName;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.reference.Reference;
@@ -200,7 +200,7 @@ public class SDDDataSet {
     @XmlElementWrapper(name = "Occurrences")
     @XmlElements({
     	@XmlElement(name = "DnaSample", namespace = "http://etaxonomy.eu/cdm/model/occurrence/1.0", type = DnaSample.class),
-    	@XmlElement(name = "FieldObservation", namespace = "http://etaxonomy.eu/cdm/model/occurrence/1.0", type = FieldObservation.class)
+    	@XmlElement(name = "FieldUnit", namespace = "http://etaxonomy.eu/cdm/model/occurrence/1.0", type = FieldUnit.class)
     })
     protected List<SpecimenOrObservationBase> occurrences;
     
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 140ff2f89a..d23a5c16de 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
@@ -54,7 +54,7 @@ import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.cdm.model.occurrence.Collection;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
@@ -575,7 +575,7 @@ public class SpecimenSythesysExcelImport  extends CdmImportBase<SpecimenSynthesy
             // copy gathering event to facade
             GatheringEvent gatheringEvent = unitsGatheringEvent.getGatheringEvent();
 
-            //join gatheringEvent to fieldObservation
+            //join gatheringEvent to fieldUnit
             derivedUnitFacade.setGatheringEvent(gatheringEvent);
 
             derivedUnitFacade.setLocality(gatheringEvent.getLocality());
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/taxonx/SimpleSpecimen.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/taxonx/SimpleSpecimen.java
index b8a6246ce6..71035cc41d 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/taxonx/SimpleSpecimen.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/taxonx/SimpleSpecimen.java
@@ -19,7 +19,7 @@ import eu.etaxonomy.cdm.model.occurrence.Collection;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
 
 /**
@@ -31,7 +31,7 @@ public class SimpleSpecimen {
 	private static final Logger logger = Logger.getLogger(SimpleSpecimen.class);
 	
 	private GatheringEvent gatheringEvent;
-	private FieldObservation fieldObservation;
+	private FieldUnit fieldUnit;
 	private DerivationEvent derivationEvent;
 	private DerivedUnit specimen;
 	private Collection collection;
@@ -47,12 +47,12 @@ public class SimpleSpecimen {
 		gatheringEvent = GatheringEvent.NewInstance();
 		
 		//observation
-		fieldObservation = FieldObservation.NewInstance();
-		fieldObservation.setGatheringEvent(gatheringEvent);
+		fieldUnit = FieldUnit.NewInstance();
+		fieldUnit.setGatheringEvent(gatheringEvent);
 		
 		//derivationEvent
 		derivationEvent = DerivationEvent.NewInstance(DerivationEventType.ACCESSIONING());
-		derivationEvent.addOriginal(fieldObservation);
+		derivationEvent.addOriginal(fieldUnit);
 		
 		//derivedUnit
 		specimen = DerivedUnit.NewPreservedSpecimenInstance();
diff --git a/cdmlib-io/src/main/resources/schema/cdm/cdm.xsd b/cdmlib-io/src/main/resources/schema/cdm/cdm.xsd
index 1d3a5c9b5b..ca6293f4bd 100644
--- a/cdmlib-io/src/main/resources/schema/cdm/cdm.xsd
+++ b/cdmlib-io/src/main/resources/schema/cdm/cdm.xsd
@@ -139,7 +139,7 @@ http://www.w3.org/2001/XMLSchema
             <xs:choice minOccurs="0" maxOccurs="unbounded">
               <xs:element ref="occurrence:DerivedUnit"/>
               <xs:element ref="occurrence:DnaSample"/>
-              <xs:element ref="occurrence:FieldObservation"/>
+              <xs:element ref="occurrence:FieldUnit"/>
             </xs:choice>
           </xs:sequence>
         </xs:complexType>
diff --git a/cdmlib-io/src/main/resources/schema/cdm/occurrence.xsd b/cdmlib-io/src/main/resources/schema/cdm/occurrence.xsd
index dba458fbf7..4b19d8d1e1 100644
--- a/cdmlib-io/src/main/resources/schema/cdm/occurrence.xsd
+++ b/cdmlib-io/src/main/resources/schema/cdm/occurrence.xsd
@@ -45,7 +45,7 @@ xmlns:reference="http://etaxonomy.eu/cdm/model/reference/1.0">
 
   <xs:element name="DnaSample" type="molecular:DnaSample"/>
 
-  <xs:element name="FieldObservation" type="occurrence:FieldObservation"/>
+  <xs:element name="FieldUnit" type="occurrence:FieldUnit"/>
 
   <xs:element name="GatheringEvent" type="occurrence:GatheringEvent"/>
 
@@ -194,7 +194,7 @@ xmlns:reference="http://etaxonomy.eu/cdm/model/reference/1.0">
     </xs:complexContent>
   </xs:complexType>
 
-  <xs:complexType name="FieldObservation">
+  <xs:complexType name="FieldUnit">
     <xs:complexContent>
       <xs:extension base="occurrence:SpecimenOrObservationBase">
         <xs:sequence>
diff --git a/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/jaxb/SpecimenTest.java b/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/jaxb/SpecimenTest.java
index ddc2ebdc20..26e975fb1b 100644
--- a/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/jaxb/SpecimenTest.java
+++ b/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/jaxb/SpecimenTest.java
@@ -27,7 +27,7 @@ import eu.etaxonomy.cdm.model.occurrence.Collection;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
@@ -59,8 +59,8 @@ public class SpecimenTest {
 			Collection collection = (Collection)dataSet.getCollections().get(0);
 			assertNotNull("Collection must not be null", collection);
 			
-			FieldObservation fieldObservation = (FieldObservation)dataSet.getOccurrences().get(1);
-			assertNotNull("FieldObservation must not be null", fieldObservation);
+			FieldUnit fieldUnit = (FieldUnit)dataSet.getOccurrences().get(1);
+			assertNotNull("FieldUnit must not be null", fieldUnit);
 			assertEquals("Specimen.collection must equal Collection",collection, specimen.getCollection());
 			assertEquals("Collection.institute must equal Institution",institution,collection.getInstitute());
 			
@@ -78,7 +78,7 @@ public class SpecimenTest {
 			DerivationEvent derivationEvent = (DerivationEvent)dataSet.getEventBases().get(1);
 			assertNotNull("DerivationEvent must not be null",derivationEvent);
 			
-			assertEquals("GatheringEvent must be equal to FieldObservation.getGatheringEvent()",gatheringEvent, fieldObservation.getGatheringEvent());
+			assertEquals("GatheringEvent must be equal to FieldUnit.getGatheringEvent()",gatheringEvent, fieldUnit.getGatheringEvent());
 			assertTrue("DerivationEvent.derivatives must contain Specimen",derivationEvent.getDerivatives().contains(specimen));
 			assertEquals("DerivationEvent must equal Specimen.derivedFrom",derivationEvent,specimen.getDerivedFrom());
 	    }
diff --git a/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelImportConfiguratorTest.java b/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelImportConfiguratorTest.java
index 6dc920e9ba..ed174fe0d1 100644
--- a/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelImportConfiguratorTest.java
+++ b/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelImportConfiguratorTest.java
@@ -30,7 +30,7 @@ import eu.etaxonomy.cdm.api.service.IOccurrenceService;
 import eu.etaxonomy.cdm.io.common.CdmApplicationAwareDefaultImport;
 import eu.etaxonomy.cdm.io.common.IImportConfigurator;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
 
@@ -78,7 +78,7 @@ public class ExcelImportConfiguratorTest extends CdmTransactionalIntegrationTest
 		assertEquals("Number of TaxonNames should be 3", 3, nameService.count(null));
 		assertEquals("Number of specimen should be 6", 6, occurrenceService.count(SpecimenOrObservationBase.class));
 		assertEquals("Number of specimen should be 3", 3, occurrenceService.count(DerivedUnit.class));
-		assertEquals("Number of specimen should be 3", 3, occurrenceService.count(FieldObservation.class));
+		assertEquals("Number of specimen should be 3", 3, occurrenceService.count(FieldUnit.class));
 		
 	}
 
diff --git a/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest.java b/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest.java
index b10b1fad3a..52b38b75b6 100644
--- a/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest.java
+++ b/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest.java
@@ -31,7 +31,7 @@ import eu.etaxonomy.cdm.io.common.CdmApplicationAwareDefaultImport;
 import eu.etaxonomy.cdm.io.common.IImportConfigurator;
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
 
 /**
@@ -83,8 +83,8 @@ public class ExcelSpecimenImportExampleTest extends
 		 assertTrue("Return value for import.invoke should be true", result);
 		 assertEquals("Number of specimen should be 3", 3,
 		 occurrenceService.count(DerivedUnit.class));
-		 assertEquals("Number of field observations should be 3", 3,
-		 occurrenceService.count(FieldObservation.class));
+		 assertEquals("Number of field units should be 3", 3,
+		 occurrenceService.count(FieldUnit.class));
 		
 		 printDataSet(System.out, new String[]{"SpecimenOrObservationBase","GatheringEvent","DerivationEvent"});
 	
@@ -98,7 +98,7 @@ public class ExcelSpecimenImportExampleTest extends
 		boolean result = defaultImport.invoke(configurator);
 		assertTrue("Return value for import.invoke should be true", result);
 		assertEquals("Number of specimen should be 3", 3, occurrenceService.count(DerivedUnit.class));
-		assertEquals("Number of field observations should be 3", 3, occurrenceService.count(FieldObservation.class));
+		assertEquals("Number of field units should be 3", 3, occurrenceService.count(FieldUnit.class));
 
 //		try {
 //			String filePath = System.getProperty("java.io.tmpdir")
diff --git a/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/jaxb/SpecimenTest.xml b/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/jaxb/SpecimenTest.xml
index 3b004b0d6c..a118fbcb27 100644
--- a/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/jaxb/SpecimenTest.xml
+++ b/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/jaxb/SpecimenTest.xml
@@ -76,15 +76,15 @@
             <occurrence:StoredUnder>urn-uuid-e7542758-5311-47b2-b4f8-bb770822ae40</occurrence:StoredUnder>
             <occurrence:DerivedFrom>urn-uuid-a18f8610-0323-11de-87af-0800200c9a66</occurrence:DerivedFrom>
         </occurrence:DerivedUnit>
-        <occurrence:FieldObservation id="2" uuid="urn-uuid-4e8ba982-c79b-4f85-8aea-13d742e48187">
-            <common:TitleCache>Field Observation</common:TitleCache>
+        <occurrence:FieldUnit id="2" uuid="urn-uuid-4e8ba982-c79b-4f85-8aea-13d742e48187">
+            <common:TitleCache>Field Unit</common:TitleCache>
             <common:ProtectedTitleCache>false</common:ProtectedTitleCache>
             <occurrence:DerivationEvents>
                 <occurrence:DerivationEvent>urn-uuid-a18f8610-0323-11de-87af-0800200c9a66</occurrence:DerivationEvent> 
             </occurrence:DerivationEvents>
             <occurrence:FieldNumber>5678</occurrence:FieldNumber>
             <occurrence:GatheringEvent>urn-uuid-cb525bcb-3736-4fda-91f1-13dceb64466c</occurrence:GatheringEvent>
-        </occurrence:FieldObservation>
+        </occurrence:FieldUnit>
     </Occurrences>
     <EventBases>
       <occurrence:GatheringEvent id="1" uuid="urn-uuid-cb525bcb-3736-4fda-91f1-13dceb64466c">
diff --git a/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest.testResultSet-result.xml b/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest.testResultSet-result.xml
index d2e2ab32b0..05bc919f95 100644
--- a/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest.testResultSet-result.xml
+++ b/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest.testResultSet-result.xml
@@ -55,11 +55,11 @@
   <REFERENCE PROTECTEDTITLECACHE="true" TITLECACHE="My nice source" REFTYPE="5"  PROTECTEDABBREVTITLECACHE="false" ABBREVTITLECACHE="[null]" ABBREVTITLE="[null]" NOMENCLATURALLYRELEVANT="false"/>
   <REFERENCE PROTECTEDTITLECACHE="true" TITLECACHE="Another source" REFTYPE="5" PROTECTEDABBREVTITLECACHE="false" ABBREVTITLECACHE="[null]" ABBREVTITLE="[null]" NOMENCLATURALLYRELEVANT="false"/>
   <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" RECORDBASIS="1" PROTECTEDTITLECACHE="false" TITLECACHE="Congo, Democratic Republic of, Tshigoma, alt. 1300 m, (WGS84), Savane a Hyparrhenia, 6.3.1959, Leonard A. 3342 (BR); Buisson de 2 m de hauteur. Fleurs roses." 	PUBLISH="true" BARCODE="BR0000005265886"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="FieldObservation" RECORDBASIS="14" PROTECTEDTITLECACHE="false" TITLECACHE="Congo, Democratic Republic of, Tshigoma, alt. 1300 m, (WGS84), Savane a Hyparrhenia, 6.3.1959, Leonard A. 3342; Buisson de 2 m de hauteur. Fleurs roses." PUBLISH="true" FIELDNUMBER="3342" BARCODE="[null]"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="FieldUnit" RECORDBASIS="14" PROTECTEDTITLECACHE="false" TITLECACHE="Congo, Democratic Republic of, Tshigoma, alt. 1300 m, (WGS84), Savane a Hyparrhenia, 6.3.1959, Leonard A. 3342; Buisson de 2 m de hauteur. Fleurs roses." PUBLISH="true" FIELDNUMBER="3342" BARCODE="[null]"/>
   <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" RECORDBASIS="6" PROTECTEDTITLECACHE="false" TITLECACHE="Germany, Berlin, alt. 1400 m, (Gazetteer), rien d&#x0027;ecology, 7.4.1980-6.5.1980, Muller B. &amp; Leonard A. 4587 (M); Une description." 					PUBLISH="true" BARCODE="BR0000007265826"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="FieldObservation" RECORDBASIS="14" PROTECTEDTITLECACHE="false" TITLECACHE="Germany, Berlin, alt. 1400 m, (Gazetteer), rien d&#x0027;ecology, 7.4.1980-6.5.1980, Muller B. &amp; Leonard A. 4587; Une description." 					PUBLISH="true" FIELDNUMBER="4587" BARCODE="[null]"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="FieldUnit" RECORDBASIS="14" PROTECTEDTITLECACHE="false" TITLECACHE="Germany, Berlin, alt. 1400 m, (Gazetteer), rien d&#x0027;ecology, 7.4.1980-6.5.1980, Muller B. &amp; Leonard A. 4587; Une description." 					PUBLISH="true" FIELDNUMBER="4587" BARCODE="[null]"/>
   <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" RECORDBASIS="1" PROTECTEDTITLECACHE="false" TITLECACHE="Any country, A place somewhere out there, alt. 2100 m, (Google Earth), 10.1.1874, Janssen, T. 3342 (BR); Buisson de 2 m de hauteur. Fleurs roses." 				PUBLISH="true" BARCODE="BR0000006265833"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="FieldObservation" RECORDBASIS="14" PROTECTEDTITLECACHE="false" TITLECACHE="Any country, A place somewhere out there, alt. 2100 m, (Google Earth), 10.1.1874, Janssen, T. 3342; Buisson de 2 m de hauteur. Fleurs roses." 			PUBLISH="true" FIELDNUMBER="3342"  BARCODE="[null]"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="FieldUnit" RECORDBASIS="14" PROTECTEDTITLECACHE="false" TITLECACHE="Any country, A place somewhere out there, alt. 2100 m, (Google Earth), 10.1.1874, Janssen, T. 3342; Buisson de 2 m de hauteur. Fleurs roses." 			PUBLISH="true" FIELDNUMBER="3342"  BARCODE="[null]"/>
   <TAXONNAMEBASE DTYPE="BotanicalName" PROTECTEDTITLECACHE="false" TITLECACHE="Vaccinium stanleyi Schweinf." FULLTITLECACHE="Vaccinium stanleyi Schweinf." PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="Schweinf." GENUSORUNINOMIAL="Vaccinium" NAMECACHE="Vaccinium stanleyi" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="stanleyi" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="765" />
   <TAXONNAMEBASE DTYPE="BotanicalName" PROTECTEDTITLECACHE="false" TITLECACHE="Erica mannii var. silvatica (Hook.f.) Beentje" FULLTITLECACHE="Erica mannii var. silvatica (Hook.f.) Beentje" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="(Hook.f.) Beentje" GENUSORUNINOMIAL="Erica" INFRASPECIFICEPITHET="silvatica" NAMECACHE="Erica mannii var. silvatica" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="mannii" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="761"/>
   <TAXONNAMEBASE DTYPE="BotanicalName" PROTECTEDTITLECACHE="false" TITLECACHE="Erica arborea L." FULLTITLECACHE="Erica arborea L." PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="L." GENUSORUNINOMIAL="Erica" NAMECACHE="Erica arborea" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="arborea" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="765"/>
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/package-info.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/package-info.java
index 531d1a12a5..5c509bb8eb 100644
--- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/package-info.java
+++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/package-info.java
@@ -129,7 +129,7 @@
 		@MetaValue(value = "eu.etaxonomy.cdm.model.name.ViralName", targetEntity = ViralName.class),
 		@MetaValue(value = "eu.etaxonomy.cdm.model.name.ZoologicalName", targetEntity = ZoologicalName.class),
 		@MetaValue(value = "eu.etaxonomy.cdm.model.occurrence.Collection", targetEntity = Collection.class),
-		@MetaValue(value = "eu.etaxonomy.cdm.model.occurrence.FieldObservation", targetEntity = FieldObservation.class),
+		@MetaValue(value = "eu.etaxonomy.cdm.model.occurrence.FieldUnit", targetEntity = FieldUnit.class),
 		@MetaValue(value = "eu.etaxonomy.cdm.model.occurrence.DerivedUnit", targetEntity = DerivedUnit.class),
 		@MetaValue(value = "eu.etaxonomy.cdm.model.reference.Reference", targetEntity = Reference.class),
 		@MetaValue(value = "eu.etaxonomy.cdm.model.reference.Journal", targetEntity = Reference.class),
@@ -183,7 +183,7 @@ import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
 import eu.etaxonomy.cdm.model.name.ViralName;
 import eu.etaxonomy.cdm.model.name.ZoologicalName;
 import eu.etaxonomy.cdm.model.occurrence.Collection;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Classification;
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/DerivedUnit.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/DerivedUnit.java
index 7ce19a8fa9..e54ba5c273 100644
--- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/DerivedUnit.java
+++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/DerivedUnit.java
@@ -43,8 +43,8 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
 
 /**
- * A derived unit is regarded as derived from an field observation,
- * so locality and gathering related information is captured as a separate FieldObservation object
+ * A derived unit is regarded as derived from a field unit,
+ * so locality and gathering related information is captured as a separate FieldUnit object
  * related to a specimen via a derivation event
  * 
  * http://www.bgbm.org/biodivinf/docs/CollectionModel/ReprintTNR.pdf
@@ -185,27 +185,27 @@ public class DerivedUnit extends SpecimenOrObservationBase<IIdentifiableEntityCa
 	
 	
 	/**
-	 * create new unit derived from an existing field observation
-	 * @param fieldObservation existing field observation from where this unit is derived
+	 * Create new unit derived from an existing field unit
+	 * @param fieldUnit existing field unit from where this unit is derived
 	 */
-	protected DerivedUnit(SpecimenOrObservationType recordBasis, FieldObservation fieldObservation) {
+	protected DerivedUnit(SpecimenOrObservationType recordBasis, FieldUnit fieldUnit) {
 		super(recordBasis);
 		DerivationEvent derivedFrom = new DerivationEvent();
 		// TODO: should be done in a more controlled way. Probably by making derivation event implement a general relationship interface (for bidirectional add/remove etc)
-		fieldObservation.addDerivationEvent(derivedFrom);
-		derivedFrom.getOriginals().add(fieldObservation);
+		fieldUnit.addDerivationEvent(derivedFrom);
+		derivedFrom.getOriginals().add(fieldUnit);
 		derivedFrom.getDerivatives().add(this);
 		this.setDerivedFrom(derivedFrom);
 	}
 	
 	/**
 	 * create new unit derived from an existing gathering event,
-	 * thereby creating a new empty field observation
+	 * thereby creating a new empty field unit
 	 * @param gatheringEvent the gathering event this unit was collected at
 	 */
 	protected DerivedUnit(SpecimenOrObservationType recordBasis, GatheringEvent gatheringEvent) {
-		this(recordBasis, new FieldObservation());
-		FieldObservation field = (FieldObservation)this.getOriginalUnit();
+		this(recordBasis, new FieldUnit());
+		FieldUnit field = (FieldUnit)this.getOriginalUnit();
 		field.setGatheringEvent(gatheringEvent);
 	}
 
@@ -273,7 +273,7 @@ public class DerivedUnit extends SpecimenOrObservationBase<IIdentifiableEntityCa
 	/**
 	 * Will be removed in future versions as semantics is not clear.
 	 * For accessing the collecting number use
-	 * {@link FieldObservation#getFieldNumber()} instead.
+	 * {@link FieldUnit#getFieldNumber()} instead.
 	 * @return
 	 */
 	@Deprecated
@@ -284,7 +284,7 @@ public class DerivedUnit extends SpecimenOrObservationBase<IIdentifiableEntityCa
 	/**
 	 * Will be removed in future versions as semantics is not clear.
 	 * For editing the collecting number use
-	 * {@link FieldObservation#getFieldNumber()} instead.
+	 * {@link FieldUnit#getFieldNumber()} instead.
 	 * @return
 	 */
 	@Deprecated
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/FieldObservation.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/FieldObservation.java
deleted file mode 100644
index 62036b70c7..0000000000
--- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/FieldObservation.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/**
-* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
-* http://www.e-taxonomy.eu
-*
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
-
-package eu.etaxonomy.cdm.model.occurrence;
-
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.ManyToOne;
-import javax.validation.Valid;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlIDREF;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSchemaType;
-import javax.xml.bind.annotation.XmlType;
-
-import org.apache.log4j.Logger;
-import org.hibernate.annotations.Cascade;
-import org.hibernate.annotations.CascadeType;
-import org.hibernate.envers.Audited;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.IndexedEmbedded;
-import org.hibernate.validator.constraints.Length;
-import org.springframework.beans.factory.annotation.Configurable;
-
-import eu.etaxonomy.cdm.model.agent.Person;
-import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
-import eu.etaxonomy.cdm.strategy.cache.common.IdentifiableEntityDefaultCacheStrategy;
-
-/**
- * In situ observation of a taxon in the field. If a specimen exists,
- * in most cases a parallel field observation object should be instantiated and the specimen then is "derived" from the field unit
- * @author m.doering
- * @version 1.0
- * @created 08-Nov-2007 13:06:40
- */
-@XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "FieldObservation", propOrder = {
-    "fieldNumber",
-    "primaryCollector",
-    "fieldNotes",
-    "gatheringEvent"
-})
-@XmlRootElement(name = "FieldObservation")
-@Entity
-@Indexed(index = "eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase")
-@Audited
-@Configurable
-public class FieldObservation extends SpecimenOrObservationBase<IIdentifiableEntityCacheStrategy<FieldObservation>> implements Cloneable{
-	private static final Logger logger = Logger.getLogger(FieldObservation.class);
-
-	@XmlElement(name = "FieldNumber")
-	@Field
-    //TODO Val #3379
-//	@NullOrNotEmpty
-	@Length(max = 255)
-	private String fieldNumber;
-
-	@XmlElement(name = "PrimaryCollector")
-	@XmlIDREF
-	@XmlSchemaType(name = "IDREF")
-	@ManyToOne(fetch = FetchType.LAZY)
-    @Cascade( { CascadeType.SAVE_UPDATE })
-    @IndexedEmbedded(depth = 2)
-    @Valid
-	private Person primaryCollector;
-
-	@XmlElement(name = "FieldNotes")
-	@Field
-    //TODO Val #3379
-//	@NullOrNotEmpty
-	@Length(max = 255)
-	private String fieldNotes;
-
-	@XmlElement(name = "GatheringEvent")
-	@XmlIDREF
-	@XmlSchemaType(name = "IDREF")
-	@ManyToOne(fetch = FetchType.LAZY)
-    @Cascade( { CascadeType.SAVE_UPDATE })
-    @IndexedEmbedded(depth = 2)
-    @Valid
-	private GatheringEvent gatheringEvent;
-
-// *************** FACTORY METHOD *************************/
-
-	/**
-	 * Factory method.
-	 * @return
-	 */
-	public static FieldObservation NewInstance(){
-		return new FieldObservation();
-	}
-
-//****************************** CONSTRUCTOR **************************************/
-
-	/**
-	 * Constructor
-	 */
-	protected FieldObservation(){
-		super(SpecimenOrObservationType.FieldUnit);
-		this.cacheStrategy = new IdentifiableEntityDefaultCacheStrategy<FieldObservation>();
-	}
-
-// ************************ GETTER / SETTER *******************************************
-
-	public GatheringEvent getGatheringEvent() {
-    	return gatheringEvent;
-	}
-
-	public void setGatheringEvent(GatheringEvent gatheringEvent) {
-		this.gatheringEvent = gatheringEvent;
-		addGatheringEventPropertyChangeListener();
-	}
-
-
-	private void addGatheringEventPropertyChangeListener() {
-		if (gatheringEvent != null){
-			gatheringEvent.addPropertyChangeListener(getNewGatheringEventPropChangeListener());
-		}
-	}
-
-	/**
-	 * The collectors field number. If the collector is a team the field number
-	 * is taken from the field book of the primary collector.
-	 * @see #primaryCollector
-	 * @return
-	 */
-	public String getFieldNumber() {
-		return fieldNumber;
-	}
-
-	public void setFieldNumber(String fieldNumber) {
-		this.fieldNumber = fieldNumber;
-	}
-
-
-	/**
-	 * The primary collector is the person who the field books belongs to.
-	 * So the field number is also taken from him (his field book).
-	 * @see #fieldNumber
-	 * @param primaryCollector
-	 */
-	public void setPrimaryCollector(Person primaryCollector) {
-		this.primaryCollector = primaryCollector;
-	}
-
-	public Person getPrimaryCollector() {
-		return primaryCollector;
-	}
-
-	public String getFieldNotes() {
-		return fieldNotes;
-	}
-
-	public void setFieldNotes(String fieldNotes) {
-		this.fieldNotes = fieldNotes;
-	}
-
-	// *********** Listener *****************************/
-
-	private PropertyChangeListener getNewGatheringEventPropChangeListener() {
-		PropertyChangeListener listener = new PropertyChangeListener(){
-
-			@Override
-            public void propertyChange(PropertyChangeEvent event) {
-				firePropertyChange(event);
-			}
-
-		};
-		return listener;
-	}
-
-	//*********** CLONE **********************************/
-
-	/**
-	 * Clones <i>this</i> field observation. This is a shortcut that enables to
-	 * create a new instance that differs only slightly from <i>this</i> field observation
-	 * by modifying only some of the attributes.<BR>
-	 * This method overrides the clone method from {@link SpecimenOrObservationBase SpecimenOrObservationBase}.
-	 *
-	 * @see SpecimenOrObservationBase#clone()
-	 * @see eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity#clone()
-	 * @see java.lang.Object#clone()
-	 */
-	@Override
-	public FieldObservation clone(){
-		try{
-			FieldObservation result = (FieldObservation)super.clone();
-			//no changes to: fieldNotes, fieldNumber
-			return result;
-		} catch (CloneNotSupportedException e) {
-			logger.warn("Object does not implement cloneable");
-			e.printStackTrace();
-			return null;
-		}
-
-	}
-
-}
\ No newline at end of file
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/FieldUnit.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/FieldUnit.java
new file mode 100644
index 0000000000..aaac31728c
--- /dev/null
+++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/FieldUnit.java
@@ -0,0 +1,214 @@
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.cdm.model.occurrence;
+
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.ManyToOne;
+import javax.validation.Valid;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlIDREF;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.log4j.Logger;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
+import org.hibernate.envers.Audited;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.IndexedEmbedded;
+import org.hibernate.validator.constraints.Length;
+import org.springframework.beans.factory.annotation.Configurable;
+
+import eu.etaxonomy.cdm.model.agent.Person;
+import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
+import eu.etaxonomy.cdm.strategy.cache.common.IdentifiableEntityDefaultCacheStrategy;
+
+/**
+ * 
+ * In situ observation of a taxon in the field. If a specimen exists,
+ * in most cases a parallel field unit object should be instantiated and the specimen then 
+ * is "derived" from the field unit via derivation type "accessioning" or any other.
+ * 
+ * @author m.doering
+ * @created 08-Nov-2007 13:06:40
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "FieldUnit", propOrder = {
+    "fieldNumber",
+    "primaryCollector",
+    "fieldNotes",
+    "gatheringEvent"
+})
+@XmlRootElement(name = "FieldUnit")
+@Entity
+@Indexed(index = "eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase")
+@Audited
+@Configurable
+public class FieldUnit extends SpecimenOrObservationBase<IIdentifiableEntityCacheStrategy<FieldUnit>> implements Cloneable{
+	private static final long serialVersionUID = -7586670941559035171L;
+	private static final Logger logger = Logger.getLogger(FieldUnit.class);
+
+	@XmlElement(name = "FieldNumber")
+	@Field
+    //TODO Val #3379
+//	@NullOrNotEmpty
+	@Length(max = 255)
+	private String fieldNumber;
+
+	@XmlElement(name = "PrimaryCollector")
+	@XmlIDREF
+	@XmlSchemaType(name = "IDREF")
+	@ManyToOne(fetch = FetchType.LAZY)
+    @Cascade( { CascadeType.SAVE_UPDATE })
+    @IndexedEmbedded(depth = 2)
+    @Valid
+	private Person primaryCollector;
+
+	@XmlElement(name = "FieldNotes")
+	@Field
+    //TODO Val #3379
+//	@NullOrNotEmpty
+	@Length(max = 255)
+	private String fieldNotes;
+
+	@XmlElement(name = "GatheringEvent")
+	@XmlIDREF
+	@XmlSchemaType(name = "IDREF")
+	@ManyToOne(fetch = FetchType.LAZY)
+    @Cascade( { CascadeType.SAVE_UPDATE })
+    @IndexedEmbedded(depth = 2)
+    @Valid
+	private GatheringEvent gatheringEvent;
+
+// *************** FACTORY METHOD *************************/
+
+	/**
+	 * Factory method.
+	 * @return
+	 */
+	public static FieldUnit NewInstance(){
+		return new FieldUnit();
+	}
+
+//****************************** CONSTRUCTOR **************************************/
+
+	/**
+	 * Constructor
+	 */
+	protected FieldUnit(){
+		super(SpecimenOrObservationType.FieldUnit);
+		this.cacheStrategy = new IdentifiableEntityDefaultCacheStrategy<FieldUnit>();
+	}
+
+// ************************ GETTER / SETTER *******************************************
+
+	public GatheringEvent getGatheringEvent() {
+    	return gatheringEvent;
+	}
+
+	public void setGatheringEvent(GatheringEvent gatheringEvent) {
+		this.gatheringEvent = gatheringEvent;
+		addGatheringEventPropertyChangeListener();
+	}
+
+
+	private void addGatheringEventPropertyChangeListener() {
+		if (gatheringEvent != null){
+			gatheringEvent.addPropertyChangeListener(getNewGatheringEventPropChangeListener());
+		}
+	}
+
+	/**
+	 * The collectors field number. If the collector is a team the field number
+	 * is taken from the field book of the primary collector.
+	 * @see #primaryCollector
+	 * @return
+	 */
+	public String getFieldNumber() {
+		return fieldNumber;
+	}
+
+	public void setFieldNumber(String fieldNumber) {
+		this.fieldNumber = fieldNumber;
+	}
+
+
+	/**
+	 * The primary collector is the person who the field books belongs to.
+	 * So the field number is also taken from him (his field book).
+	 * @see #fieldNumber
+	 * @param primaryCollector
+	 */
+	public void setPrimaryCollector(Person primaryCollector) {
+		this.primaryCollector = primaryCollector;
+	}
+
+	public Person getPrimaryCollector() {
+		return primaryCollector;
+	}
+
+	public String getFieldNotes() {
+		return fieldNotes;
+	}
+
+	public void setFieldNotes(String fieldNotes) {
+		this.fieldNotes = fieldNotes;
+	}
+
+	// *********** Listener *****************************/
+
+	private PropertyChangeListener getNewGatheringEventPropChangeListener() {
+		PropertyChangeListener listener = new PropertyChangeListener(){
+
+			@Override
+            public void propertyChange(PropertyChangeEvent event) {
+				firePropertyChange(event);
+			}
+
+		};
+		return listener;
+	}
+
+	//*********** CLONE **********************************/
+
+	/**
+	 * Clones <i>this</i> field unit. This is a shortcut that enables to
+	 * create a new instance that differs only slightly from <i>this</i> field unit
+	 * by modifying only some of the attributes.<BR>
+	 * This method overrides the clone method from {@link SpecimenOrObservationBase SpecimenOrObservationBase}.
+	 *
+	 * @see SpecimenOrObservationBase#clone()
+	 * @see eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity#clone()
+	 * @see java.lang.Object#clone()
+	 */
+	@Override
+	public FieldUnit clone(){
+		try{
+			FieldUnit result = (FieldUnit)super.clone();
+			//no changes to: fieldNotes, fieldNumber
+			return result;
+		} catch (CloneNotSupportedException e) {
+			logger.warn("Object does not implement cloneable");
+			e.printStackTrace();
+			return null;
+		}
+
+	}
+
+}
\ No newline at end of file
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/GatheringEvent.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/GatheringEvent.java
index f469493de6..71003489da 100644
--- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/GatheringEvent.java
+++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/GatheringEvent.java
@@ -50,7 +50,7 @@ import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.location.Point;
 
 /**
- * The event when gathering a specimen or recording a field observation only
+ * The event when gathering a specimen or recording a field unit only
  * @author m.doering
  *
  */
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/SpecimenOrObservationType.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/SpecimenOrObservationType.java
index e96fc19f8f..a95db6cbfe 100644
--- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/SpecimenOrObservationType.java
+++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/SpecimenOrObservationType.java
@@ -33,7 +33,7 @@ import eu.etaxonomy.cdm.model.media.Media;
 
 /**
  * The specimen or observation type is used to define what a {@link SpecimenOrObservationBase specimen or observation} 
- * instance describes, may it be a {@link FieldObservation field unit} or a 
+ * instance describes, may it be a {@link FieldUnit field unit} or a 
  * {@link DerivedUnit derived unit}.<BR>
  * The vocabulary used derives mainly from the according vocabularies in ABCD, Darwin Core as well
  * as from the former (before v3.3) CDM subclasses of {@link SpecimenOrObservationBase}.
@@ -167,7 +167,7 @@ public enum SpecimenOrObservationType implements IDefinedTerm<SpecimenOrObservat
 	//14
 	/**
 	 * Type for all field data belonging to a particular object or observation or a set of these.
-	 * Derived from the former (before v3.3 CDM class "FieldObservation".
+	 * Derived from the former (before v3.3 CDM class "FieldUnit".
 	 */
 	//TODO do we really need an own type for FieldUnit or is this covered by any of the other 
 	//types (e.g. Observation)
@@ -303,7 +303,7 @@ public enum SpecimenOrObservationType implements IDefinedTerm<SpecimenOrObservat
 			return Observation;
 		} else if (type.equals("fossil")) {
 			return Fossil;
-		} else if (type.equals("fieldobservation")) {
+		} else if (type.equals("field(observation|unit)")) {
 			return FieldUnit;
 		} else if (type.equals("unknown")) {
 			return DerivedUnit;
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/package.html b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/package.html
index df344adbfd..23e6079858 100644
--- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/package.html
+++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/package.html
@@ -16,7 +16,7 @@
 </head>
 <body bgcolor="white">
 
-Provides classes for specimens, collections and field observations.
+Provides classes for specimens, collections and field units.
 <br/>
 <br/>
 <a href="#uml_related_documentation">Related documentation</a>
diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/test/function/TestSpecimen.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/test/function/TestSpecimen.java
index 7fc30897bd..d20b8deeb1 100644
--- a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/test/function/TestSpecimen.java
+++ b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/test/function/TestSpecimen.java
@@ -35,7 +35,7 @@ import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.reference.Reference;
@@ -128,11 +128,11 @@ public class TestSpecimen {
 		IdentifiableSource source = IdentifiableSource.NewDataImportInstance(id);
 		specimen.addSource(source);
 		
-		FieldObservation fieldObservation = FieldObservation.NewInstance();
+		FieldUnit fieldUnit = FieldUnit.NewInstance();
 		DerivationEvent derivationEvent = DerivationEvent.NewInstance(DerivationEventType.GATHERING_IN_SITU());
 		derivationEvent.addDerivative(specimen);
-		fieldObservation.addDerivationEvent(derivationEvent);
-		fieldObservation.setGatheringEvent(gatheringEvent);
+		fieldUnit.addDerivationEvent(derivationEvent);
+		fieldUnit.setGatheringEvent(gatheringEvent);
 		
 		
 		//type information
@@ -145,10 +145,10 @@ public class TestSpecimen {
 		Set<SpecimenOrObservationBase> originals = dEvent.getOriginals();
 		logger.warn("Originals: " + originals);
 		for (SpecimenOrObservationBase original : originals){
-			if (original instanceof FieldObservation){
-				FieldObservation fieldObservation2 = (FieldObservation)original;
-				logger.warn("FieldObservation: " + fieldObservation2);
-				GatheringEvent gatheringEvent2= fieldObservation2.getGatheringEvent();
+			if (original instanceof FieldUnit){
+				FieldUnit fieldUnit2 = (FieldUnit)original;
+				logger.warn("FieldUnit: " + fieldUnit2);
+				GatheringEvent gatheringEvent2= fieldUnit2.getGatheringEvent();
 				logger.warn("GatheringEvent: " + gatheringEvent2);
 				AgentBase<?> gatherer2 = gatheringEvent2.getCollector();
 				logger.warn("Gatherer: "+  gatherer2);
diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v25_30/SchemaUpdater_25_30.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v25_30/SchemaUpdater_25_30.java
index 78ffad1bbf..d1483526e9 100644
--- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v25_30/SchemaUpdater_25_30.java
+++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v25_30/SchemaUpdater_25_30.java
@@ -151,7 +151,7 @@ public class SchemaUpdater_25_30 extends SchemaUpdaterBase {
 		stepList.add(exsiccatumAdder);
 		
 		//add primary collector
-		stepName = "Add primary collector to field observation";
+		stepName = "Add primary collector to field unit";
 		ColumnAdder primaryCollectorAdder = ColumnAdder.NewIntegerInstance(stepName, "SpecimenOrObservationBase", "primaryCollector_id", INCLUDE_AUDIT, false, "AgentBase");
 		stepList.add(primaryCollectorAdder);
 
diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImpl.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImpl.java
index dcc66bb536..8d4d8b499b 100644
--- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImpl.java
+++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImpl.java
@@ -35,7 +35,7 @@ import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
@@ -70,7 +70,7 @@ public class OccurrenceDaoHibernateImpl extends IdentifiableDaoBase<SpecimenOrOb
 	public OccurrenceDaoHibernateImpl() {
 		super(SpecimenOrObservationBase.class);
 		indexedClasses = new Class[7];
-		indexedClasses[0] = FieldObservation.class;
+		indexedClasses[0] = FieldUnit.class;
 		indexedClasses[1] = DerivedUnit.class;
 		indexedClasses[5] = DnaSample.class;
 	}
@@ -252,11 +252,11 @@ public class OccurrenceDaoHibernateImpl extends IdentifiableDaoBase<SpecimenOrOb
 				}
 				Hibernate.initialize(derivedUnit.getStoredUnder());
 				SpecimenOrObservationBase original = derivedUnit.getOriginalUnit();
-				if(original != null && original.isInstanceOf(FieldObservation.class)) {
-					FieldObservation fieldObservation = original.deproxy(original, FieldObservation.class);
-					Hibernate.initialize(fieldObservation.getGatheringEvent());
-					if(fieldObservation.getGatheringEvent() != null) {
-						Hibernate.initialize(fieldObservation.getGatheringEvent().getActor());
+				if(original != null && original.isInstanceOf(FieldUnit.class)) {
+					FieldUnit fieldUnit = original.deproxy(original, FieldUnit.class);
+					Hibernate.initialize(fieldUnit.getGatheringEvent());
+					if(fieldUnit.getGatheringEvent() != null) {
+						Hibernate.initialize(fieldUnit.getGatheringEvent().getActor());
 					}
 				}
 			}
@@ -321,7 +321,7 @@ public class OccurrenceDaoHibernateImpl extends IdentifiableDaoBase<SpecimenOrOb
 		List<UuidAndTitleCache<DerivedUnit>> list = new ArrayList<UuidAndTitleCache<DerivedUnit>>();
 		Session session = getSession();
 		
-		Query query = session.createQuery("select uuid, titleCache from " + type.getSimpleName() + " where NOT dtype = " + FieldObservation.class.getSimpleName());
+		Query query = session.createQuery("select uuid, titleCache from " + type.getSimpleName() + " where NOT dtype = " + FieldUnit.class.getSimpleName());
 		
 		List<Object[]> result = query.list();
 		
@@ -333,19 +333,19 @@ public class OccurrenceDaoHibernateImpl extends IdentifiableDaoBase<SpecimenOrOb
 	}
 
 	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao#getFieldObservationUuidAndTitleCache()
+	 * @see eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao#getFieldUnitUuidAndTitleCache()
 	 */
 	@Override
-	public List<UuidAndTitleCache<FieldObservation>> getFieldObservationUuidAndTitleCache() {
-		List<UuidAndTitleCache<FieldObservation>> list = new ArrayList<UuidAndTitleCache<FieldObservation>>();
+	public List<UuidAndTitleCache<FieldUnit>> getFieldUnitUuidAndTitleCache() {
+		List<UuidAndTitleCache<FieldUnit>> list = new ArrayList<UuidAndTitleCache<FieldUnit>>();
 		Session session = getSession();
 		
-		Query query = session.createQuery("select uuid, titleCache from " + type.getSimpleName() + " where dtype = " + FieldObservation.class.getSimpleName());
+		Query query = session.createQuery("select uuid, titleCache from " + type.getSimpleName() + " where dtype = " + FieldUnit.class.getSimpleName());
 		
 		List<Object[]> result = query.list();
 		
 		for(Object[] object : result){
-			list.add(new UuidAndTitleCache<FieldObservation>(FieldObservation.class, (UUID) object[0], (String) object[1]));
+			list.add(new UuidAndTitleCache<FieldUnit>(FieldUnit.class, (UUID) object[0], (String) object[1]));
 		}
 		
 		return list;
diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/occurrence/IOccurrenceDao.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/occurrence/IOccurrenceDao.java
index 0d6a3874e4..435e015418 100644
--- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/occurrence/IOccurrenceDao.java
+++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/occurrence/IOccurrenceDao.java
@@ -18,7 +18,7 @@ import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
@@ -119,7 +119,7 @@ public interface IOccurrenceDao extends IIdentifiableDao<SpecimenOrObservationBa
      */
 	public List<DerivationEvent> getDerivationEvents(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths);
 	
-	public List<UuidAndTitleCache<FieldObservation>> getFieldObservationUuidAndTitleCache();
+	public List<UuidAndTitleCache<FieldUnit>> getFieldUnitUuidAndTitleCache();
 	
 	public List<UuidAndTitleCache<DerivedUnit>> getDerivedUnitUuidAndTitleCache();
 	
diff --git a/cdmlib-persistence/src/main/resources/eu/etaxonomy/cdm/hibernate.cfg.xml b/cdmlib-persistence/src/main/resources/eu/etaxonomy/cdm/hibernate.cfg.xml
index 9cc82ad773..95852fffbc 100644
--- a/cdmlib-persistence/src/main/resources/eu/etaxonomy/cdm/hibernate.cfg.xml
+++ b/cdmlib-persistence/src/main/resources/eu/etaxonomy/cdm/hibernate.cfg.xml
@@ -164,7 +164,7 @@
       <mapping class="eu.etaxonomy.cdm.model.occurrence.DerivationEventType"/>
       <mapping class="eu.etaxonomy.cdm.model.occurrence.DerivedUnit"/>
       <mapping class="eu.etaxonomy.cdm.model.occurrence.DeterminationEvent"/>
-      <mapping class="eu.etaxonomy.cdm.model.occurrence.FieldObservation"/>
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.FieldUnit"/>
       <mapping class="eu.etaxonomy.cdm.model.occurrence.GatheringEvent"/>
       <mapping class="eu.etaxonomy.cdm.model.occurrence.PreservationMethod"/>
       <mapping class="eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase"/>
diff --git a/cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/CdmGenericDaoImplTest.java b/cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/CdmGenericDaoImplTest.java
index 28f1da1a86..f2be20e6ce 100644
--- a/cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/CdmGenericDaoImplTest.java
+++ b/cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/CdmGenericDaoImplTest.java
@@ -134,7 +134,7 @@ import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
@@ -423,7 +423,7 @@ public class CdmGenericDaoImplTest extends CdmTransactionalIntegrationTest{
 				DerivationEventType.class, 
 				DerivedUnit.class, 
 				DeterminationEvent.class, 
-				FieldObservation.class, 
+				FieldUnit.class, 
 				GatheringEvent.class, 
 				PreservationMethod.class, 
 				SpecimenOrObservationBase.class, 
diff --git a/cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImplTest.java b/cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImplTest.java
index 2997d0e81a..40465fac42 100644
--- a/cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImplTest.java
+++ b/cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImplTest.java
@@ -76,7 +76,7 @@ public class OccurrenceDaoHibernateImplTest  extends CdmIntegrationTest {
 	}
 
 	@Test
-	public void testGetFieldObservationUuidAndTitleCache() {
+	public void testGetFieldUnitUuidAndTitleCache() {
 		logger.warn("Not yet implemented");
 	}
 
diff --git a/cdmlib-persistence/src/test/resources/META-INF/persistence_old.xml b/cdmlib-persistence/src/test/resources/META-INF/persistence_old.xml
index 80a73c3ca1..4e038f4a35 100644
--- a/cdmlib-persistence/src/test/resources/META-INF/persistence_old.xml
+++ b/cdmlib-persistence/src/test/resources/META-INF/persistence_old.xml
@@ -118,7 +118,7 @@
         <class>eu.etaxonomy.cdm.model.occurrence.DerivationEventType</class>
         <class>eu.etaxonomy.cdm.model.occurrence.DerivedUnit</class>
         <class>eu.etaxonomy.cdm.model.occurrence.DeterminationEvent</class>
-        <class>eu.etaxonomy.cdm.model.occurrence.FieldObservation</class>
+        <class>eu.etaxonomy.cdm.model.occurrence.FieldUnit</class>
         <class>eu.etaxonomy.cdm.model.occurrence.GatheringEvent</class>
         <class>eu.etaxonomy.cdm.model.occurrence.PreservationMethod</class>
         <class>eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase</class>
diff --git a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/DerivedUnitFacadeController.java b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/DerivedUnitFacadeController.java
index db4a86760e..e1f32df906 100644
--- a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/DerivedUnitFacadeController.java
+++ b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/DerivedUnitFacadeController.java
@@ -142,7 +142,7 @@ public class DerivedUnitFacadeController extends AbstractController<SpecimenOrOb
     // public Map<Language, LanguageString> getEcologyAll(){
     // public Map<Language, LanguageString> getFieldObjectDefinition() {
     // public List<Media> getFieldObjectMedia() {
-    // public FieldObservation getFieldObservation(){
+    // public FieldUnit getFieldUnit(){
     // public GatheringEvent getGatheringEvent() {
     // public String getGatheringEventDescription() {
     // public Map<Language, LanguageString> getPlantDescriptionAll(){ ==> representation !!
diff --git a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/DerivedUnitFacadePortalController.java b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/DerivedUnitFacadePortalController.java
index 629a73aaf1..97b59fcacc 100644
--- a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/DerivedUnitFacadePortalController.java
+++ b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/DerivedUnitFacadePortalController.java
@@ -33,7 +33,7 @@ public class DerivedUnitFacadePortalController extends
             "ecologyAll",
             "plantDescriptionAll",
 
-//			"fieldObservation.*",
+//			"fieldUnit.*",
             "fieldObjectMedia",
 
 //			"derivedUnit.*",
diff --git a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/json/processor/bean/DerivedUnitFacadeBeanProcessor.java b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/json/processor/bean/DerivedUnitFacadeBeanProcessor.java
index 2238455302..3293ede2f4 100644
--- a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/json/processor/bean/DerivedUnitFacadeBeanProcessor.java
+++ b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/json/processor/bean/DerivedUnitFacadeBeanProcessor.java
@@ -71,7 +71,7 @@ public class DerivedUnitFacadeBeanProcessor extends AbstractBeanProcessor<Derive
 // FIXME: addJsonElement(json, jsonConfig, "plantDescription", bean.getPlantDescription(languages));
 		addJsonElement(json, jsonConfig, "plantDescription", bean.getPlantDescription());
 		
-		if(Hibernate.isInitialized(bean.innerFieldObservation())){
+		if(Hibernate.isInitialized(bean.innerFieldUnit())){
 			addJsonElement(json, jsonConfig, "fieldObjectMedia", bean.getFieldObjectMedia());
 			addJsonElement(json, jsonConfig, "fieldNumber", bean.getFieldNumber());			
 			addJsonElement(json, jsonConfig, "fieldNotes", bean.getFieldNotes());			
diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacade.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacade.java
index 28b1e57063..4843bc2e20 100644
--- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacade.java
+++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacade.java
@@ -52,7 +52,7 @@ import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
@@ -64,7 +64,7 @@ import eu.etaxonomy.cdm.model.reference.Reference;
  * a specimen based view. It does not support all functionality available in the
  * occurrence package.<BR>
  * The most significant restriction is that a specimen may derive only from one
- * direct derivation event and there must be only one field observation
+ * direct derivation event and there must be only one field unit
  * (gathering event) it derives from.<BR>
  * 
  * @author a.mueller
@@ -86,7 +86,7 @@ public class DerivedUnitFacade {
 	// private GatheringEvent gatheringEvent;
 	private SpecimenOrObservationType type; // needed?
 
-	private FieldObservation fieldObservation;
+	private FieldUnit fieldUnit;
 
 	private final DerivedUnit derivedUnit;
 
@@ -115,8 +115,8 @@ public class DerivedUnitFacade {
 	 * @param type
 	 * @return
 	 */
-	public static DerivedUnitFacade NewInstance(SpecimenOrObservationType type, FieldObservation fieldObservation) {
-		return new DerivedUnitFacade(type, fieldObservation, null);
+	public static DerivedUnitFacade NewInstance(SpecimenOrObservationType type, FieldUnit fieldUnit) {
+		return new DerivedUnitFacade(type, fieldUnit, null);
 	}
 
 	/**
@@ -124,13 +124,13 @@ public class DerivedUnitFacade {
 	 * <code>type</code>.
 	 * 
 	 * @param type
-	 * @param fieldObservation the field observation to use
+	 * @param fieldUnit the field unit to use
 	 * @param config the facade configurator to use
-	 * //TODO are there any ambiguities to solve with defining a field observation or a configurator 
+	 * //TODO are there any ambiguities to solve with defining a field unit or a configurator 
 	 * @return
 	 */
-	public static DerivedUnitFacade NewInstance(SpecimenOrObservationType type, FieldObservation fieldObservation, DerivedUnitFacadeConfigurator config) {
-		return new DerivedUnitFacade(type, fieldObservation, config);
+	public static DerivedUnitFacade NewInstance(SpecimenOrObservationType type, FieldUnit fieldUnit, DerivedUnitFacadeConfigurator config) {
+		return new DerivedUnitFacade(type, fieldUnit, config);
 	}
 
 	
@@ -155,7 +155,7 @@ public class DerivedUnitFacade {
 
 	// ****************** CONSTRUCTOR ******************************************
 
-	private DerivedUnitFacade(SpecimenOrObservationType type, FieldObservation fieldObservation, DerivedUnitFacadeConfigurator config) {
+	private DerivedUnitFacade(SpecimenOrObservationType type, FieldUnit fieldUnit, DerivedUnitFacadeConfigurator config) {
 		if (config == null){
 			config = DerivedUnitFacadeConfigurator.NewInstance();
 		}
@@ -163,11 +163,11 @@ public class DerivedUnitFacade {
 		this.type = type;
 		// derivedUnit
 		derivedUnit = getNewDerivedUnitInstance(type);
-		setFieldObservation(fieldObservation);
+		setFieldUnit(fieldUnit);
 		if (derivedUnit != null){
 			setCacheStrategy();
 		}else{
-			setFieldObservationCacheStrategy();
+			setFieldUnitCacheStrategy();
 		}
 	}
 
@@ -198,20 +198,20 @@ public class DerivedUnitFacade {
 		// derivation event
 		if (this.derivedUnit.getDerivedFrom() != null) {
 			DerivationEvent derivationEvent = getDerivationEvent(CREATE);
-			// fieldObservation
-			Set<FieldObservation> fieldOriginals = getFieldObservationsOriginals(
+			// fieldUnit
+			Set<FieldUnit> fieldOriginals = getFieldUnitOriginals(
 					derivationEvent, null);
 			if (fieldOriginals.size() > 1) {
 				throw new DerivedUnitFacadeNotSupportedException(
 						"Specimen must not have more than 1 derivation event");
 			} else if (fieldOriginals.size() == 0) {
-				// fieldObservation = FieldObservation.NewInstance();
+				// fieldUnit = FieldUnit.NewInstance();
 			} else if (fieldOriginals.size() == 1) {
-				fieldObservation = fieldOriginals.iterator().next();
-				// ###fieldObservation =
-				// getInitializedFieldObservation(fieldObservation);
+				fieldUnit = fieldOriginals.iterator().next();
+				// ###fieldUnit =
+				// getInitializedFieldUnit(fieldUnit);
 				if (config.isFirePropertyChangeEvents()){
-					addNewEventPropagationListener(fieldObservation);
+					addNewEventPropagationListener(fieldUnit);
 				}
 			} else {
 				throw new IllegalStateException("Illegal state");
@@ -239,12 +239,12 @@ public class DerivedUnitFacade {
 			}
 		}
 
-		// handle fieldObservation.getMedia()
-		if (fieldObservation != null && fieldObservation.getMedia() != null
-				&& fieldObservation.getMedia().size() > 0) {
+		// handle fieldUnit.getMedia()
+		if (fieldUnit != null && fieldUnit.getMedia() != null
+				&& fieldUnit.getMedia().size() > 0) {
 			// TODO better changed model here to allow only one place for images
 			if (this.config.isMoveFieldObjectMediaToGallery()) {
-				Set<Media> mediaSet = fieldObservation.getMedia();
+				Set<Media> mediaSet = fieldUnit.getMedia();
 				for (Media media : mediaSet) {
 					this.addFieldObjectMedia(media);
 				}
@@ -287,23 +287,22 @@ public class DerivedUnitFacade {
 	 * path. If the property path is <code>null</code> or no occurrence service
 	 * is given the returned object is the same as the input parameter.
 	 * 
-	 * @param fieldObservation2
+	 * @param fieldUnit
 	 * @return
 	 */
-	private FieldObservation getInitializedFieldObservation(
-			FieldObservation fieldObservation) {
+	private FieldUnit getInitializedFieldUnit(FieldUnit fieldUnit) {
 		IOccurrenceService occurrenceService = this.config
 				.getOccurrenceService();
 		if (occurrenceService == null) {
-			return fieldObservation;
+			return fieldUnit;
 		}
 		List<String> propertyPaths = this.config.getPropertyPaths();
 		if (propertyPaths == null) {
-			return fieldObservation;
+			return fieldUnit;
 		}
 		propertyPaths = getFieldObjectPropertyPaths(propertyPaths);
-		FieldObservation result = (FieldObservation) occurrenceService.load(
-				fieldObservation.getUuid(), propertyPaths);
+		FieldUnit result = (FieldUnit) occurrenceService.load(
+				fieldUnit.getUuid(), propertyPaths);
 		return result;
 	}
 
@@ -464,14 +463,14 @@ public class DerivedUnitFacade {
 					"Facade's derviedUnit must not be null to set cache strategy");
 		}else{
 			derivedUnit.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
-			setFieldObservationCacheStrategy();
+			setFieldUnitCacheStrategy();
 		}
 	}
 
-	private void setFieldObservationCacheStrategy() {
+	private void setFieldUnitCacheStrategy() {
 		if (this.hasFieldObject()){
-			DerivedUnitFacadeFieldObservationCacheStrategy strategy = new DerivedUnitFacadeFieldObservationCacheStrategy();
-			this.fieldObservation.setCacheStrategy(strategy);
+			DerivedUnitFacadeFieldUnitCacheStrategy strategy = new DerivedUnitFacadeFieldUnitCacheStrategy();
+			this.fieldUnit.setCacheStrategy(strategy);
 		}
 	}
 
@@ -486,7 +485,7 @@ public class DerivedUnitFacade {
 			Feature feature, boolean createIfNotExists, boolean isImageGallery)
 			throws DerivedUnitFacadeNotSupportedException {
 		// field object
-		FieldObservation fieldObject = getFieldObservation(createIfNotExists);
+		FieldUnit fieldObject = getFieldUnit(createIfNotExists);
 		if (fieldObject == null) {
 			return null;
 		}
@@ -616,8 +615,7 @@ public class DerivedUnitFacade {
 			boolean createIfNotExists)
 			throws DerivedUnitFacadeNotSupportedException {
 		if (this.fieldObjectMediaTextData == null && createIfNotExists) {
-			this.fieldObjectMediaTextData = getImageGalleryTextData(
-					fieldObservation, "Field observation");
+			this.fieldObjectMediaTextData = getImageGalleryTextData(fieldUnit, "Field unit");
 		}
 		return this.fieldObjectMediaTextData;
 	}
@@ -627,18 +625,18 @@ public class DerivedUnitFacade {
 	 * @return
 	 * @throws DerivedUnitFacadeNotSupportedException
 	 */
-	private Set<FieldObservation> getFieldObservationsOriginals(
+	private Set<FieldUnit> getFieldUnitOriginals(
 			DerivationEvent derivationEvent,
 			Set<SpecimenOrObservationBase> recursionAvoidSet)
 			throws DerivedUnitFacadeNotSupportedException {
 		if (recursionAvoidSet == null) {
 			recursionAvoidSet = new HashSet<SpecimenOrObservationBase>();
 		}
-		Set<FieldObservation> result = new HashSet<FieldObservation>();
+		Set<FieldUnit> result = new HashSet<FieldUnit>();
 		Set<SpecimenOrObservationBase> originals = derivationEvent.getOriginals();
 		for (SpecimenOrObservationBase original : originals) {
-			if (original.isInstanceOf(FieldObservation.class)) {
-				result.add(CdmBase.deproxy(original, FieldObservation.class));
+			if (original.isInstanceOf(FieldUnit.class)) {
+				result.add(CdmBase.deproxy(original, FieldUnit.class));
 			} else if (original.isInstanceOf(DerivedUnit.class)) {
 				// if specimen has already been tested exclude it from further
 				// recursion
@@ -651,9 +649,9 @@ public class DerivedUnitFacade {
 				// Set<DerivationEvent> derivationEvents =
 				// original.getDerivationEvents();
 				// for (DerivationEvent originalDerivation : derivationEvents){
-				Set<FieldObservation> fieldObservations = getFieldObservationsOriginals(
+				Set<FieldUnit> fieldUnits = getFieldUnitOriginals(
 						originalDerivation, recursionAvoidSet);
-				result.addAll(fieldObservations);
+				result.addAll(fieldUnits);
 				// }
 			} else {
 				throw new DerivedUnitFacadeNotSupportedException(
@@ -885,7 +883,7 @@ public class DerivedUnitFacade {
 	// }
 	// if (specimen == this.derivedUnit){
 	// return getDerivedUnitImageGalleryMedia();
-	// }else if (specimen == this.fieldObservation){
+	// }else if (specimen == this.fieldUnit){
 	// return getObservationImageGalleryTextData();
 	// }else{
 	// return getImageGalleryMedia(specimen, "Undefined specimen ");
@@ -909,7 +907,7 @@ public class DerivedUnitFacade {
 		}
 		if (specimen == this.derivedUnit) {
 			return getDerivedUnitImageGalleryTextData(createIfNotExists);
-		} else if (specimen == this.fieldObservation) {
+		} else if (specimen == this.fieldUnit) {
 			return getObservationImageGalleryTextData(createIfNotExists);
 		} else {
 			return getImageGalleryTextData(specimen, "Undefined specimen ");
@@ -1355,7 +1353,7 @@ public class DerivedUnitFacade {
 	 * @param gatheringEvent
 	 */
 	public void setGatheringEvent(GatheringEvent gatheringEvent) {
-		getFieldObservation(true).setGatheringEvent(gatheringEvent);
+		getFieldUnit(true).setGatheringEvent(gatheringEvent);
 	}
 
 	public boolean hasGatheringEvent() {
@@ -1367,26 +1365,26 @@ public class DerivedUnitFacade {
 	}
 
 	public GatheringEvent getGatheringEvent(boolean createIfNotExists) {
-		if (!hasFieldObservation() && !createIfNotExists) {
+		if (!hasFieldUnit() && !createIfNotExists) {
 			return null;
 		}
-		if (createIfNotExists && getFieldObservation(true).getGatheringEvent() == null) {
+		if (createIfNotExists && getFieldUnit(true).getGatheringEvent() == null) {
 			GatheringEvent gatheringEvent = GatheringEvent.NewInstance();
-			getFieldObservation(true).setGatheringEvent(gatheringEvent);
+			getFieldUnit(true).setGatheringEvent(gatheringEvent);
 		}
-		return getFieldObservation(true).getGatheringEvent();
+		return getFieldUnit(true).getGatheringEvent();
 	}
 
 	// ****************** Field Object ************************************/
 
 	/**
-	 * Returns true if a field observation exists (even if all attributes are
+	 * Returns true if a field unit exists (even if all attributes are
 	 * empty or <code>null<code>.
 	 * 
 	 * @return
 	 */
 	public boolean hasFieldObject() {
-		return this.fieldObservation != null;
+		return this.fieldUnit != null;
 	}
 
 	// ecology
@@ -1536,15 +1534,15 @@ public class DerivedUnitFacade {
 
 	// field object definition
 	public void addFieldObjectDefinition(String text, Language language) {
-		getFieldObservation(true).putDefinition(language, text);
+		getFieldUnit(true).putDefinition(language, text);
 	}
 
 	@Transient
 	public Map<Language, LanguageString> getFieldObjectDefinition() {
-		if (!hasFieldObservation()) {
+		if (!hasFieldUnit()) {
 			return new HashMap<Language, LanguageString>();
 		} else {
-			return getFieldObservation(true).getDefinition();
+			return getFieldUnit(true).getDefinition();
 		}
 	}
 
@@ -1559,15 +1557,15 @@ public class DerivedUnitFacade {
 	}
 
 	public void removeFieldObjectDefinition(Language lang) {
-		if (hasFieldObservation()) {
-			getFieldObservation(true).removeDefinition(lang);
+		if (hasFieldUnit()) {
+			getFieldUnit(true).removeDefinition(lang);
 		}
 	}
 
 	// media
 	public boolean addFieldObjectMedia(Media media) {
 		try {
-			return addMedia(media, getFieldObservation(true));
+			return addMedia(media, getFieldUnit(true));
 		} catch (DerivedUnitFacadeNotSupportedException e) {
 			throw new IllegalStateException(notSupportMessage, e);
 		}
@@ -1583,7 +1581,7 @@ public class DerivedUnitFacade {
 		if (!hasFieldObject()) {
 			return false;
 		} else {
-			return (getImageGallery(fieldObservation, false) != null);
+			return (getImageGallery(fieldUnit, false) != null);
 		}
 	}
 
@@ -1592,8 +1590,8 @@ public class DerivedUnitFacade {
 		SpecimenDescription existingGallery = getFieldObjectImageGallery(false);
 
 		// test attached specimens contain this.derivedUnit
-		SpecimenOrObservationBase<?> facadeFieldObservation = innerFieldObservation();
-		testSpecimenInImageGallery(imageGallery, facadeFieldObservation);
+		SpecimenOrObservationBase<?> facadeFieldUnit = innerFieldUnit();
+		testSpecimenInImageGallery(imageGallery, facadeFieldUnit);
 
 		if (existingGallery != null) {
 			if (existingGallery != imageGallery) {
@@ -1641,7 +1639,7 @@ public class DerivedUnitFacade {
 	@Transient
 	public List<Media> getFieldObjectMedia() {
 		try {
-			List<Media> result = getMediaList(getFieldObservation(false), false);
+			List<Media> result = getMediaList(getFieldUnit(false), false);
 			return result == null ? new ArrayList<Media>() : result;
 		} catch (DerivedUnitFacadeNotSupportedException e) {
 			throw new IllegalStateException(notSupportMessage, e);
@@ -1650,7 +1648,7 @@ public class DerivedUnitFacade {
 
 	public boolean removeFieldObjectMedia(Media media) {
 		try {
-			return removeMedia(media, getFieldObservation(false));
+			return removeMedia(media, getFieldUnit(false));
 		} catch (DerivedUnitFacadeNotSupportedException e) {
 			throw new IllegalStateException(notSupportMessage, e);
 		}
@@ -1659,116 +1657,116 @@ public class DerivedUnitFacade {
 	// field number
 	@Transient
 	public String getFieldNumber() {
-		if (!hasFieldObservation()) {
+		if (!hasFieldUnit()) {
 			return null;
 		} else {
-			return getFieldObservation(true).getFieldNumber();
+			return getFieldUnit(true).getFieldNumber();
 		}
 	}
 
 	public void setFieldNumber(String fieldNumber) {
-		getFieldObservation(true).setFieldNumber(fieldNumber);
+		getFieldUnit(true).setFieldNumber(fieldNumber);
 	}
 
 	// primary collector
 	@Transient
 	public Person getPrimaryCollector() {
-		if (!hasFieldObservation()) {
+		if (!hasFieldUnit()) {
 			return null;
 		} else {
-			return getFieldObservation(true).getPrimaryCollector();
+			return getFieldUnit(true).getPrimaryCollector();
 		}
 	}
 
 	public void setPrimaryCollector(Person primaryCollector) {
-		getFieldObservation(true).setPrimaryCollector(primaryCollector);
+		getFieldUnit(true).setPrimaryCollector(primaryCollector);
 	}
 
 	// field notes
 	@Transient
 	public String getFieldNotes() {
-		if (!hasFieldObservation()) {
+		if (!hasFieldUnit()) {
 			return null;
 		} else {
-			return getFieldObservation(true).getFieldNotes();
+			return getFieldUnit(true).getFieldNotes();
 		}
 	}
 
 	public void setFieldNotes(String fieldNotes) {
-		getFieldObservation(true).setFieldNotes(fieldNotes);
+		getFieldUnit(true).setFieldNotes(fieldNotes);
 	}
 
 	// individual counts
 	@Transient
 	public Integer getIndividualCount() {
-		return (hasFieldObservation() ? getFieldObservation(true)
+		return (hasFieldUnit() ? getFieldUnit(true)
 				.getIndividualCount() : null);
 	}
 
 	public void setIndividualCount(Integer individualCount) {
-		getFieldObservation(true).setIndividualCount(individualCount);
+		getFieldUnit(true).setIndividualCount(individualCount);
 	}
 
 	// life stage
 	@Transient
 	public DefinedTerm getLifeStage() {
-		return (hasFieldObservation() ? getFieldObservation(true)
+		return (hasFieldUnit() ? getFieldUnit(true)
 				.getLifeStage() : null);
 	}
 
 	public void setLifeStage(DefinedTerm lifeStage) {
-		getFieldObservation(true).setLifeStage(lifeStage);
+		getFieldUnit(true).setLifeStage(lifeStage);
 	}
 
 	// sex
 	@Transient
 	public DefinedTerm getSex() {
-		return (hasFieldObservation() ? getFieldObservation(true).getSex()
+		return (hasFieldUnit() ? getFieldUnit(true).getSex()
 				: null);
 	}
 
 	public void setSex(DefinedTerm sex) {
-		getFieldObservation(true).setSex(sex);
+		getFieldUnit(true).setSex(sex);
 	}
 
-	// field observation
-	public boolean hasFieldObservation() {
-		return (getFieldObservation(false) != null);
+	// field unit
+	public boolean hasFieldUnit() {
+		return (getFieldUnit(false) != null);
 	}
 
 	/**
-	 * Returns the field observation as an object.
+	 * Returns the field unit as an object.
 	 * 
 	 * @return
 	 */
-	public FieldObservation innerFieldObservation() {
-		return getFieldObservation(false);
+	public FieldUnit innerFieldUnit() {
+		return getFieldUnit(false);
 	}
 
 	/**
-	 * Returns the field observation as an object.
+	 * Returns the field unit as an object.
 	 * 
 	 * @return
 	 */
-	public FieldObservation getFieldObservation(boolean createIfNotExists) {
-		if (fieldObservation == null && createIfNotExists) {
-			setFieldObservation(FieldObservation.NewInstance());
+	public FieldUnit getFieldUnit(boolean createIfNotExists) {
+		if (fieldUnit == null && createIfNotExists) {
+			setFieldUnit(FieldUnit.NewInstance());
 		}
-		return this.fieldObservation;
+		return this.fieldUnit;
 	}
 	
 
-	private void setFieldObservation(FieldObservation fieldObservation) {
-		this.fieldObservation = fieldObservation;
-		if (fieldObservation != null){
+	private void setFieldUnit(FieldUnit fieldUnit) {
+		this.fieldUnit = fieldUnit;
+		if (fieldUnit != null){
 			if (config.isFirePropertyChangeEvents()){
-				addNewEventPropagationListener(fieldObservation);
+				addNewEventPropagationListener(fieldUnit);
 			}
 			if (derivedUnit != null){
 				DerivationEvent derivationEvent = getDerivationEvent(CREATE);
-				derivationEvent.addOriginal(fieldObservation);
+				derivationEvent.addOriginal(fieldUnit);
 			}
-			setFieldObservationCacheStrategy();
+			setFieldUnitCacheStrategy();
 		}
 	}
 
@@ -1942,7 +1940,7 @@ public class DerivedUnitFacade {
 		Set<SpecimenOrObservationBase> imageGallerySpecimens = imageGallery.getDescribedSpecimenOrObservations();
 		if (imageGallerySpecimens.size() < 1) {
 			throw new DerivedUnitFacadeNotSupportedException(
-					"Image Gallery has no Specimen attached. Please attache according specimen or field observation.");
+					"Image Gallery has no Specimen attached. Please attache according specimen or field unit.");
 		}
 		if (!imageGallerySpecimens.contains(specimen)) {
 			throw new DerivedUnitFacadeNotSupportedException(
@@ -2073,14 +2071,14 @@ public class DerivedUnitFacade {
 		if (!titledUnit.isProtectedTitleCache()) {
 			// always compute title cache anew as long as there are no property
 			// change listeners on
-			// field observation, gathering event etc
+			// field unit, gathering event etc
 			titledUnit.setTitleCache(null, false);
 		}
 		return titledUnit.getTitleCache();
 	}
 	
 	private SpecimenOrObservationBase<?> getTitledUnit(){
-		return (derivedUnit != null )? derivedUnit : fieldObservation;
+		return (derivedUnit != null )? derivedUnit : fieldUnit;
 	}
 
 	public boolean isProtectedTitleCache() {
@@ -2108,13 +2106,13 @@ public class DerivedUnitFacade {
 //	public DerivedUnit innerDerivedUnit(boolean createIfNotExists) {
 //		DerivedUnit result = this.derivedUnit; 
 //		if (result == null && createIfNotExists){
-//			if (this.fieldObservation == null){
-//				String message = "Field observation must exist to create derived unit.";
+//			if (this.fieldUnit == null){
+//				String message = "Field unit must exist to create derived unit.";
 //				throw new IllegalStateException(message);
 //			}else{
 //				DerivedUnit = 
 //				DerivationEvent derivationEvent = getDerivationEvent(true);
-//				derivationEvent.addOriginal(fieldObservation);
+//				derivationEvent.addOriginal(fieldUnit);
 //				return this.derivedUnit;
 //			}
 //		}
@@ -2266,7 +2264,7 @@ public class DerivedUnitFacade {
 
 	// ******************************* Events ***************************
 	
-	//set of events that were currently fired by this facades field observation
+	//set of events that were currently fired by this facades field unit
 	//to avoid recursive fireing of the same event
 	private Set<PropertyChangeEvent> fireingEvents = new HashSet<PropertyChangeEvent>();
 	
@@ -2287,9 +2285,9 @@ public class DerivedUnitFacade {
 				if (derivedUnit != null){
 					derivedUnit.firePropertyChange(event);
 				}else{
-					if (! event.getSource().equals(fieldObservation) && ! fireingEvents.contains(event)  ){
+					if (! event.getSource().equals(fieldUnit) && ! fireingEvents.contains(event)  ){
 						fireingEvents.add(event);
-						fieldObservation.firePropertyChange(event);
+						fieldUnit.firePropertyChange(event);
 						fireingEvents.remove(event);
 					}
 				}
@@ -2362,7 +2360,7 @@ public class DerivedUnitFacade {
 
 	private void testDerivedUnit() {
 		if (derivedUnit == null){
-			throw new IllegalStateException("This method is not allowed for this specimen or observation type. Probably you have tried to add specimen(derived unit) information to a field observation");
+			throw new IllegalStateException("This method is not allowed for this specimen or observation type. Probably you have tried to add specimen(derived unit) information to a field unit");
 		}
 	}
 
diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeCacheStrategy.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeCacheStrategy.java
index 31b43144f3..6a7dd79556 100644
--- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeCacheStrategy.java
+++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeCacheStrategy.java
@@ -50,7 +50,7 @@ public class DerivedUnitFacadeCacheStrategy extends StrategyBase implements IIde
 	 */
 	@Override
 	public String getTitleCache(DerivedUnit derivedUnit) {
-		DerivedUnitFacadeFieldObservationCacheStrategy fieldStrategy = new DerivedUnitFacadeFieldObservationCacheStrategy();
+		DerivedUnitFacadeFieldUnitCacheStrategy fieldStrategy = new DerivedUnitFacadeFieldUnitCacheStrategy();
 
 		String result = "";
 		
diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldObservationCacheStrategy.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldObservationCacheStrategy.java
deleted file mode 100644
index 5522f7b05a..0000000000
--- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldObservationCacheStrategy.java
+++ /dev/null
@@ -1,269 +0,0 @@
-// $Id$
-/**
-* Copyright (C) 2009 EDIT
-* European Distributed Institute of Taxonomy 
-* http://www.e-taxonomy.eu
-* 
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
-package eu.etaxonomy.cdm.api.facade;
-
-import java.util.UUID;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-
-import eu.etaxonomy.cdm.common.CdmUtils;
-import eu.etaxonomy.cdm.model.agent.AgentBase;
-import eu.etaxonomy.cdm.model.agent.Institution;
-import eu.etaxonomy.cdm.model.agent.Person;
-import eu.etaxonomy.cdm.model.agent.Team;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.common.Representation;
-import eu.etaxonomy.cdm.model.common.TimePeriod;
-import eu.etaxonomy.cdm.model.location.NamedArea;
-import eu.etaxonomy.cdm.model.occurrence.Collection;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
-import eu.etaxonomy.cdm.strategy.StrategyBase;
-import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
-
-/**
- * @author a.mueller
- * @date 03.06.2010
- *
- */
-public class DerivedUnitFacadeFieldObservationCacheStrategy extends StrategyBase implements IIdentifiableEntityCacheStrategy<FieldObservation> {
-	private static final long serialVersionUID = 1578628591216605619L;
-	private static final Logger logger = Logger.getLogger(DerivedUnitFacadeFieldObservationCacheStrategy.class);
-
-	private static final UUID uuid = UUID.fromString("df4672c1-ce5c-4724-af6d-91e2b326d4a4");
-	
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.strategy.StrategyBase#getUuid()
-	 */
-	@Override
-	protected UUID getUuid() {
-		return uuid;
-	}
-
-	private boolean includeEmptySeconds = false;
-	private boolean includeReferenceSystem = true;
-	
-
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy#getTitleCache(eu.etaxonomy.cdm.model.common.IdentifiableEntity)
-	 */
-	@Override
-	public String getTitleCache(FieldObservation fieldObservation) {
-		DerivedUnitFacade facade;
-		String result = "";
-		DerivedUnitFacadeConfigurator config = DerivedUnitFacadeConfigurator.NewInstance();
-		config.setFirePropertyChangeEvents(false);
-		facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, fieldObservation, config);
-		result = getFieldData(facade);	
-		result = addPlantDescription(result, facade);
-		facade.close();
-		return result;
-	}
-	
-
-	protected String getFieldData(DerivedUnitFacade facade) {
-		String ALTITUDE_PREFIX = "alt. ";
-		String ALTITUDE_POSTFIX = " m";
-		
-		String result = "";
-		
-			
-		//country
-		String strCountry = null;
-		NamedArea country = facade.getCountry();
-		Representation repCountry = country == null ? null : country.getRepresentation(Language.DEFAULT());
-		//TODO currently the label is the 3 digit representation of the country and text is the full text.
-		//this is against the common way of handling text, label and labelabbrev in defined terms
-		strCountry = repCountry == null ? null: repCountry.getText();
-		result = CdmUtils.concat(", ", result, strCountry);
-		
-		//locality
-		result = CdmUtils.concat(", ", result, facade.getLocalityText());
-		
-		//elevation
-		if (StringUtils.isNotBlank(facade.absoluteElevationToString())){
-			result = CdmUtils.concat(", " , result, ALTITUDE_PREFIX);
-			result += facade.absoluteElevationToString() + ALTITUDE_POSTFIX;
-		}
-		
-		//exact locality
-		if (facade.getExactLocation() != null){
-			String exactLocation = facade.getExactLocation().toSexagesimalString(this.includeEmptySeconds, this.includeReferenceSystem);
-			result = CdmUtils.concat(", ", result, exactLocation);
-		}
-		
-		//ecology
-		result = CdmUtils.concat(", ", result, facade.getEcology());
-		
-		//gathering period
-		//TODO period.toString ??
-		TimePeriod gatheringPeriod = facade.getGatheringPeriod();
-		result = CdmUtils.concat(", ", result, (gatheringPeriod == null? null : gatheringPeriod.toString()));
-		
-		//collector (team) and field number
-		String collectorAndFieldNumber = getCollectorAndFieldNumber(facade);
-		result = CdmUtils.concat(", ", result, collectorAndFieldNumber);
-
-		
-		return result;
-	}
-	
-
-	protected String addPlantDescription(String result, DerivedUnitFacade facade) {
-		
-		//plant description
-		result = CdmUtils.concat("; ", result, facade.getPlantDescription());
-		if (CdmUtils.isNotEmpty(result)){
-			result += ".";
-		}
-		
-		return result;
-	}
-
-
-
-	private String getCollectorAndFieldNumber(DerivedUnitFacade facade) {
-		String result = "";
-		AgentBase<?> collector = facade.getCollector();
-		String fieldNumber = facade.getFieldNumber();
-		Person primaryCollector = facade.getPrimaryCollector();
-		
-		if (collector == null){
-			return fieldNumber;
-		}else if(collector.isProtectedTitleCache()){
-			return  CdmUtils.concat(" ", collector.getTitleCache(), fieldNumber);
-		}else{
-			result = "";
-			Team collectorTeam;
-			if (collector.isInstanceOf(Person.class)){
-				collectorTeam = Team.NewInstance();
-				if (primaryCollector == null){
-					primaryCollector = CdmBase.deproxy(collector, Person.class);
-				}
-				collectorTeam.addTeamMember(primaryCollector);
-			} else if (collector.isInstanceOf(Team.class) && ! collector.isProtectedTitleCache() ){
-				collectorTeam = CdmBase.deproxy(collector, Team.class);
-			}else{
-				return  CdmUtils.concat(" ", collector.getTitleCache(), fieldNumber);
-			}
-			
-			int counter = 0;
-			int teamSize = collectorTeam.getTeamMembers().size();
-			boolean fieldNumberAdded = false;
-			for (Person member : collectorTeam.getTeamMembers()){
-				counter++;
-				String concatString = (counter >= teamSize)? " & " : ", "; 
-				result = CdmUtils.concat(concatString, result, getMemberString(member) );
-				if (member.equals(primaryCollector)){
-					result = addFieldNumber(result, fieldNumber);
-					fieldNumberAdded = true;
-				}
-			}
-			if (! fieldNumberAdded){
-				result = addFieldNumber(result, fieldNumber);
-			}
-			return result;
-		}
-		
-	}
-
-
-
-	private String addFieldNumber(String result, String fieldNumber) {
-		result = CdmUtils.concat(" ", result, fieldNumber);
-		return result;
-	}
-
-
-
-	/**
-	 * Strategy to format a collector team member name
-	 * @param member
-	 * @return
-	 */
-	private String getMemberString(Person member) {
-		if (StringUtils.isNotBlank(member.getLastname()) && ! member.isProtectedTitleCache() ){
-			String result = member.getLastname();
-			if  (StringUtils.isNotBlank(member.getFirstname())){
-				result = member.getFirstname().substring(0,1) + ". " + result;
-			}
-			return result;
-		}else{
-			return member.getTitleCache();
-		}
-	}
-
-
-
-	private boolean testPrimaryCollectorInCollectorTeam(AgentBase collector, Person primaryCollector) {
-		if (collector.isInstanceOf(Person.class)){
-			return collector.equals(primaryCollector);
-		}else if (collector.isInstanceOf(Team.class)){
-			Team collectorTeam = CdmBase.deproxy(collector, Team.class);
-			return collectorTeam.getTeamMembers().contains(primaryCollector);
-		}else{
-			logger.warn("Collector is not of type person or team");
-			return false;
-		}
-	}
-
-
-
-	/**
-	 * @param facade
-	 */
-	private String getCode(DerivedUnitFacade facade) {
-		String code = "";
-		if(facade.getCollection() != null){			
-			code = facade.getCollection().getCode();
-			if (CdmUtils.isEmpty(code)){
-				Institution institution = facade.getCollection().getInstitute();
-				if (institution != null){
-					code = institution.getCode();
-				}
-				if (CdmUtils.isEmpty(code)){
-					Collection superCollection = facade.getCollection().getSuperCollection();
-					if (superCollection != null){
-						code = superCollection.getCode();
-					}
-				}
-			}
-		} 
-		return code;
-	}
-	
-// ************************** GETTER / SETTER ******************************************************
-	
-	public boolean isIncludeSeconds() {
-		return includeEmptySeconds;
-	}
-
-
-
-	public void setIncludeSeconds(boolean includeSeconds) {
-		this.includeEmptySeconds = includeSeconds;
-	}
-
-
-
-	public void setIncludeReferenceSystem(boolean includeReferenceSystem) {
-		this.includeReferenceSystem = includeReferenceSystem;
-	}
-
-
-
-	public boolean isIncludeReferenceSystem() {
-		return includeReferenceSystem;
-	}
-
-	
-}
diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldUnitCacheStrategy.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldUnitCacheStrategy.java
new file mode 100644
index 0000000000..0de1c4ffae
--- /dev/null
+++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldUnitCacheStrategy.java
@@ -0,0 +1,269 @@
+// $Id$
+/**
+* Copyright (C) 2009 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.api.facade;
+
+import java.util.UUID;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.model.agent.AgentBase;
+import eu.etaxonomy.cdm.model.agent.Institution;
+import eu.etaxonomy.cdm.model.agent.Person;
+import eu.etaxonomy.cdm.model.agent.Team;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.Representation;
+import eu.etaxonomy.cdm.model.common.TimePeriod;
+import eu.etaxonomy.cdm.model.location.NamedArea;
+import eu.etaxonomy.cdm.model.occurrence.Collection;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
+import eu.etaxonomy.cdm.strategy.StrategyBase;
+import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
+
+/**
+ * @author a.mueller
+ * @date 03.06.2010
+ *
+ */
+public class DerivedUnitFacadeFieldUnitCacheStrategy extends StrategyBase implements IIdentifiableEntityCacheStrategy<FieldUnit> {
+	private static final long serialVersionUID = 1578628591216605619L;
+	private static final Logger logger = Logger.getLogger(DerivedUnitFacadeFieldUnitCacheStrategy.class);
+
+	private static final UUID uuid = UUID.fromString("df4672c1-ce5c-4724-af6d-91e2b326d4a4");
+	
+	/* (non-Javadoc)
+	 * @see eu.etaxonomy.cdm.strategy.StrategyBase#getUuid()
+	 */
+	@Override
+	protected UUID getUuid() {
+		return uuid;
+	}
+
+	private boolean includeEmptySeconds = false;
+	private boolean includeReferenceSystem = true;
+	
+
+	/* (non-Javadoc)
+	 * @see eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy#getTitleCache(eu.etaxonomy.cdm.model.common.IdentifiableEntity)
+	 */
+	@Override
+	public String getTitleCache(FieldUnit fieldUnit) {
+		DerivedUnitFacade facade;
+		String result = "";
+		DerivedUnitFacadeConfigurator config = DerivedUnitFacadeConfigurator.NewInstance();
+		config.setFirePropertyChangeEvents(false);
+		facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, fieldUnit, config);
+		result = getFieldData(facade);	
+		result = addPlantDescription(result, facade);
+		facade.close();
+		return result;
+	}
+	
+
+	protected String getFieldData(DerivedUnitFacade facade) {
+		String ALTITUDE_PREFIX = "alt. ";
+		String ALTITUDE_POSTFIX = " m";
+		
+		String result = "";
+		
+			
+		//country
+		String strCountry = null;
+		NamedArea country = facade.getCountry();
+		Representation repCountry = country == null ? null : country.getRepresentation(Language.DEFAULT());
+		//TODO currently the label is the 3 digit representation of the country and text is the full text.
+		//this is against the common way of handling text, label and labelabbrev in defined terms
+		strCountry = repCountry == null ? null: repCountry.getText();
+		result = CdmUtils.concat(", ", result, strCountry);
+		
+		//locality
+		result = CdmUtils.concat(", ", result, facade.getLocalityText());
+		
+		//elevation
+		if (StringUtils.isNotBlank(facade.absoluteElevationToString())){
+			result = CdmUtils.concat(", " , result, ALTITUDE_PREFIX);
+			result += facade.absoluteElevationToString() + ALTITUDE_POSTFIX;
+		}
+		
+		//exact locality
+		if (facade.getExactLocation() != null){
+			String exactLocation = facade.getExactLocation().toSexagesimalString(this.includeEmptySeconds, this.includeReferenceSystem);
+			result = CdmUtils.concat(", ", result, exactLocation);
+		}
+		
+		//ecology
+		result = CdmUtils.concat(", ", result, facade.getEcology());
+		
+		//gathering period
+		//TODO period.toString ??
+		TimePeriod gatheringPeriod = facade.getGatheringPeriod();
+		result = CdmUtils.concat(", ", result, (gatheringPeriod == null? null : gatheringPeriod.toString()));
+		
+		//collector (team) and field number
+		String collectorAndFieldNumber = getCollectorAndFieldNumber(facade);
+		result = CdmUtils.concat(", ", result, collectorAndFieldNumber);
+
+		
+		return result;
+	}
+	
+
+	protected String addPlantDescription(String result, DerivedUnitFacade facade) {
+		
+		//plant description
+		result = CdmUtils.concat("; ", result, facade.getPlantDescription());
+		if (CdmUtils.isNotEmpty(result)){
+			result += ".";
+		}
+		
+		return result;
+	}
+
+
+
+	private String getCollectorAndFieldNumber(DerivedUnitFacade facade) {
+		String result = "";
+		AgentBase<?> collector = facade.getCollector();
+		String fieldNumber = facade.getFieldNumber();
+		Person primaryCollector = facade.getPrimaryCollector();
+		
+		if (collector == null){
+			return fieldNumber;
+		}else if(collector.isProtectedTitleCache()){
+			return  CdmUtils.concat(" ", collector.getTitleCache(), fieldNumber);
+		}else{
+			result = "";
+			Team collectorTeam;
+			if (collector.isInstanceOf(Person.class)){
+				collectorTeam = Team.NewInstance();
+				if (primaryCollector == null){
+					primaryCollector = CdmBase.deproxy(collector, Person.class);
+				}
+				collectorTeam.addTeamMember(primaryCollector);
+			} else if (collector.isInstanceOf(Team.class) && ! collector.isProtectedTitleCache() ){
+				collectorTeam = CdmBase.deproxy(collector, Team.class);
+			}else{
+				return  CdmUtils.concat(" ", collector.getTitleCache(), fieldNumber);
+			}
+			
+			int counter = 0;
+			int teamSize = collectorTeam.getTeamMembers().size();
+			boolean fieldNumberAdded = false;
+			for (Person member : collectorTeam.getTeamMembers()){
+				counter++;
+				String concatString = (counter >= teamSize)? " & " : ", "; 
+				result = CdmUtils.concat(concatString, result, getMemberString(member) );
+				if (member.equals(primaryCollector)){
+					result = addFieldNumber(result, fieldNumber);
+					fieldNumberAdded = true;
+				}
+			}
+			if (! fieldNumberAdded){
+				result = addFieldNumber(result, fieldNumber);
+			}
+			return result;
+		}
+		
+	}
+
+
+
+	private String addFieldNumber(String result, String fieldNumber) {
+		result = CdmUtils.concat(" ", result, fieldNumber);
+		return result;
+	}
+
+
+
+	/**
+	 * Strategy to format a collector team member name
+	 * @param member
+	 * @return
+	 */
+	private String getMemberString(Person member) {
+		if (StringUtils.isNotBlank(member.getLastname()) && ! member.isProtectedTitleCache() ){
+			String result = member.getLastname();
+			if  (StringUtils.isNotBlank(member.getFirstname())){
+				result = member.getFirstname().substring(0,1) + ". " + result;
+			}
+			return result;
+		}else{
+			return member.getTitleCache();
+		}
+	}
+
+
+
+	private boolean testPrimaryCollectorInCollectorTeam(AgentBase collector, Person primaryCollector) {
+		if (collector.isInstanceOf(Person.class)){
+			return collector.equals(primaryCollector);
+		}else if (collector.isInstanceOf(Team.class)){
+			Team collectorTeam = CdmBase.deproxy(collector, Team.class);
+			return collectorTeam.getTeamMembers().contains(primaryCollector);
+		}else{
+			logger.warn("Collector is not of type person or team");
+			return false;
+		}
+	}
+
+
+
+	/**
+	 * @param facade
+	 */
+	private String getCode(DerivedUnitFacade facade) {
+		String code = "";
+		if(facade.getCollection() != null){			
+			code = facade.getCollection().getCode();
+			if (CdmUtils.isEmpty(code)){
+				Institution institution = facade.getCollection().getInstitute();
+				if (institution != null){
+					code = institution.getCode();
+				}
+				if (CdmUtils.isEmpty(code)){
+					Collection superCollection = facade.getCollection().getSuperCollection();
+					if (superCollection != null){
+						code = superCollection.getCode();
+					}
+				}
+			}
+		} 
+		return code;
+	}
+	
+// ************************** GETTER / SETTER ******************************************************
+	
+	public boolean isIncludeSeconds() {
+		return includeEmptySeconds;
+	}
+
+
+
+	public void setIncludeSeconds(boolean includeSeconds) {
+		this.includeEmptySeconds = includeSeconds;
+	}
+
+
+
+	public void setIncludeReferenceSystem(boolean includeReferenceSystem) {
+		this.includeReferenceSystem = includeReferenceSystem;
+	}
+
+
+
+	public boolean isIncludeReferenceSystem() {
+		return includeReferenceSystem;
+	}
+
+	
+}
diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IOccurrenceService.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IOccurrenceService.java
index 55cd5244b3..47459cce5a 100644
--- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IOccurrenceService.java
+++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IOccurrenceService.java
@@ -35,7 +35,7 @@ import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
@@ -136,7 +136,7 @@ public interface IOccurrenceService extends IIdentifiableEntityService<SpecimenO
     @Override
     public Pager<SpecimenOrObservationBase> search(Class<? extends SpecimenOrObservationBase> clazz, String query, Integer pageSize,Integer pageNumber, List<OrderHint> orderHints,List<String> propertyPaths);
 
-    public List<UuidAndTitleCache<FieldObservation>> getFieldObservationUuidAndTitleCache();
+    public List<UuidAndTitleCache<FieldUnit>> getFieldUnitUuidAndTitleCache();
 
     public List<UuidAndTitleCache<DerivedUnit>> getDerivedUnitUuidAndTitleCache();
 
diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java
index 0fa127a25b..870b6ffc34 100644
--- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java
+++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java
@@ -56,7 +56,7 @@ import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
@@ -199,8 +199,8 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
     }
 
     @Override
-    public List<UuidAndTitleCache<FieldObservation>> getFieldObservationUuidAndTitleCache() {
-        return dao.getFieldObservationUuidAndTitleCache();
+    public List<UuidAndTitleCache<FieldUnit>> getFieldUnitUuidAndTitleCache() {
+        return dao.getFieldUnitUuidAndTitleCache();
     }
 
     /* (non-Javadoc)
@@ -338,7 +338,7 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
         BooleanQuery finalQuery = new BooleanQuery();
         BooleanQuery textQuery = new BooleanQuery();
 
-        LuceneSearch luceneSearch = new LuceneSearch(getSession(), FieldObservation.class);
+        LuceneSearch luceneSearch = new LuceneSearch(getSession(), FieldUnit.class);
         QueryFactory queryFactory = new QueryFactory(luceneSearch);
 
         // --- criteria
diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeCacheStrategyTest.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeCacheStrategyTest.java
index 2017fbe121..76db4255a7 100644
--- a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeCacheStrategyTest.java
+++ b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeCacheStrategyTest.java
@@ -32,7 +32,7 @@ import eu.etaxonomy.cdm.model.occurrence.Collection;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
 import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;
@@ -48,7 +48,7 @@ public class DerivedUnitFacadeCacheStrategyTest extends CdmIntegrationTest {
 
 	DerivedUnit specimen;
 	DerivationEvent derivationEvent;
-	FieldObservation fieldObservation;
+	FieldUnit fieldUnit;
 	GatheringEvent gatheringEvent;
 	Integer absoluteElevation = 40;
 	Integer absoluteElevationError = 2;
@@ -87,7 +87,7 @@ public class DerivedUnitFacadeCacheStrategyTest extends CdmIntegrationTest {
 	DerivedUnit collectionSpecimen;
 	GatheringEvent existingGatheringEvent;
 	DerivationEvent firstDerivationEvent;
-	FieldObservation firstFieldObject;
+	FieldUnit firstFieldObject;
 	Media media1 = Media.NewInstance();
 
 
@@ -112,10 +112,10 @@ public class DerivedUnitFacadeCacheStrategyTest extends CdmIntegrationTest {
 
 		derivationEvent = DerivationEvent.NewInstance(DerivationEventType.ACCESSIONING());
 		specimen.setDerivedFrom(derivationEvent);
-		fieldObservation = FieldObservation.NewInstance();
-		fieldObservation.addDerivationEvent(derivationEvent);
+		fieldUnit = FieldUnit.NewInstance();
+		fieldUnit.addDerivationEvent(derivationEvent);
 		gatheringEvent = GatheringEvent.NewInstance();
-		fieldObservation.setGatheringEvent(gatheringEvent);
+		fieldUnit.setGatheringEvent(gatheringEvent);
 		gatheringEvent.setAbsoluteElevation(absoluteElevation);
 //		gatheringEvent.setAbsoluteElevationError(absoluteElevationError);
 		gatheringEvent.setActor(collector);
@@ -129,11 +129,11 @@ public class DerivedUnitFacadeCacheStrategyTest extends CdmIntegrationTest {
 		gatheringEvent.setLocality(locality);
 		gatheringEvent.setCountry(country);
 
-		fieldObservation.setFieldNumber(fieldNumber);
-		fieldObservation.setFieldNotes(fieldNotes);
-		fieldObservation.setIndividualCount(individualCount);
-		fieldObservation.setSex(sex);
-		fieldObservation.setLifeStage(lifeStage);
+		fieldUnit.setFieldNumber(fieldNumber);
+		fieldUnit.setFieldNotes(fieldNotes);
+		fieldUnit.setIndividualCount(individualCount);
+		fieldUnit.setSex(sex);
+		fieldUnit.setLifeStage(lifeStage);
 		primaryCollector = Person.NewTitledInstance("Kilian");
 		collector.addTeamMember(primaryCollector);
 		Person secondCollector = Person.NewInstance();
@@ -142,7 +142,7 @@ public class DerivedUnitFacadeCacheStrategyTest extends CdmIntegrationTest {
 		collector.addTeamMember(secondCollector);
 		Person thirdCollector = Person.NewTitledInstance("Kohlbecker");
 		collector.addTeamMember(thirdCollector);
-		fieldObservation.setPrimaryCollector(primaryCollector);
+		fieldUnit.setPrimaryCollector(primaryCollector);
 
 		specimen.setAccessionNumber(accessionNumber);
 		specimen.setCatalogNumber(catalogNumber);
@@ -156,7 +156,7 @@ public class DerivedUnitFacadeCacheStrategyTest extends CdmIntegrationTest {
 		//existing specimen with 2 derivation events in line
 		collectionSpecimen = DerivedUnit.NewPreservedSpecimenInstance();
 		DerivedUnit middleSpecimen = DerivedUnit.NewPreservedSpecimenInstance();
-		firstFieldObject = FieldObservation.NewInstance();
+		firstFieldObject = FieldUnit.NewInstance();
 
 		//TODO maybe we should define concrete event types here
 		DerivationEvent lastDerivationEvent = DerivationEvent.NewInstance(null);
diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldObservationCacheStrategyTest.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldObservationCacheStrategyTest.java
deleted file mode 100644
index 4935ec7b90..0000000000
--- a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldObservationCacheStrategyTest.java
+++ /dev/null
@@ -1,194 +0,0 @@
-// $Id$
-/**
-* Copyright (C) 2009 EDIT
-* European Distributed Institute of Taxonomy
-* http://www.e-taxonomy.eu
-*
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
-package eu.etaxonomy.cdm.api.facade;
-
-import org.apache.log4j.Logger;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import eu.etaxonomy.cdm.model.agent.Person;
-import eu.etaxonomy.cdm.model.agent.Team;
-import eu.etaxonomy.cdm.model.common.DefinedTerm;
-import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.common.LanguageString;
-import eu.etaxonomy.cdm.model.common.TimePeriod;
-import eu.etaxonomy.cdm.model.location.NamedArea;
-import eu.etaxonomy.cdm.model.location.Point;
-import eu.etaxonomy.cdm.model.location.ReferenceSystem;
-import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;
-import eu.etaxonomy.cdm.model.media.Media;
-import eu.etaxonomy.cdm.model.name.BotanicalName;
-import eu.etaxonomy.cdm.model.name.Rank;
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
-import eu.etaxonomy.cdm.model.occurrence.Collection;
-import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
-import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
-import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
-import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
-import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
-import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;
-
-/**
- * @author a.mueller
- * @date 03.06.2010
- *
- */
-
-public class DerivedUnitFacadeFieldObservationCacheStrategyTest extends CdmIntegrationTest {
-	@SuppressWarnings("unused")
-	private static final Logger logger = Logger.getLogger(DerivedUnitFacadeFieldObservationCacheStrategyTest.class);
-
-	DerivedUnit specimen;
-	DerivationEvent derivationEvent;
-	FieldObservation fieldObservation;
-	GatheringEvent gatheringEvent;
-	Integer absoluteElevation = 40;
-	Integer absoluteElevationError = 2;
-	Team collector = Team.NewInstance();
-	String collectingMethod = "Collection Method";
-	Double distanceToGround = 22.0;
-	Double distanceToSurface = 50.0;
-	ReferenceSystem referenceSystem = ReferenceSystem.WGS84();
-	Point exactLocation = Point.NewInstance(12.3, 10.567, referenceSystem, 22);
-	String gatheringEventDescription = "A nice gathering description";
-	TimePeriod gatheringPeriod = TimePeriod.parseString("03.05.2005");
-	String ecology = "sand dunes";
-	String plantDescription = "flowers blue";
-
-	String fieldNumber = "5678";
-	String fieldNotes = "such a beautiful specimen";
-	Person primaryCollector;
-
-	Integer individualCount = 1;
-	DefinedTerm lifeStage = DefinedTerm.NewStageInstance("A wonderful stage", "stage", "st");
-	DefinedTerm sex = DefinedTerm.NewSexInstance("FemaleMale", "FM", "FM");
-	LanguageString locality = LanguageString.NewInstance("Berlin-Dahlem, E side of Englerallee", Language.DEFAULT());
-	NamedArea country = WaterbodyOrCountry.GERMANY();
-
-	String exsiccatum = "Greuter, Pl. Dahlem. 456";
-	String accessionNumber = "8909756";
-	String catalogNumber = "UU879873590";
-	TaxonNameBase<?,?> taxonName = BotanicalName.NewInstance(Rank.GENUS(), "Abies", null, null, null, null, null, null, null);
-	String collectorsNumber = "234589913A34";
-	Collection collection = Collection.NewInstance();
-
-	PreservationMethod preservationMethod = PreservationMethod.NewInstance("my prservation", null, null);
-
-	DerivedUnitFacade specimenFacade;
-
-	DerivedUnit collectionSpecimen;
-	GatheringEvent existingGatheringEvent;
-	DerivationEvent firstDerivationEvent;
-	FieldObservation firstFieldObject;
-	Media media1 = Media.NewInstance();
-
-
-//****************************** SET UP *****************************************/
-
-	/**
-	 * @throws java.lang.Exception
-	 */
-//	@BeforeClass
-//	public static void setUpBeforeClass() throws Exception {
-		// FIXME maybe this will cause problems in other tests
-		//		new DefaultTermInitializer().initialize();
-		// INDEED !!!! it causes problems thus this is replaced by making this test a  CdmIntegrationTest !!!
-//	}
-
-	/**
-	 * @throws java.lang.Exception
-	 */
-	@Before
-	public void setUp() throws Exception {
-		specimen = DerivedUnit.NewPreservedSpecimenInstance();
-
-		derivationEvent = DerivationEvent.NewInstance(DerivationEventType.ACCESSIONING());
-		specimen.setDerivedFrom(derivationEvent);
-		fieldObservation = FieldObservation.NewInstance();
-		fieldObservation.addDerivationEvent(derivationEvent);
-		gatheringEvent = GatheringEvent.NewInstance();
-		fieldObservation.setGatheringEvent(gatheringEvent);
-		gatheringEvent.setAbsoluteElevation(absoluteElevation);
-//		gatheringEvent.setAbsoluteElevationError(absoluteElevationError);
-		gatheringEvent.setActor(collector);
-		gatheringEvent.setCollectingMethod(collectingMethod);
-		gatheringEvent.setDistanceToGround(distanceToGround);
-		gatheringEvent.setDistanceToWaterSurface(distanceToSurface);
-		gatheringEvent.setExactLocation(exactLocation);
-		gatheringEvent.setDescription(gatheringEventDescription);
-
-		gatheringEvent.setTimeperiod(gatheringPeriod);
-		gatheringEvent.setLocality(locality);
-		gatheringEvent.setCountry(country);
-
-		fieldObservation.setFieldNumber(fieldNumber);
-		fieldObservation.setFieldNotes(fieldNotes);
-		fieldObservation.setIndividualCount(individualCount);
-		fieldObservation.setSex(sex);
-		fieldObservation.setLifeStage(lifeStage);
-		primaryCollector = Person.NewTitledInstance("Kilian");
-		collector.addTeamMember(primaryCollector);
-		Person secondCollector = Person.NewInstance();
-		secondCollector.setFirstname("Andreas");
-		secondCollector.setLastname("Muller");
-		collector.addTeamMember(secondCollector);
-		Person thirdCollector = Person.NewTitledInstance("Kohlbecker");
-		collector.addTeamMember(thirdCollector);
-		fieldObservation.setPrimaryCollector(primaryCollector);
-
-		specimen.setAccessionNumber(accessionNumber);
-		specimen.setCatalogNumber(catalogNumber);
-		specimen.setStoredUnder(taxonName);
-		specimen.setCollection(collection);
-		specimen.setPreservation(preservationMethod);
-		specimen.setExsiccatum(exsiccatum);
-
-		specimenFacade = DerivedUnitFacade.NewInstance(specimen);
-
-		//existing specimen with 2 derivation events in line
-		collectionSpecimen = DerivedUnit.NewPreservedSpecimenInstance();
-		DerivedUnit middleSpecimen = DerivedUnit.NewPreservedSpecimenInstance();
-		firstFieldObject = FieldObservation.NewInstance();
-
-		//TODO maybe we should define concrete event types here
-		DerivationEvent lastDerivationEvent = DerivationEvent.NewInstance(null);
-		DerivationEvent middleDerivationEvent = DerivationEvent.NewInstance(null);
-		firstDerivationEvent = DerivationEvent.NewInstance(null);
-
-		collectionSpecimen.setDerivedFrom(lastDerivationEvent);
-
-		lastDerivationEvent.addOriginal(middleSpecimen);
-		middleSpecimen.setDerivedFrom(firstDerivationEvent);
-		firstDerivationEvent.addOriginal(firstFieldObject);
-		existingGatheringEvent = GatheringEvent.NewInstance();
-		firstFieldObject.setGatheringEvent(existingGatheringEvent);
-
-	}
-	/**
-	 * Test method for {@link eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy#getTitleCache(eu.etaxonomy.cdm.model.occurrence.Specimen)}.
-	 */
-	@Test
-	public void testGetTitleCache() {
-		String correctCache = "Germany, Berlin-Dahlem, E side of Englerallee, alt. 40 m, 10\u00B034'1.2\"N, 12\u00B018'E (WGS84), sand dunes, 3.5.2005, Kilian 5678, A. Muller & Kohlbecker; flowers blue.";
-		specimenFacade.setEcology(ecology);
-		specimenFacade.setPlantDescription(plantDescription);
-		collection.setCode("B");
-		Assert.assertEquals(correctCache, specimenFacade.innerFieldObservation().getTitleCache());
-		
-		String altitudeText = "approx. 40";
-		specimenFacade.setAbsoluteElevationText(altitudeText);
-		correctCache = correctCache.replace("alt. 40 m", "alt. "+ altitudeText + " m");
-		Assert.assertEquals(correctCache, specimenFacade.innerFieldObservation().getTitleCache());
-		
-	}
-
-}
diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldUnitCacheStrategyTest.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldUnitCacheStrategyTest.java
new file mode 100644
index 0000000000..f182e8ce37
--- /dev/null
+++ b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldUnitCacheStrategyTest.java
@@ -0,0 +1,194 @@
+// $Id$
+/**
+* Copyright (C) 2009 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.api.facade;
+
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import eu.etaxonomy.cdm.model.agent.Person;
+import eu.etaxonomy.cdm.model.agent.Team;
+import eu.etaxonomy.cdm.model.common.DefinedTerm;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.LanguageString;
+import eu.etaxonomy.cdm.model.common.TimePeriod;
+import eu.etaxonomy.cdm.model.location.NamedArea;
+import eu.etaxonomy.cdm.model.location.Point;
+import eu.etaxonomy.cdm.model.location.ReferenceSystem;
+import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;
+import eu.etaxonomy.cdm.model.media.Media;
+import eu.etaxonomy.cdm.model.name.BotanicalName;
+import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.model.occurrence.Collection;
+import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
+import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
+import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
+import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
+import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
+import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;
+
+/**
+ * @author a.mueller
+ * @date 03.06.2010
+ *
+ */
+
+public class DerivedUnitFacadeFieldUnitCacheStrategyTest extends CdmIntegrationTest {
+	@SuppressWarnings("unused")
+	private static final Logger logger = Logger.getLogger(DerivedUnitFacadeFieldUnitCacheStrategyTest.class);
+
+	DerivedUnit specimen;
+	DerivationEvent derivationEvent;
+	FieldUnit fieldUnit;
+	GatheringEvent gatheringEvent;
+	Integer absoluteElevation = 40;
+	Integer absoluteElevationError = 2;
+	Team collector = Team.NewInstance();
+	String collectingMethod = "Collection Method";
+	Double distanceToGround = 22.0;
+	Double distanceToSurface = 50.0;
+	ReferenceSystem referenceSystem = ReferenceSystem.WGS84();
+	Point exactLocation = Point.NewInstance(12.3, 10.567, referenceSystem, 22);
+	String gatheringEventDescription = "A nice gathering description";
+	TimePeriod gatheringPeriod = TimePeriod.parseString("03.05.2005");
+	String ecology = "sand dunes";
+	String plantDescription = "flowers blue";
+
+	String fieldNumber = "5678";
+	String fieldNotes = "such a beautiful specimen";
+	Person primaryCollector;
+
+	Integer individualCount = 1;
+	DefinedTerm lifeStage = DefinedTerm.NewStageInstance("A wonderful stage", "stage", "st");
+	DefinedTerm sex = DefinedTerm.NewSexInstance("FemaleMale", "FM", "FM");
+	LanguageString locality = LanguageString.NewInstance("Berlin-Dahlem, E side of Englerallee", Language.DEFAULT());
+	NamedArea country = WaterbodyOrCountry.GERMANY();
+
+	String exsiccatum = "Greuter, Pl. Dahlem. 456";
+	String accessionNumber = "8909756";
+	String catalogNumber = "UU879873590";
+	TaxonNameBase<?,?> taxonName = BotanicalName.NewInstance(Rank.GENUS(), "Abies", null, null, null, null, null, null, null);
+	String collectorsNumber = "234589913A34";
+	Collection collection = Collection.NewInstance();
+
+	PreservationMethod preservationMethod = PreservationMethod.NewInstance("my prservation", null, null);
+
+	DerivedUnitFacade specimenFacade;
+
+	DerivedUnit collectionSpecimen;
+	GatheringEvent existingGatheringEvent;
+	DerivationEvent firstDerivationEvent;
+	FieldUnit firstFieldObject;
+	Media media1 = Media.NewInstance();
+
+
+//****************************** SET UP *****************************************/
+
+	/**
+	 * @throws java.lang.Exception
+	 */
+//	@BeforeClass
+//	public static void setUpBeforeClass() throws Exception {
+		// FIXME maybe this will cause problems in other tests
+		//		new DefaultTermInitializer().initialize();
+		// INDEED !!!! it causes problems thus this is replaced by making this test a  CdmIntegrationTest !!!
+//	}
+
+	/**
+	 * @throws java.lang.Exception
+	 */
+	@Before
+	public void setUp() throws Exception {
+		specimen = DerivedUnit.NewPreservedSpecimenInstance();
+
+		derivationEvent = DerivationEvent.NewInstance(DerivationEventType.ACCESSIONING());
+		specimen.setDerivedFrom(derivationEvent);
+		fieldUnit = FieldUnit.NewInstance();
+		fieldUnit.addDerivationEvent(derivationEvent);
+		gatheringEvent = GatheringEvent.NewInstance();
+		fieldUnit.setGatheringEvent(gatheringEvent);
+		gatheringEvent.setAbsoluteElevation(absoluteElevation);
+//		gatheringEvent.setAbsoluteElevationError(absoluteElevationError);
+		gatheringEvent.setActor(collector);
+		gatheringEvent.setCollectingMethod(collectingMethod);
+		gatheringEvent.setDistanceToGround(distanceToGround);
+		gatheringEvent.setDistanceToWaterSurface(distanceToSurface);
+		gatheringEvent.setExactLocation(exactLocation);
+		gatheringEvent.setDescription(gatheringEventDescription);
+
+		gatheringEvent.setTimeperiod(gatheringPeriod);
+		gatheringEvent.setLocality(locality);
+		gatheringEvent.setCountry(country);
+
+		fieldUnit.setFieldNumber(fieldNumber);
+		fieldUnit.setFieldNotes(fieldNotes);
+		fieldUnit.setIndividualCount(individualCount);
+		fieldUnit.setSex(sex);
+		fieldUnit.setLifeStage(lifeStage);
+		primaryCollector = Person.NewTitledInstance("Kilian");
+		collector.addTeamMember(primaryCollector);
+		Person secondCollector = Person.NewInstance();
+		secondCollector.setFirstname("Andreas");
+		secondCollector.setLastname("Muller");
+		collector.addTeamMember(secondCollector);
+		Person thirdCollector = Person.NewTitledInstance("Kohlbecker");
+		collector.addTeamMember(thirdCollector);
+		fieldUnit.setPrimaryCollector(primaryCollector);
+
+		specimen.setAccessionNumber(accessionNumber);
+		specimen.setCatalogNumber(catalogNumber);
+		specimen.setStoredUnder(taxonName);
+		specimen.setCollection(collection);
+		specimen.setPreservation(preservationMethod);
+		specimen.setExsiccatum(exsiccatum);
+
+		specimenFacade = DerivedUnitFacade.NewInstance(specimen);
+
+		//existing specimen with 2 derivation events in line
+		collectionSpecimen = DerivedUnit.NewPreservedSpecimenInstance();
+		DerivedUnit middleSpecimen = DerivedUnit.NewPreservedSpecimenInstance();
+		firstFieldObject = FieldUnit.NewInstance();
+
+		//TODO maybe we should define concrete event types here
+		DerivationEvent lastDerivationEvent = DerivationEvent.NewInstance(null);
+		DerivationEvent middleDerivationEvent = DerivationEvent.NewInstance(null);
+		firstDerivationEvent = DerivationEvent.NewInstance(null);
+
+		collectionSpecimen.setDerivedFrom(lastDerivationEvent);
+
+		lastDerivationEvent.addOriginal(middleSpecimen);
+		middleSpecimen.setDerivedFrom(firstDerivationEvent);
+		firstDerivationEvent.addOriginal(firstFieldObject);
+		existingGatheringEvent = GatheringEvent.NewInstance();
+		firstFieldObject.setGatheringEvent(existingGatheringEvent);
+
+	}
+	/**
+	 * Test method for {@link eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy#getTitleCache(eu.etaxonomy.cdm.model.occurrence.Specimen)}.
+	 */
+	@Test
+	public void testGetTitleCache() {
+		String correctCache = "Germany, Berlin-Dahlem, E side of Englerallee, alt. 40 m, 10\u00B034'1.2\"N, 12\u00B018'E (WGS84), sand dunes, 3.5.2005, Kilian 5678, A. Muller & Kohlbecker; flowers blue.";
+		specimenFacade.setEcology(ecology);
+		specimenFacade.setPlantDescription(plantDescription);
+		collection.setCode("B");
+		Assert.assertEquals(correctCache, specimenFacade.innerFieldUnit().getTitleCache());
+		
+		String altitudeText = "approx. 40";
+		specimenFacade.setAbsoluteElevationText(altitudeText);
+		correctCache = correctCache.replace("alt. 40 m", "alt. "+ altitudeText + " m");
+		Assert.assertEquals(correctCache, specimenFacade.innerFieldUnit().getTitleCache());
+		
+	}
+
+}
diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.java
index 120653122d..e9dd180974 100644
--- a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.java
+++ b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.java
@@ -56,7 +56,7 @@ import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
-import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
@@ -87,7 +87,7 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
 
     DerivedUnit specimen;
     DerivationEvent derivationEvent;
-    FieldObservation fieldObservation;
+    FieldUnit fieldUnit;
     GatheringEvent gatheringEvent;
     Integer absoluteElevation = 10;
     Integer absoluteElevationMaximum = 14;
@@ -125,7 +125,7 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
     DerivedUnit collectionSpecimen;
     GatheringEvent existingGatheringEvent;
     DerivationEvent firstDerivationEvent;
-    FieldObservation firstFieldObject;
+    FieldUnit firstFieldObject;
     Media media1 = Media.NewInstance();
 
     DerivedUnitFacade emptyFacade;
@@ -145,10 +145,10 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
 
         derivationEvent = DerivationEvent.NewInstance(DerivationEventType.ACCESSIONING());
         specimen.setDerivedFrom(derivationEvent);
-        fieldObservation = FieldObservation.NewInstance();
-        fieldObservation.addDerivationEvent(derivationEvent);
+        fieldUnit = FieldUnit.NewInstance();
+        fieldUnit.addDerivationEvent(derivationEvent);
         gatheringEvent = GatheringEvent.NewInstance();
-        fieldObservation.setGatheringEvent(gatheringEvent);
+        fieldUnit.setGatheringEvent(gatheringEvent);
         gatheringEvent.setAbsoluteElevation(absoluteElevation);
         gatheringEvent.setAbsoluteElevationMax(absoluteElevationMaximum);
         gatheringEvent.setActor(collector);
@@ -163,11 +163,11 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
         gatheringEvent.setTimeperiod(gatheringPeriod);
         gatheringEvent.setLocality(locality);
 
-        fieldObservation.setFieldNumber(fieldNumber);
-        fieldObservation.setFieldNotes(fieldNotes);
-        fieldObservation.setIndividualCount(individualCount);
-        fieldObservation.setSex(sex);
-        fieldObservation.setLifeStage(lifeStage);
+        fieldUnit.setFieldNumber(fieldNumber);
+        fieldUnit.setFieldNotes(fieldNotes);
+        fieldUnit.setIndividualCount(individualCount);
+        fieldUnit.setSex(sex);
+        fieldUnit.setLifeStage(lifeStage);
 
         specimen.setAccessionNumber(accessionNumber);
         specimen.setCatalogNumber(catalogNumber);
@@ -180,7 +180,7 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
         // existing specimen with 2 derivation events in line
         collectionSpecimen = DerivedUnit.NewPreservedSpecimenInstance();
         DerivedUnit middleSpecimen = DerivedUnit.NewPreservedSpecimenInstance();
-        firstFieldObject = FieldObservation.NewInstance();
+        firstFieldObject = FieldUnit.NewInstance();
 
 		//TODO maybe we should define concrete event types here
         DerivationEvent lastDerivationEvent = DerivationEvent.NewInstance();
@@ -217,7 +217,7 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
 
         try {
             SpecimenDescription imageGallery = SpecimenDescription.NewInstance();
-            imageGallery.addDescribedSpecimenOrObservation(facade.innerFieldObservation());
+            imageGallery.addDescribedSpecimenOrObservation(facade.innerFieldUnit());
             imageGallery.setImageGallery(true);
             TextData textData = TextData.NewInstance();
             textData.setFeature(imageFeature);
@@ -362,8 +362,8 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
         // ???
         // Assert.assertNotNull("The derivation event should have been created",
         // specimenFacade.getSpecimen().getDerivedFrom());
-        // Assert.assertNotNull("The field observation should have been created",
-        // specimenFacade.getFieldObservation());
+        // Assert.assertNotNull("The field unit should have been created",
+        // specimenFacade.getFieldUnit());
         // Assert.assertNotNull("The gathering event should have been created",
         // specimenFacade.getGatheringEvent());
     }
@@ -379,8 +379,8 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
                 specimenFacade.innerDerivedUnit());
         Assert.assertSame("Derivation event should be same", derivationEvent,
                 specimenFacade.innerDerivedUnit().getDerivedFrom());
-        Assert.assertSame("Field observation should be same", fieldObservation,
-                specimenFacade.innerFieldObservation());
+        Assert.assertSame("Field unit should be same", fieldUnit,
+                specimenFacade.innerFieldUnit());
         Assert.assertSame("Gathering event should be same", gatheringEvent,
                 specimenFacade.innerGatheringEvent());
 
@@ -393,25 +393,24 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
         try {
             specimenFacade = DerivedUnitFacade.NewInstance(specimen);
             specimenFacade.setDistanceToGround(2.0);
-            FieldObservation specimenFieldObservation = (FieldObservation) specimen
-                    .getDerivedFrom().getOriginals().iterator().next();
+            FieldUnit specimenFieldUnit = (FieldUnit) specimen.getDerivedFrom().getOriginals().iterator().next();
             Assert.assertSame(
                     "Facade gathering event and specimen gathering event should be the same",
                     specimenFacade.innerGatheringEvent(),
-                    specimenFieldObservation.getGatheringEvent());
+                    specimenFieldUnit.getGatheringEvent());
         } catch (DerivedUnitFacadeNotSupportedException e) {
             Assert.fail("An error should not occur in NewInstance()");
         }
     }
 
     @Test
-    public void testNoGatheringEventAndFieldObservation() {
+    public void testNoGatheringEventAndFieldUnit() {
     	DerivedUnit specimen = DerivedUnit.NewPreservedSpecimenInstance();
         DerivedUnitFacade specimenFacade;
         try {
             specimenFacade = DerivedUnitFacade.NewInstance(specimen);
-            Assert.assertNull("No field observation should exists",
-                    specimenFacade.innerFieldObservation());
+            Assert.assertNull("No field unit should exists",
+                    specimenFacade.innerFieldUnit());
         } catch (DerivedUnitFacadeNotSupportedException e) {
             Assert.fail("An error should not occur in NewInstance()");
         }
@@ -454,7 +453,7 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
         Assert.assertEquals("Exactly 1 area must exist", 1, specimenFacade
                 .getCollectingAreas().size());
         Assert.assertSame("Areas should be same", newCollectingArea,
-                specimenFacade.innerFieldObservation().getGatheringEvent()
+                specimenFacade.innerFieldUnit().getGatheringEvent()
                         .getCollectingAreas().iterator().next());
         specimenFacade.addCollectingArea(tdwgArea);
         Assert.assertEquals("Exactly 2 areas must exist", 2, specimenFacade
@@ -634,12 +633,12 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
         // empty facade tests
         Assert.assertNull("Empty facace must not have any gathering values", emptyFacade.getDistanceToWaterSurface());
         emptyFacade.setDistanceToWaterSurface(13.0);
-        Assert.assertNotNull("Field observation must exist if distance to water exists", emptyFacade.getFieldObservation(false));
+        Assert.assertNotNull("Field unit must exist if distance to water exists", emptyFacade.getFieldUnit(false));
         Assert.assertNotNull("Gathering event must exist if distance to water exists", emptyFacade.getGatheringEvent(false));
-        FieldObservation specimenFieldObservation = (FieldObservation) emptyFacade
+        FieldUnit specimenFieldUnit = (FieldUnit) emptyFacade
                 .innerDerivedUnit().getDerivedFrom().getOriginals().iterator().next();
         Assert.assertSame("Gathering event of facade and of specimen must be the same",
-                specimenFieldObservation.getGatheringEvent(), emptyFacade.getGatheringEvent(false));
+                specimenFieldUnit.getGatheringEvent(), emptyFacade.getGatheringEvent(false));
     }
     
     @Test
@@ -745,23 +744,23 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
             IllegalAccessException {
         // this test depends on the current implementation of SpecimenFacade. In
         // future
-        // field observation may not be initialized from the beginning. Than the
+        // field unit may not be initialized from the beginning. Than the
         // following
         // assert should be set to assertNull
         Assert.assertTrue(
                 "field object should not be null (depends on specimen facade initialization !!)",
                 specimenFacade.hasFieldObject());
 
-        Field fieldObservationField = DerivedUnitFacade.class
-                .getDeclaredField("fieldObservation");
-        fieldObservationField.setAccessible(true);
-        fieldObservationField.set(specimenFacade, null);
-        Assert.assertFalse("The field observation should be null now",
+        Field fieldUnitField = DerivedUnitFacade.class
+                .getDeclaredField("fieldUnit");
+        fieldUnitField.setAccessible(true);
+        fieldUnitField.set(specimenFacade, null);
+        Assert.assertFalse("The field unit should be null now",
                 specimenFacade.hasFieldObject());
 
         specimenFacade.setDistanceToGround(33.0);
         Assert.assertTrue(
-                "The field observation should have been created again",
+                "The field unit should have been created again",
                 specimenFacade.hasFieldObject());
     }
 
@@ -1017,15 +1016,15 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
                 emptyFacade.getFieldNumber());
         emptyFacade.setFieldNumber("1256A");
         Assert.assertNotNull(
-                "Field observation must exist if field number exists",
-                emptyFacade.getFieldObservation(false));
-        FieldObservation specimenFieldObservation = (FieldObservation) emptyFacade
+                "Field unit must exist if field number exists",
+                emptyFacade.getFieldUnit(false));
+        FieldUnit specimenFieldUnit = (FieldUnit) emptyFacade
                 .innerDerivedUnit().getDerivedFrom().getOriginals().iterator()
                 .next();
         Assert.assertSame(
-                "Field observation of facade and of specimen must be the same",
-                specimenFieldObservation,
-                emptyFacade.getFieldObservation(false));
+                "Field unit of facade and of specimen must be the same",
+                specimenFieldUnit,
+                emptyFacade.getFieldUnit(false));
         Assert.assertEquals("1256A", emptyFacade.getFieldNumber());
     }
 
@@ -1072,8 +1071,8 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
         Assert.assertNotNull("Gathering event must not be null",
                 specimenFacade.innerGatheringEvent());
         Assert.assertEquals(
-                "Gathering event must be field observations gathering event",
-                specimenFacade.innerFieldObservation().getGatheringEvent(),
+                "Gathering event must be field unit's gathering event",
+                specimenFacade.innerFieldUnit().getGatheringEvent(),
                 specimenFacade.innerGatheringEvent());
     }
 
@@ -1562,13 +1561,13 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
     }
 
     @Test
-    public void testMultipleFieldObservationsNotSupported() {
+    public void testMultipleFieldUnitNotSupported() {
         specimenFacade = null;
-        FieldObservation secondFieldObject = FieldObservation.NewInstance();
+        FieldUnit secondFieldObject = FieldUnit.NewInstance();
         firstDerivationEvent.addOriginal(secondFieldObject);
         try {
             specimenFacade = DerivedUnitFacade.NewInstance(collectionSpecimen);
-            Assert.fail("Multiple field observations for one specimen should no be supported by the facade");
+            Assert.fail("Multiple field units for one specimen should no be supported by the facade");
         } catch (DerivedUnitFacadeNotSupportedException e) {
             // ok
         }
diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/suite/TestsShouldNotFailInSuite_s4.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/suite/TestsShouldNotFailInSuite_s4.java
index ec139810e5..dd38864924 100644
--- a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/suite/TestsShouldNotFailInSuite_s4.java
+++ b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/suite/TestsShouldNotFailInSuite_s4.java
@@ -13,7 +13,7 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategyTest;
-import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeFieldObservationCacheStrategyTest;
+import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeFieldUnitCacheStrategyTest;
 import eu.etaxonomy.cdm.api.service.NameServiceImplTest;
 
 
@@ -23,7 +23,7 @@ import eu.etaxonomy.cdm.api.service.NameServiceImplTest;
 		{
 			DerivedUnitFacadeCacheStrategyTest.class,
 			DerivedUnitFacadeCacheStrategyTest.class,
-			DerivedUnitFacadeFieldObservationCacheStrategyTest.class,
+			DerivedUnitFacadeFieldUnitCacheStrategyTest.class,
 			NameServiceImplTest.class
 		}
 	)
diff --git a/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.testSetFieldObjectImageGallery-result.xml b/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.testSetFieldObjectImageGallery-result.xml
index ebf1458528..2c144f58c1 100644
--- a/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.testSetFieldObjectImageGallery-result.xml
+++ b/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.testSetFieldObjectImageGallery-result.xml
@@ -1,7 +1,7 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <dataset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dataset.xsd">
   <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" RECORDBASIS="1" ID="30" UUID="77af784f-931b-4857-be9a-48ccf31ed3f1" DERIVEDFROM_ID="30" PUBLISH="true"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="FieldObservation" ID="31" FIELDNUMBER="12345" PUBLISH="true"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="FieldUnit" ID="31" FIELDNUMBER="12345" PUBLISH="true"/>
   <SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT ORIGINALS_ID="31" DERIVATIONEVENTS_ID="30"/>
   <DERIVATIONEVENT ID="30"/>
   <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="30" IMAGEGALLERY="true"/>
diff --git a/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.xml b/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.xml
index 0ebdea20fd..13e5fe552e 100644
--- a/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.xml
+++ b/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.xml
@@ -1,7 +1,7 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <dataset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dataset.xsd">
   <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" RECORDBASIS="1"        ID="10" CREATED="2011-02-10 10:50:59.0" UUID="25383fc8-789b-4eff-92d3-a770d0622351" PROTECTEDTITLECACHE="false" PUBLISH="true" TITLECACHE="12345." DERIVEDFROM_ID="10" FIELDNUMBER="[null]"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="FieldObservation" RECORDBASIS="14" 	ID="11" CREATED="2011-02-10 10:50:59.0" UUID="b2e87dd8-8f1b-4f7d-ae2f-9b7eb695bab2" PROTECTEDTITLECACHE="false" PUBLISH="true" TITLECACHE="-title cache generation not implemented-" DERIVEDFROM_ID="[null]" FIELDNUMBER="12345"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="FieldUnit" RECORDBASIS="14" 	ID="11" CREATED="2011-02-10 10:50:59.0" UUID="b2e87dd8-8f1b-4f7d-ae2f-9b7eb695bab2" PROTECTEDTITLECACHE="false" PUBLISH="true" TITLECACHE="-title cache generation not implemented-" DERIVEDFROM_ID="[null]" FIELDNUMBER="12345"/>
 
   <SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT ORIGINALS_ID="11" DERIVATIONEVENTS_ID="10"/>
 
