commit 544878ef4906fcfe7193b23a2368649a9d950977
Author: Patric Plitzner <p.plitzner@bgbm.org>
Date:   Thu Sep 26 13:55:45 2013 +0000

     - DataImportSpecimenEditorInput now call cdmlib-ext to query BioCASE provider and calls cmlib-io to use ABCD-import for converting ABCD into SpecimenOrObservationBase objects
       - implemented TransientCdmRepository an TransientOccurenceService for that

diff --git a/.gitattributes b/.gitattributes
index 90d7d7331..1ac4c77a3 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -118,6 +118,8 @@ eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkedito
 eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/DataImportEditor.java -text
 eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/DataImportEditorLineDisplayStrategy.java -text
 eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/DataImportSpecimenEditorInput.java -text
+eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/TransientCdmRepository.java -text
+eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/TransientOccurenceService.java -text
 eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/wizard/SpecimenSearchWizard.java -text
 eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/wizard/SpecimenSearchWizardPage.java -text
 eu.etaxonomy.taxeditor.bulkeditor/src/test/java/eu/etaxonomy/taxeditor/bulkeditor/Application.java -text
diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/DataImportSpecimenEditorInput.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/DataImportSpecimenEditorInput.java
index 05e2cb1fe..0f7bbcc53 100644
--- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/DataImportSpecimenEditorInput.java
+++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/DataImportSpecimenEditorInput.java
@@ -22,8 +22,10 @@ import org.eclipse.ui.IPersistableElement;
 
 import eu.etaxonomy.cdm.ext.biocase.BioCaseQuery;
 import eu.etaxonomy.cdm.ext.biocase.BioCaseQueryServiceWrapper;
-import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206Import;
+import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
+import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * @author pplitzner
@@ -34,7 +36,6 @@ public class DataImportSpecimenEditorInput implements IEditorInput {
 
     private static Logger logger = Logger.getLogger(DataImportSpecimenEditorInput.class);
 
-    private List<SpecimenOrObservationBase> results;
     private BioCaseQuery query;
 
     /**
@@ -42,6 +43,7 @@ public class DataImportSpecimenEditorInput implements IEditorInput {
      */
     public DataImportSpecimenEditorInput(BioCaseQuery query) {
         this.query = query;
+        this.query.taxonName = "Campanula*";
     }
 
     /* (non-Javadoc)
@@ -98,10 +100,21 @@ public class DataImportSpecimenEditorInput implements IEditorInput {
      * @return the results
      */
     public List<SpecimenOrObservationBase> getResults() {
+        List<SpecimenOrObservationBase> results = null;
         String errorMessage = "Could not execute query " + query;
         try {
             InputStream resultStream = new BioCaseQueryServiceWrapper().query(query);
-            Abcd206Import abcd206Import = new Abcd206Import();
+            Abcd206ImportConfigurator configurator = Abcd206ImportConfigurator.NewInstance(resultStream, null, false);
+            TransientCdmRepository repo = new TransientCdmRepository(CdmStore.getCurrentApplicationConfiguration());
+            configurator.setCdmAppController(repo);
+
+            CdmDefaultImport<Abcd206ImportConfigurator> importer = new CdmDefaultImport<Abcd206ImportConfigurator>();
+            importer.invoke(configurator);
+            results = repo.getUnits();
+//            Abcd206Import abcd206Import = new Abcd206Import();
+//            Abcd206ImportState state = new Abcd206ImportState(configurator);
+//            abcd206Import.invoke(state);
+//            state.countTrees();
         } catch (ClientProtocolException e) {
             logger.error(errorMessage, e);
         } catch (IOException e) {
@@ -109,7 +122,8 @@ public class DataImportSpecimenEditorInput implements IEditorInput {
         } catch (URISyntaxException e) {
             logger.error(errorMessage, e);
         }
-        return new BioCaseQueryServiceWrapper().dummyData();
+//        return new BioCaseQueryServiceWrapper().dummyData();
+        return results;
     }
 
     /* (non-Javadoc)
@@ -145,11 +159,6 @@ public class DataImportSpecimenEditorInput implements IEditorInput {
         } else if (!query.equals(other.query)) {
             return false;
         }
-        if (results == null) {
-            if (other.results != null) {
-                return false;
-            }
-        }
         return true;
     }
 
diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/TransientCdmRepository.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/TransientCdmRepository.java
new file mode 100644
index 000000000..4be8d7286
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/TransientCdmRepository.java
@@ -0,0 +1,384 @@
+// $Id$
+/**
+* Copyright (C) 2013 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.dataimport;
+
+import java.util.List;
+
+import org.springframework.security.access.PermissionEvaluator;
+import org.springframework.security.authentication.ProviderManager;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionStatus;
+
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.service.IAgentService;
+import eu.etaxonomy.cdm.api.service.IClassificationService;
+import eu.etaxonomy.cdm.api.service.ICollectionService;
+import eu.etaxonomy.cdm.api.service.ICommonService;
+import eu.etaxonomy.cdm.api.service.IDatabaseService;
+import eu.etaxonomy.cdm.api.service.IDescriptionService;
+import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
+import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
+import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
+import eu.etaxonomy.cdm.api.service.IGroupService;
+import eu.etaxonomy.cdm.api.service.IIdentificationKeyService;
+import eu.etaxonomy.cdm.api.service.ILocationService;
+import eu.etaxonomy.cdm.api.service.IMediaService;
+import eu.etaxonomy.cdm.api.service.INameService;
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;
+import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
+import eu.etaxonomy.cdm.api.service.IReferenceService;
+import eu.etaxonomy.cdm.api.service.IService;
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.api.service.ITermService;
+import eu.etaxonomy.cdm.api.service.IUserService;
+import eu.etaxonomy.cdm.api.service.IVocabularyService;
+import eu.etaxonomy.cdm.api.service.IWorkingSetService;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+
+/**
+ * @author pplitzner
+ * @date 26.09.2013
+ *
+ */
+public class TransientCdmRepository implements ICdmApplicationConfiguration {
+
+    private ICdmApplicationConfiguration defaultApplicationConfiguration;
+    private TransientOccurenceService occurenceService;
+
+    public List<SpecimenOrObservationBase> getUnits(){
+        return occurenceService.getUnits();
+    }
+
+    /**
+     * @param defaultApplicationConfiguration
+     */
+    public TransientCdmRepository(ICdmApplicationConfiguration defaultApplicationConfiguration) {
+        this.defaultApplicationConfiguration = defaultApplicationConfiguration;
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#NewConversation()
+     */
+    @Override
+    public ConversationHolder NewConversation() {
+        return defaultApplicationConfiguration.NewConversation();
+    }
+
+    /**
+     * @param arg0
+     * @param arg1
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#authenticate(java.lang.String, java.lang.String)
+     */
+    @Override
+    public void authenticate(String arg0, String arg1) {
+        defaultApplicationConfiguration.authenticate(arg0, arg1);
+    }
+
+    /**
+     * @param arg0
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#commitTransaction(org.springframework.transaction.TransactionStatus)
+     */
+    @Override
+    public void commitTransaction(TransactionStatus arg0) {
+        defaultApplicationConfiguration.commitTransaction(arg0);
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getAgentService()
+     */
+    @Override
+    public IAgentService getAgentService() {
+        return defaultApplicationConfiguration.getAgentService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getAuthenticationManager()
+     */
+    @Override
+    public ProviderManager getAuthenticationManager() {
+        return defaultApplicationConfiguration.getAuthenticationManager();
+    }
+
+    /**
+     * @param arg0
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getBean(java.lang.String)
+     */
+    @Override
+    public Object getBean(String arg0) {
+        return defaultApplicationConfiguration.getBean(arg0);
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getClassificationService()
+     */
+    @Override
+    public IClassificationService getClassificationService() {
+        return defaultApplicationConfiguration.getClassificationService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getCollectionService()
+     */
+    @Override
+    public ICollectionService getCollectionService() {
+        return defaultApplicationConfiguration.getCollectionService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getCommonService()
+     */
+    @Override
+    public ICommonService getCommonService() {
+        return defaultApplicationConfiguration.getCommonService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getDatabaseService()
+     */
+    @Override
+    public IDatabaseService getDatabaseService() {
+        return defaultApplicationConfiguration.getDatabaseService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getDescriptionService()
+     */
+    @Override
+    public IDescriptionService getDescriptionService() {
+        return defaultApplicationConfiguration.getDescriptionService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getFeatureNodeService()
+     */
+    @Override
+    public IFeatureNodeService getFeatureNodeService() {
+        return defaultApplicationConfiguration.getFeatureNodeService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getFeatureTreeService()
+     */
+    @Override
+    public IFeatureTreeService getFeatureTreeService() {
+        return defaultApplicationConfiguration.getFeatureTreeService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getGrantedAuthorityService()
+     */
+    @Override
+    public IGrantedAuthorityService getGrantedAuthorityService() {
+        return defaultApplicationConfiguration.getGrantedAuthorityService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getGroupService()
+     */
+    @Override
+    public IGroupService getGroupService() {
+        return defaultApplicationConfiguration.getGroupService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getIdentificationKeyService()
+     */
+    @Override
+    public IIdentificationKeyService getIdentificationKeyService() {
+        return defaultApplicationConfiguration.getIdentificationKeyService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getLocationService()
+     */
+    @Override
+    public ILocationService getLocationService() {
+        return defaultApplicationConfiguration.getLocationService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getMainService()
+     */
+    @Override
+    public IService<CdmBase> getMainService() {
+        return defaultApplicationConfiguration.getMainService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getMediaService()
+     */
+    @Override
+    public IMediaService getMediaService() {
+        return defaultApplicationConfiguration.getMediaService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getNameService()
+     */
+    @Override
+    public INameService getNameService() {
+        return defaultApplicationConfiguration.getNameService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getOccurrenceService()
+     */
+    @Override
+    public IOccurrenceService getOccurrenceService() {
+        if(occurenceService==null){
+            occurenceService = new TransientOccurenceService(defaultApplicationConfiguration.getOccurrenceService());
+        }
+        return occurenceService;
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getPermissionEvaluator()
+     */
+    @Override
+    public PermissionEvaluator getPermissionEvaluator() {
+        return defaultApplicationConfiguration.getPermissionEvaluator();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getPolytomousKeyNodeService()
+     */
+    @Override
+    public IPolytomousKeyNodeService getPolytomousKeyNodeService() {
+        return defaultApplicationConfiguration.getPolytomousKeyNodeService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getPolytomousKeyService()
+     */
+    @Override
+    public IPolytomousKeyService getPolytomousKeyService() {
+        return defaultApplicationConfiguration.getPolytomousKeyService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getReferenceService()
+     */
+    @Override
+    public IReferenceService getReferenceService() {
+        return defaultApplicationConfiguration.getReferenceService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTaxonNodeService()
+     */
+    @Override
+    public ITaxonNodeService getTaxonNodeService() {
+        return defaultApplicationConfiguration.getTaxonNodeService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTaxonService()
+     */
+    @Override
+    public ITaxonService getTaxonService() {
+        return defaultApplicationConfiguration.getTaxonService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTermService()
+     */
+    @Override
+    public ITermService getTermService() {
+        return defaultApplicationConfiguration.getTermService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTransactionManager()
+     */
+    @Override
+    public PlatformTransactionManager getTransactionManager() {
+        return defaultApplicationConfiguration.getTransactionManager();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getUserService()
+     */
+    @Override
+    public IUserService getUserService() {
+        return defaultApplicationConfiguration.getUserService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getVocabularyService()
+     */
+    @Override
+    public IVocabularyService getVocabularyService() {
+        return defaultApplicationConfiguration.getVocabularyService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getWorkingSetService()
+     */
+    @Override
+    public IWorkingSetService getWorkingSetService() {
+        return defaultApplicationConfiguration.getWorkingSetService();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#startTransaction()
+     */
+    @Override
+    public TransactionStatus startTransaction() {
+        return defaultApplicationConfiguration.startTransaction();
+    }
+
+    /**
+     * @param arg0
+     * @return
+     * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#startTransaction(java.lang.Boolean)
+     */
+    @Override
+    public TransactionStatus startTransaction(Boolean arg0) {
+        return defaultApplicationConfiguration.startTransaction(arg0);
+    }
+
+
+
+}
diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/TransientOccurenceService.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/TransientOccurenceService.java
new file mode 100644
index 000000000..214f629ee
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/dataimport/TransientOccurenceService.java
@@ -0,0 +1,854 @@
+// $Id$
+/**
+* Copyright (C) 2013 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.dataimport;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.queryParser.ParseException;
+import org.hibernate.LockMode;
+import org.hibernate.Session;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.envers.query.criteria.AuditCriterion;
+import org.hibernate.search.spatial.impl.Rectangle;
+
+import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
+import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
+import eu.etaxonomy.cdm.api.service.pager.Pager;
+import eu.etaxonomy.cdm.api.service.search.SearchResult;
+import eu.etaxonomy.cdm.api.service.util.TaxonRelationshipEdge;
+import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
+import eu.etaxonomy.cdm.model.common.Annotation;
+import eu.etaxonomy.cdm.model.common.ISourceable;
+import eu.etaxonomy.cdm.model.common.IdentifiableSource;
+import eu.etaxonomy.cdm.model.common.LSID;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.Marker;
+import eu.etaxonomy.cdm.model.common.MarkerType;
+import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
+import eu.etaxonomy.cdm.model.description.DescriptionBase;
+import eu.etaxonomy.cdm.model.location.Country;
+import eu.etaxonomy.cdm.model.media.Media;
+import eu.etaxonomy.cdm.model.media.Rights;
+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.FieldUnit;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.cdm.model.view.AuditEvent;
+import eu.etaxonomy.cdm.model.view.AuditEventRecord;
+import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort;
+import eu.etaxonomy.cdm.persistence.query.Grouping;
+import eu.etaxonomy.cdm.persistence.query.MatchMode;
+import eu.etaxonomy.cdm.persistence.query.OrderHint;
+import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
+import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
+import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
+
+/**
+ * @author pplitzner
+ * @date 26.09.2013
+ *
+ */
+public class TransientOccurenceService implements IOccurrenceService {
+
+    private IOccurrenceService defaultService;
+    private List<SpecimenOrObservationBase> units;
+
+    /**
+     * @param defaultService
+     */
+    public TransientOccurenceService(IOccurrenceService defaultService) {
+        this.defaultService = defaultService;
+        this.units = new ArrayList<SpecimenOrObservationBase>();
+    }
+
+    /**
+     * @param t
+     * @param pageSize
+     * @param pageNumber
+     * @param sort
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IVersionableService#pageAuditEvents(eu.etaxonomy.cdm.model.common.VersionableEntity, java.lang.Integer, java.lang.Integer, eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort, java.util.List)
+     */
+    @Override
+    public Pager<AuditEventRecord<SpecimenOrObservationBase>> pageAuditEvents(SpecimenOrObservationBase t, Integer pageSize, Integer pageNumber, AuditEventSort sort, List<String> propertyPaths) {
+        return defaultService.pageAuditEvents(t, pageSize, pageNumber, sort, propertyPaths);
+    }
+
+    /**
+     * @param annotatedObj
+     * @param status
+     * @param pageSize
+     * @param pageNumber
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#getAnnotations(eu.etaxonomy.cdm.model.common.AnnotatableEntity, eu.etaxonomy.cdm.model.common.MarkerType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public Pager<Annotation> getAnnotations(SpecimenOrObservationBase annotatedObj, MarkerType status, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.getAnnotations(annotatedObj, status, pageSize, pageNumber, orderHints, propertyPaths);
+    }
+
+    /**
+     *
+     * @see eu.etaxonomy.cdm.api.service.IService#clear()
+     */
+    @Override
+    public void clear() {
+        defaultService.clear();
+    }
+
+    /**
+     * @param t
+     * @param lockMode
+     * @see eu.etaxonomy.cdm.api.service.IService#lock(eu.etaxonomy.cdm.model.common.ICdmBase, org.hibernate.LockMode)
+     */
+    @Override
+    public void lock(SpecimenOrObservationBase t, LockMode lockMode) {
+        defaultService.lock(t, lockMode);
+    }
+
+    /**
+     * @param t
+     * @param lockMode
+     * @param propertyPaths
+     * @see eu.etaxonomy.cdm.api.service.IService#refresh(eu.etaxonomy.cdm.model.common.ICdmBase, org.hibernate.LockMode, java.util.List)
+     */
+    @Override
+    public void refresh(SpecimenOrObservationBase t, LockMode lockMode, List<String> propertyPaths) {
+        defaultService.refresh(t, lockMode, propertyPaths);
+    }
+
+    /**
+     *
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache()
+     */
+    @Override
+    public void updateTitleCache() {
+        defaultService.updateTitleCache();
+    }
+
+    /**
+     * @param t
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IVersionableService#getNextAuditEvent(eu.etaxonomy.cdm.model.common.VersionableEntity)
+     */
+    @Override
+    public AuditEventRecord<SpecimenOrObservationBase> getNextAuditEvent(SpecimenOrObservationBase t) {
+        return defaultService.getNextAuditEvent(t);
+    }
+
+    /**
+     * @param annotatableEntity
+     * @param technical
+     * @param pageSize
+     * @param pageNumber
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#getMarkers(eu.etaxonomy.cdm.model.common.AnnotatableEntity, java.lang.Boolean, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public Pager<Marker> getMarkers(SpecimenOrObservationBase annotatableEntity, Boolean technical, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.getMarkers(annotatableEntity, technical, pageSize, pageNumber, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param clazz
+     * @param stepSize
+     * @param cacheStrategy
+     * @param monitor
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache(java.lang.Class, java.lang.Integer, eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy, eu.etaxonomy.cdm.common.monitor.IProgressMonitor)
+     */
+    @Override
+    public void updateTitleCache(Class<? extends SpecimenOrObservationBase> clazz, Integer stepSize, IIdentifiableEntityCacheStrategy<SpecimenOrObservationBase> cacheStrategy, IProgressMonitor monitor) {
+        defaultService.updateTitleCache(clazz, stepSize, cacheStrategy, monitor);
+    }
+
+    /**
+     * @param t
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IVersionableService#getPreviousAuditEvent(eu.etaxonomy.cdm.model.common.VersionableEntity)
+     */
+    @Override
+    public AuditEventRecord<SpecimenOrObservationBase> getPreviousAuditEvent(SpecimenOrObservationBase t) {
+        return defaultService.getPreviousAuditEvent(t);
+    }
+
+    /**
+     * @param iso639
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getCountryByIso(java.lang.String)
+     */
+    @Override
+    public Country getCountryByIso(String iso639) {
+        return defaultService.getCountryByIso(iso639);
+    }
+
+    /**
+     * @param clazz
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#count(java.lang.Class)
+     */
+    @Override
+    public int count(Class<? extends SpecimenOrObservationBase> clazz) {
+        return defaultService.count(clazz);
+    }
+
+    /**
+     * @param name
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getCountryByName(java.lang.String)
+     */
+    @Override
+    public List<Country> getCountryByName(String name) {
+        return defaultService.getCountryByName(name);
+    }
+
+    /**
+     * @param type
+     * @param determinedAs
+     * @param limit
+     * @param start
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#list(java.lang.Class, eu.etaxonomy.cdm.model.taxon.TaxonBase, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public Pager<SpecimenOrObservationBase> list(Class<? extends SpecimenOrObservationBase> type, TaxonBase determinedAs, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.list(type, determinedAs, limit, start, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param clazz
+     * @param from
+     * @param to
+     * @param criteria
+     * @param pageSize
+     * @param pageValue
+     * @param sort
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IVersionableService#pageAuditEvents(java.lang.Class, eu.etaxonomy.cdm.model.view.AuditEvent, eu.etaxonomy.cdm.model.view.AuditEvent, java.util.List, java.lang.Integer, java.lang.Integer, eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort, java.util.List)
+     */
+    @Override
+    public Pager<AuditEventRecord<SpecimenOrObservationBase>> pageAuditEvents(Class<? extends SpecimenOrObservationBase> clazz, AuditEvent from, AuditEvent to, List<AuditCriterion> criteria, Integer pageSize, Integer pageValue, AuditEventSort sort, List<String> propertyPaths) {
+        return defaultService.pageAuditEvents(clazz, from, to, criteria, pageSize, pageValue, sort, propertyPaths);
+    }
+
+    /**
+     * @param lsid
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#find(eu.etaxonomy.cdm.model.common.LSID)
+     */
+    @Override
+    public SpecimenOrObservationBase find(LSID lsid) {
+        return defaultService.find(lsid);
+    }
+
+    /**
+     * @param persistentObject
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#delete(eu.etaxonomy.cdm.model.common.ICdmBase)
+     */
+    @Override
+    public UUID delete(SpecimenOrObservationBase persistentObject) {
+        return defaultService.delete(persistentObject);
+    }
+
+    /**
+     * @param clazz
+     * @param technical
+     * @param pageSize
+     * @param pageNumber
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#groupMarkers(java.lang.Class, java.lang.Boolean, java.lang.Integer, java.lang.Integer, java.util.List)
+     */
+    @Override
+    public List<Object[]> groupMarkers(Class<? extends SpecimenOrObservationBase> clazz, Boolean technical, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
+        return defaultService.groupMarkers(clazz, technical, pageSize, pageNumber, propertyPaths);
+    }
+
+    /**
+     * @param uuid
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#exists(java.util.UUID)
+     */
+    @Override
+    public boolean exists(UUID uuid) {
+        return defaultService.exists(uuid);
+    }
+
+    /**
+     * @param x
+     * @param y
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#replace(eu.etaxonomy.cdm.model.common.IdentifiableEntity, eu.etaxonomy.cdm.model.common.IdentifiableEntity)
+     */
+    @Override
+    public SpecimenOrObservationBase replace(SpecimenOrObservationBase x, SpecimenOrObservationBase y) {
+        return defaultService.replace(x, y);
+    }
+
+    /**
+     * @param uuidSet
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#find(java.util.Set)
+     */
+    @Override
+    public List<SpecimenOrObservationBase> find(Set<UUID> uuidSet) {
+        return defaultService.find(uuidSet);
+    }
+
+    /**
+     * @param t
+     * @param pageSize
+     * @param pageNumber
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getSources(eu.etaxonomy.cdm.model.common.IdentifiableEntity, java.lang.Integer, java.lang.Integer, java.util.List)
+     */
+    @Override
+    public Pager<IdentifiableSource> getSources(SpecimenOrObservationBase t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
+        return defaultService.getSources(t, pageSize, pageNumber, propertyPaths);
+    }
+
+    /**
+     * @param uuid
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#find(java.util.UUID)
+     */
+    @Override
+    public SpecimenOrObservationBase find(UUID uuid) {
+        return defaultService.find(uuid);
+    }
+
+    /**
+     * @param id
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#find(int)
+     */
+    @Override
+    public SpecimenOrObservationBase find(int id) {
+        return defaultService.find(id);
+    }
+
+    /**
+     * @param t
+     * @param pageSize
+     * @param pageNumber
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getRights(eu.etaxonomy.cdm.model.common.IdentifiableEntity, java.lang.Integer, java.lang.Integer, java.util.List)
+     */
+    @Override
+    public Pager<Rights> getRights(SpecimenOrObservationBase t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
+        return defaultService.getRights(t, pageSize, pageNumber, propertyPaths);
+    }
+
+    /**
+     * @param clazz
+     * @param technical
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#countMarkers(java.lang.Class, java.lang.Boolean)
+     */
+    @Override
+    public int countMarkers(Class<? extends SpecimenOrObservationBase> clazz, Boolean technical) {
+        return defaultService.countMarkers(clazz, technical);
+    }
+
+    /**
+     * @param occurence
+     * @param pageSize
+     * @param pageNumber
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getMedia(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, java.lang.Integer, java.lang.Integer, java.util.List)
+     */
+    @Override
+    public Pager<Media> getMedia(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
+        return defaultService.getMedia(occurence, pageSize, pageNumber, propertyPaths);
+    }
+
+    /**
+     * @param idSet
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#findById(java.util.Set)
+     */
+    @Override
+    public List<SpecimenOrObservationBase> findById(Set<Integer> idSet) {
+        return defaultService.findById(idSet);
+    }
+
+    /**
+     * @param clazz
+     * @param idInSource
+     * @param idNamespace
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getSourcedObjectByIdInSource(java.lang.Class, java.lang.String, java.lang.String)
+     */
+    @Override
+    public ISourceable getSourcedObjectByIdInSource(Class clazz, String idInSource, String idNamespace) {
+        return defaultService.getSourcedObjectByIdInSource(clazz, idInSource, idNamespace);
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#getSession()
+     */
+    @Override
+    public Session getSession() {
+        return defaultService.getSession();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getUuidAndTitleCache()
+     */
+    @Override
+    public List<UuidAndTitleCache<SpecimenOrObservationBase>> getUuidAndTitleCache() {
+        return defaultService.getUuidAndTitleCache();
+    }
+
+    /**
+     * @param clazz
+     * @param limit
+     * @param start
+     * @param groups
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#group(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public List<Object[]> group(Class<? extends SpecimenOrObservationBase> clazz, Integer limit, Integer start, List<Grouping> groups, List<String> propertyPaths) {
+        return defaultService.group(clazz, limit, start, groups, propertyPaths);
+    }
+
+    /**
+     * @param occurence
+     * @param taxonBase
+     * @param pageSize
+     * @param pageNumber
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getDeterminations(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.model.taxon.TaxonBase, java.lang.Integer, java.lang.Integer, java.util.List)
+     */
+    @Override
+    public Pager<DeterminationEvent> getDeterminations(SpecimenOrObservationBase occurence, TaxonBase taxonBase, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
+        return defaultService.getDeterminations(occurence, taxonBase, pageSize, pageNumber, propertyPaths);
+    }
+
+    /**
+     * @param clazz
+     * @param queryString
+     * @param matchmode
+     * @param criteria
+     * @param pageSize
+     * @param pageNumber
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#findByTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public Pager<SpecimenOrObservationBase> findByTitle(Class<? extends SpecimenOrObservationBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.findByTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param occurence
+     * @param pageSize
+     * @param pageNumber
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getDerivationEvents(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, java.lang.Integer, java.lang.Integer, java.util.List)
+     */
+    @Override
+    public Pager<DerivationEvent> getDerivationEvents(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
+        return defaultService.getDerivationEvents(occurence, pageSize, pageNumber, propertyPaths);
+    }
+
+    /**
+     * @param type
+     * @param limit
+     * @param start
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#list(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public List<SpecimenOrObservationBase> list(Class<? extends SpecimenOrObservationBase> type, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.list(type, limit, start, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param clazz
+     * @param query
+     * @param pageSize
+     * @param pageNumber
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#search(java.lang.Class, java.lang.String, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public Pager<SpecimenOrObservationBase> search(Class<? extends SpecimenOrObservationBase> clazz, String query, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.search(clazz, query, pageSize, pageNumber, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param configurator
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#findByTitle(eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator)
+     */
+    @Override
+    public Pager<SpecimenOrObservationBase> findByTitle(IIdentifiableEntityServiceConfigurator<SpecimenOrObservationBase> configurator) {
+        return defaultService.findByTitle(configurator);
+    }
+
+    /**
+     * @param clazz
+     * @param queryString
+     * @param matchmode
+     * @param criteria
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#countByTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List)
+     */
+    @Override
+    public Integer countByTitle(Class<? extends SpecimenOrObservationBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria) {
+        return defaultService.countByTitle(clazz, queryString, matchmode, criteria);
+    }
+
+    /**
+     * @param uuid
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#load(java.util.UUID)
+     */
+    @Override
+    public SpecimenOrObservationBase load(UUID uuid) {
+        return defaultService.load(uuid);
+    }
+
+    /**
+     * @param uuid
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#load(java.util.UUID, java.util.List)
+     */
+    @Override
+    public SpecimenOrObservationBase load(UUID uuid, List<String> propertyPaths) {
+        return defaultService.load(uuid, propertyPaths);
+    }
+
+    /**
+     * @param configurator
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#countByTitle(eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator)
+     */
+    @Override
+    public Integer countByTitle(IIdentifiableEntityServiceConfigurator<SpecimenOrObservationBase> configurator) {
+        return defaultService.countByTitle(configurator);
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getFieldUnitUuidAndTitleCache()
+     */
+    @Override
+    public List<UuidAndTitleCache<FieldUnit>> getFieldUnitUuidAndTitleCache() {
+        return defaultService.getFieldUnitUuidAndTitleCache();
+    }
+
+    /**
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getDerivedUnitUuidAndTitleCache()
+     */
+    @Override
+    public List<UuidAndTitleCache<DerivedUnit>> getDerivedUnitUuidAndTitleCache() {
+        return defaultService.getDerivedUnitUuidAndTitleCache();
+    }
+
+    /**
+     * @param transientObject
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#merge(eu.etaxonomy.cdm.model.common.ICdmBase)
+     */
+    @Override
+    public SpecimenOrObservationBase merge(SpecimenOrObservationBase transientObject) {
+        return defaultService.merge(transientObject);
+    }
+
+    /**
+     * @param derivedUnit
+     * @param propertyPaths
+     * @return
+     * @throws DerivedUnitFacadeNotSupportedException
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getDerivedUnitFacade(eu.etaxonomy.cdm.model.occurrence.DerivedUnit, java.util.List)
+     */
+    @Override
+    public DerivedUnitFacade getDerivedUnitFacade(DerivedUnit derivedUnit, List<String> propertyPaths) throws DerivedUnitFacadeNotSupportedException {
+        return defaultService.getDerivedUnitFacade(derivedUnit, propertyPaths);
+    }
+
+    /**
+     * @param clazz
+     * @param queryString
+     * @param matchmode
+     * @param criteria
+     * @param pageSize
+     * @param pageNumber
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#listByTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public List<SpecimenOrObservationBase> listByTitle(Class<? extends SpecimenOrObservationBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.listByTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param description
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#listDerivedUnitFacades(eu.etaxonomy.cdm.model.description.DescriptionBase, java.util.List)
+     */
+    @Override
+    public List<DerivedUnitFacade> listDerivedUnitFacades(DescriptionBase description, List<String> propertyPaths) {
+        return defaultService.listDerivedUnitFacades(description, propertyPaths);
+    }
+
+    /**
+     * @param type
+     * @param pageSize
+     * @param pageNumber
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#page(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public Pager<SpecimenOrObservationBase> page(Class<? extends SpecimenOrObservationBase> type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.page(type, pageSize, pageNumber, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param type
+     * @param includeRelationships
+     * @param associatedTaxon
+     * @param maxDepth
+     * @param pageSize
+     * @param pageNumber
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#listByAssociatedTaxon(java.lang.Class, java.util.Set, eu.etaxonomy.cdm.model.taxon.Taxon, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public <T extends SpecimenOrObservationBase> List<T> listByAssociatedTaxon(Class<T> type, Set<TaxonRelationshipEdge> includeRelationships, Taxon associatedTaxon, Integer maxDepth, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.listByAssociatedTaxon(type, includeRelationships, associatedTaxon, maxDepth, pageSize, pageNumber, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param persistentObject
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#refresh(eu.etaxonomy.cdm.model.common.ICdmBase)
+     */
+    @Override
+    public UUID refresh(SpecimenOrObservationBase persistentObject) {
+        return defaultService.refresh(persistentObject);
+    }
+
+    /**
+     * @param clazz
+     * @param queryString
+     * @param matchmode
+     * @param criteria
+     * @param pageSize
+     * @param pageNumber
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#listByReferenceTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public List<SpecimenOrObservationBase> listByReferenceTitle(Class<? extends SpecimenOrObservationBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.listByReferenceTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param tableName
+     * @param limit
+     * @param start
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#rows(java.lang.String, int, int)
+     */
+    @Override
+    public List<SpecimenOrObservationBase> rows(String tableName, int limit, int start) {
+        return defaultService.rows(tableName, limit, start);
+    }
+
+    /**
+     * @param newInstances
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#save(java.util.Collection)
+     */
+    @Override
+    public Map<UUID, SpecimenOrObservationBase> save(Collection<SpecimenOrObservationBase> newInstances) {
+        return defaultService.save(newInstances);
+    }
+
+    /**
+     * @param type
+     * @param includeRelationships
+     * @param associatedTaxon
+     * @param maxDepth
+     * @param pageSize
+     * @param pageNumber
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#pageByAssociatedTaxon(java.lang.Class, java.util.Set, eu.etaxonomy.cdm.model.taxon.Taxon, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public <T extends SpecimenOrObservationBase> Pager<T> pageByAssociatedTaxon(Class<T> type, Set<TaxonRelationshipEdge> includeRelationships, Taxon associatedTaxon, Integer maxDepth, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.pageByAssociatedTaxon(type, includeRelationships, associatedTaxon, maxDepth, pageSize, pageNumber, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param newInstance
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#save(eu.etaxonomy.cdm.model.common.ICdmBase)
+     */
+    @Override
+    public UUID save(SpecimenOrObservationBase newInstance) {
+        units.add(newInstance);
+        return null;
+    }
+
+    /**
+     * @param transientObject
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#saveOrUpdate(eu.etaxonomy.cdm.model.common.ICdmBase)
+     */
+    @Override
+    public UUID saveOrUpdate(SpecimenOrObservationBase transientObject) {
+        units.add(transientObject);
+        System.out.println(transientObject.getTitleCache());
+        return null;
+    }
+
+    /**
+     * @param transientObjects
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#saveOrUpdate(java.util.Collection)
+     */
+    @Override
+    public Map<UUID, SpecimenOrObservationBase> saveOrUpdate(Collection<SpecimenOrObservationBase> transientObjects) {
+        return defaultService.saveOrUpdate(transientObjects);
+    }
+
+    /**
+     * @param clazz
+     * @param queryString
+     * @param boundingBox
+     * @param languages
+     * @param highlightFragments
+     * @param pageSize
+     * @param pageNumber
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @throws CorruptIndexException
+     * @throws IOException
+     * @throws ParseException
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#findByFullText(java.lang.Class, java.lang.String, org.hibernate.search.spatial.impl.Rectangle, java.util.List, boolean, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public Pager<SearchResult<SpecimenOrObservationBase>> findByFullText(Class<? extends SpecimenOrObservationBase> clazz, String queryString, Rectangle boundingBox, List<Language> languages, boolean highlightFragments, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws CorruptIndexException, IOException, ParseException {
+        return defaultService.findByFullText(clazz, queryString, boundingBox, languages, highlightFragments, pageSize, pageNumber, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param transientObject
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#update(eu.etaxonomy.cdm.model.common.ICdmBase)
+     */
+    @Override
+    public UUID update(SpecimenOrObservationBase transientObject) {
+        return defaultService.update(transientObject);
+    }
+
+    /**
+     * @param example
+     * @param includeProperties
+     * @param limit
+     * @param start
+     * @param orderHints
+     * @param propertyPaths
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IService#list(eu.etaxonomy.cdm.model.common.ICdmBase, java.util.Set, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
+     */
+    @Override
+    public List<SpecimenOrObservationBase> list(SpecimenOrObservationBase example, Set<String> includeProperties, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
+        return defaultService.list(example, includeProperties, limit, start, orderHints, propertyPaths);
+    }
+
+    /**
+     * @param clazz
+     * @param matchStrategy
+     * @param mergeStrategy
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#deduplicate(java.lang.Class, eu.etaxonomy.cdm.strategy.match.IMatchStrategy, eu.etaxonomy.cdm.strategy.merge.IMergeStrategy)
+     */
+    @Override
+    public int deduplicate(Class<? extends SpecimenOrObservationBase> clazz, IMatchStrategy matchStrategy, IMergeStrategy mergeStrategy) {
+        return defaultService.deduplicate(clazz, matchStrategy, mergeStrategy);
+    }
+
+    /**
+     * @param clazz
+     * @param queryString
+     * @param pageSize
+     * @param pageNumber
+     * @param orderHints
+     * @param matchMode
+     * @return
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#findTitleCache(java.lang.Class, java.lang.String, java.lang.Integer, java.lang.Integer, java.util.List, eu.etaxonomy.cdm.persistence.query.MatchMode)
+     */
+    @Override
+    public Pager<SpecimenOrObservationBase> findTitleCache(Class<? extends SpecimenOrObservationBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, MatchMode matchMode) {
+        return defaultService.findTitleCache(clazz, queryString, pageSize, pageNumber, orderHints, matchMode);
+    }
+
+    /**
+     * @return
+     */
+    public List<SpecimenOrObservationBase> getUnits() {
+        return units;
+    }
+
+}
diff --git a/eu.etaxonomy.taxeditor.cdmlib/.classpath b/eu.etaxonomy.taxeditor.cdmlib/.classpath
index 77de70d42..76687e42b 100644
--- a/eu.etaxonomy.taxeditor.cdmlib/.classpath
+++ b/eu.etaxonomy.taxeditor.cdmlib/.classpath
@@ -28,11 +28,11 @@
 	<classpathentry exported="true" kind="lib" path="lib/cdmlib-commons-3.3.0-SNAPSHOT-sources.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/cdmlib-commons-3.3.0-SNAPSHOT.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/cdmlib-ext-3.3.0-SNAPSHOT-sources.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/cdmlib-ext-3.3.0-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/cdmlib-ext-3.3.0-SNAPSHOT.jar" sourcepath="lib/cdmlib-ext-3.3.0-SNAPSHOT-sources.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/cdmlib-io-3.3.0-SNAPSHOT-sources.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/cdmlib-io-3.3.0-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/cdmlib-io-3.3.0-SNAPSHOT.jar" sourcepath="lib/cdmlib-io-3.3.0-SNAPSHOT-sources.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/cdmlib-model-3.3.0-SNAPSHOT-sources.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/cdmlib-model-3.3.0-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/cdmlib-model-3.3.0-SNAPSHOT.jar" sourcepath="lib/cdmlib-model-3.3.0-SNAPSHOT-sources.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/cdmlib-persistence-3.3.0-SNAPSHOT-sources.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/cdmlib-persistence-3.3.0-SNAPSHOT.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/cdmlib-print-3.3.0-SNAPSHOT-sources.jar"/>
@@ -40,7 +40,7 @@
 	<classpathentry exported="true" kind="lib" path="lib/cdmlib-remote-3.3.0-SNAPSHOT-sources.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/cdmlib-remote-3.3.0-SNAPSHOT.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/cdmlib-services-3.3.0-SNAPSHOT-sources.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/cdmlib-services-3.3.0-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/cdmlib-services-3.3.0-SNAPSHOT.jar" sourcepath="lib/cdmlib-services-3.3.0-SNAPSHOT-sources.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/cglib-nodep-2.2.2.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/com.springsource.org.aopalliance-1.0.0.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/com.springsource.org.apache.commons.logging-1.1.1.jar"/>
diff --git a/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF
index e61452d5e..27720e64b 100644
--- a/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF
+++ b/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF
@@ -243,6 +243,8 @@ Export-Package: com.google.api,
    org.apache.log4j.spi,
    org.w3c.dom,
    org.xml.sax",
+ org.apache.lucene.index,
+ org.apache.lucene.queryParser,
  org.apache.lucene.util,
  org.apache.sanselan;uses:="org.apache.sanselan.common,org.apache.sanselan.common.byteSources",
  org.apache.xerces.dom,
@@ -251,7 +253,10 @@ Export-Package: com.google.api,
  org.hibernate.annotations.common.reflection,
  org.hibernate.cache.internal,
  org.hibernate.classic,
+ org.hibernate.criterion,
+ org.hibernate.envers.query.criteria,
  org.hibernate.search,
+ org.hibernate.search.spatial.impl,
  org.jadira.usertype.dateandtime.joda,
  org.jadira.usertype.dateandtime.shared.spi,
  org.jboss.logging,
