commit f905a3884388b268694cf9411850f887c234e709
Author: Andreas Müller <a.mueller@bgbm.org>
Date:   Sat Jul 16 23:45:14 2022 +0200

    cleanup

diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/api/application/CdmIoApplicationController.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/api/application/CdmIoApplicationController.java
index 494b559bd3..dbe357bca2 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/api/application/CdmIoApplicationController.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/api/application/CdmIoApplicationController.java
@@ -1,74 +1,75 @@
-/**
-* 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.io.api.application;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-
-import eu.etaxonomy.cdm.api.application.CdmApplicationController;
-import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
-import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
-import eu.etaxonomy.cdm.database.DbSchemaValidation;
-import eu.etaxonomy.cdm.database.ICdmDataSource;
-import eu.etaxonomy.cdm.persistence.hibernate.HibernateConfiguration;
-
-public class CdmIoApplicationController extends CdmApplicationController {
-
-    @SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(CdmIoApplicationController.class);
-
-
-	public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE = "/eu/etaxonomy/cdm/defaultIoApplicationContext.xml";
-
-
-	public static CdmIoApplicationController NewInstance() throws DataSourceNotFoundException {
-		return CdmIoApplicationController.NewInstance(getDefaultDatasource(), defaultDbSchemaValidation, false);
-	}
-
-	public static CdmIoApplicationController NewInstance(DbSchemaValidation dbSchemaValidation) throws DataSourceNotFoundException {
-		return CdmIoApplicationController.NewInstance(getDefaultDatasource(), dbSchemaValidation, false);
-	}
-
-	/**
-	 * Constructor, opens an spring ApplicationContext by using the according data source and the
-	 * default database schema validation type
-	 * @param dataSource
-	 */
-	public static CdmIoApplicationController NewInstance(ICdmDataSource dataSource) {
-		return CdmIoApplicationController.NewInstance(dataSource, defaultDbSchemaValidation, false);
-	}
-
-
-	public static CdmIoApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation) {
-		return CdmIoApplicationController.NewInstance(dataSource, dbSchemaValidation, false);
-	}
-
-	public static CdmIoApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,
-	        boolean omitTermLoading) {
-		return NewInstance(dataSource, dbSchemaValidation, null, omitTermLoading);
-	}
-
-    public static CdmIoApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,
-            HibernateConfiguration hibernateConfig, boolean omitTermLoading) {
-        return new CdmIoApplicationController(getClasspathResource(),dataSource, dbSchemaValidation,
-                hibernateConfig, omitTermLoading, null);
-    }
-
-	protected static ClassPathResource getClasspathResource() {
-		return new ClassPathResource(DEFAULT_APPLICATION_CONTEXT_RESOURCE);
-	}
-
-	protected CdmIoApplicationController(Resource applicationContextResource, ICdmDataSource dataSource,
-	        DbSchemaValidation dbSchemaValidation, HibernateConfiguration hibernateConfig,
-			boolean omitTermLoading, IProgressMonitor progressMonitor) {
-		super(applicationContextResource, dataSource, dbSchemaValidation, hibernateConfig,
-		        omitTermLoading, progressMonitor, null);
-	}
+/**
+* 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.io.api.application;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+
+import eu.etaxonomy.cdm.api.application.CdmApplicationController;
+import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
+import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
+import eu.etaxonomy.cdm.database.DbSchemaValidation;
+import eu.etaxonomy.cdm.database.ICdmDataSource;
+import eu.etaxonomy.cdm.persistence.hibernate.HibernateConfiguration;
+
+public class CdmIoApplicationController extends CdmApplicationController {
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+
+	public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE = "/eu/etaxonomy/cdm/defaultIoApplicationContext.xml";
+
+
+	public static CdmIoApplicationController NewInstance() throws DataSourceNotFoundException {
+		return CdmIoApplicationController.NewInstance(getDefaultDatasource(), defaultDbSchemaValidation, false);
+	}
+
+	public static CdmIoApplicationController NewInstance(DbSchemaValidation dbSchemaValidation) throws DataSourceNotFoundException {
+		return CdmIoApplicationController.NewInstance(getDefaultDatasource(), dbSchemaValidation, false);
+	}
+
+	/**
+	 * Constructor, opens an spring ApplicationContext by using the according data source and the
+	 * default database schema validation type
+	 * @param dataSource
+	 */
+	public static CdmIoApplicationController NewInstance(ICdmDataSource dataSource) {
+		return CdmIoApplicationController.NewInstance(dataSource, defaultDbSchemaValidation, false);
+	}
+
+
+	public static CdmIoApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation) {
+		return CdmIoApplicationController.NewInstance(dataSource, dbSchemaValidation, false);
+	}
+
+	public static CdmIoApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,
+	        boolean omitTermLoading) {
+		return NewInstance(dataSource, dbSchemaValidation, null, omitTermLoading);
+	}
+
+    public static CdmIoApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,
+            HibernateConfiguration hibernateConfig, boolean omitTermLoading) {
+        return new CdmIoApplicationController(getClasspathResource(),dataSource, dbSchemaValidation,
+                hibernateConfig, omitTermLoading, null);
+    }
+
+	protected static ClassPathResource getClasspathResource() {
+		return new ClassPathResource(DEFAULT_APPLICATION_CONTEXT_RESOURCE);
+	}
+
+	protected CdmIoApplicationController(Resource applicationContextResource, ICdmDataSource dataSource,
+	        DbSchemaValidation dbSchemaValidation, HibernateConfiguration hibernateConfig,
+			boolean omitTermLoading, IProgressMonitor progressMonitor) {
+		super(applicationContextResource, dataSource, dbSchemaValidation, hibernateConfig,
+		        omitTermLoading, progressMonitor, null);
+	}
 }
\ No newline at end of file
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelTransformer.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelTransformer.java
index f8ef8b432a..982ac07ce7 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelTransformer.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelTransformer.java
@@ -12,7 +12,8 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.UUID;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.common.ResultWrapper;
 import eu.etaxonomy.cdm.model.common.Language;
@@ -42,7 +43,8 @@ import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
  * @since 20.03.2008
  */
 public class BerlinModelTransformer {
-	private static final Logger logger = LogManager.getLogger(BerlinModelTransformer.class);
+
+	private static final Logger logger = LogManager.getLogger();
 
 	//source Refs
 	public static final UUID uuidSourceRefEuroMed = UUID.fromString("0603a84a-f024-4454-ab92-9e2ac0139126");
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmDescriptionImport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmDescriptionImport.java
index dbf07d9213..e4227958b0 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmDescriptionImport.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmDescriptionImport.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.cdm2cdm;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.TransactionStatus;
 
@@ -29,7 +30,7 @@ public class Cdm2CdmDescriptionImport
         extends Cdm2CdmImportBase {
 
     private static final long serialVersionUID = -2111102574346601573L;
-    private static final Logger logger = LogManager.getLogger(Cdm2CdmDescriptionImport.class);
+    private static final Logger logger = LogManager.getLogger();
 
     @Override
     protected void doInvoke(Cdm2CdmImportState state) {
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportBase.java
index 37e9904d75..2c79c3fece 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportBase.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportBase.java
@@ -20,7 +20,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
 import eu.etaxonomy.cdm.api.application.ICdmRepository;
@@ -125,7 +126,7 @@ public abstract class Cdm2CdmImportBase
         extends CdmImportBase<Cdm2CdmImportConfigurator, Cdm2CdmImportState> {
 
     private static final long serialVersionUID = 1344722304369624443L;
-    private static final Logger logger = LogManager.getLogger(Cdm2CdmImportBase.class);
+    private static final Logger logger = LogManager.getLogger();
 
     //quick and dirty
     private Cdm2CdmImportState stateX;
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmTaxonNodeImport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmTaxonNodeImport.java
index a5cb8fdf27..56206ab5ca 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmTaxonNodeImport.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmTaxonNodeImport.java
@@ -8,7 +8,8 @@
 */
 package eu.etaxonomy.cdm.io.cdm2cdm;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.TransactionStatus;
 
@@ -25,7 +26,7 @@ public class Cdm2CdmTaxonNodeImport
         extends Cdm2CdmImportBase {
 
     private static final long serialVersionUID = -2111102574346601573L;
-    private static final Logger logger = LogManager.getLogger(Cdm2CdmTaxonNodeImport.class);
+    private static final Logger logger = LogManager.getLogger();
 
 
     @Override
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmVocabularyImport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmVocabularyImport.java
index 181c153395..ebfc966433 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmVocabularyImport.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmVocabularyImport.java
@@ -12,7 +12,8 @@ import java.util.List;
 import java.util.Set;
 import java.util.UUID;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.TransactionStatus;
 
@@ -33,7 +34,7 @@ public class Cdm2CdmVocabularyImport
         extends Cdm2CdmImportBase {
 
     private static final long serialVersionUID = 3995116783196060465L;
-    private static final Logger logger = LogManager.getLogger(Cdm2CdmVocabularyImport.class);
+    private static final Logger logger = LogManager.getLogger();
 
     @Override
     protected void doInvoke(Cdm2CdmImportState state) {
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/events/LoggingIoObserver.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/events/LoggingIoObserver.java
index 28ddbdbc8f..204231fa27 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/events/LoggingIoObserver.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/events/LoggingIoObserver.java
@@ -1,33 +1,28 @@
-/**
-* 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.io.common.events;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.events.IIoEvent;
-import eu.etaxonomy.cdm.io.common.events.IIoObserver;
-
-/**
- * This IoObserver logs all events.
- * @author a.mueller
- * @since 24.06.2011
- *
- */
-public class LoggingIoObserver implements IIoObserver {
-	private static final Logger logger = LogManager.getLogger(LoggingIoObserver.class);
-	
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.io.common.IIoObserver#handleEvent(eu.etaxonomy.cdm.io.common.IIoEvent)
-	 */
-	@Override
-	public void handleEvent(IIoEvent event) {
-		logger.warn(event);
-	}
-
-}
+/**
+* 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.io.common.events;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * This IoObserver logs all events.
+ *
+ * @author a.mueller
+ * @since 24.06.2011
+ */
+public class LoggingIoObserver implements IIoObserver {
+
+	private static final Logger logger = LogManager.getLogger();
+
+	@Override
+	public void handleEvent(IIoEvent event) {
+		logger.warn(event);
+	}
+}
\ No newline at end of file
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmAttributeMapperBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmAttributeMapperBase.java
index c4760a2c88..2a7f194352 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmAttributeMapperBase.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmAttributeMapperBase.java
@@ -1,44 +1,46 @@
-/**
-* 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.io.common.mapping;
-
-import java.util.List;
-import java.util.Set;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.common.CdmUtils;
-
-/**
- * A mapper base class for all mappers mapping source attributes to destination attributes.
- *
- * @author a.mueller
- * @since 05.08.2008
- */
-public abstract class CdmAttributeMapperBase extends CdmMapperBase{
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(CdmAttributeMapperBase.class);
-
-	public abstract Set<String> getSourceAttributes();
-
-	public abstract Set<String> getDestinationAttributes();
-
-	public abstract List<String> getSourceAttributeList();
-
-	public abstract List<String> getDestinationAttributeList();
-
-	@Override
-    public String toString(){
-		String sourceAtt = CdmUtils.concat(",", getSourceAttributeList().toArray(new String[1]));
-		String destAtt = CdmUtils.concat(",", getDestinationAttributeList().toArray(new String[1]));
-		return this.getClass().getSimpleName() +"[" + sourceAtt + "->" + destAtt + "]";
-	}
-
+/**
+* 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.io.common.mapping;
+
+import java.util.List;
+import java.util.Set;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
+
+/**
+ * A mapper base class for all mappers mapping source attributes to destination attributes.
+ *
+ * @author a.mueller
+ * @since 05.08.2008
+ */
+public abstract class CdmAttributeMapperBase extends CdmMapperBase{
+
+	@SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+	public abstract Set<String> getSourceAttributes();
+
+	public abstract Set<String> getDestinationAttributes();
+
+	public abstract List<String> getSourceAttributeList();
+
+	public abstract List<String> getDestinationAttributeList();
+
+	@Override
+    public String toString(){
+		String sourceAtt = CdmUtils.concat(",", getSourceAttributeList().toArray(new String[1]));
+		String destAtt = CdmUtils.concat(",", getDestinationAttributeList().toArray(new String[1]));
+		return this.getClass().getSimpleName() +"[" + sourceAtt + "->" + destAtt + "]";
+	}
+
 }
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmIoMapping.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmIoMapping.java
index 5cdab4c223..c809fb600e 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmIoMapping.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmIoMapping.java
@@ -1,95 +1,95 @@
-/**
-* 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.io.common.mapping;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.mapping.out.ObjectChangeMapper;
-
-/**
- * @author a.mueller
- * @since 27.07.2008
- */
-public class CdmIoMapping {
-
-	private static final Logger logger = LogManager.getLogger(CdmIoMapping.class);
-
-	//protected List<CdmAttributeMapperBase> mapperList = new ArrayList<>();
-	protected List<CdmMapperBase> mapperList = new ArrayList<>();
-	Set<String> sourceAttributes = new HashSet<>();
-	Set<String> destinationAttributes = new HashSet<>();
-	List<String> sourceAttributeList = new ArrayList<>();
-	List<String> destinationAttributeList = new ArrayList<>();
-
-	public void addMapper(CdmAttributeMapperBase mapper){
-		if (mapper == null){
-			return;
-		}
-		mapperList.add(mapper);
-		if (mapper instanceof CdmSingleAttributeMapperBase){
-			CdmSingleAttributeMapperBase singleMapper = (CdmSingleAttributeMapperBase)mapper;
-			sourceAttributes.addAll(singleMapper.getSourceAttributes());
-			sourceAttributeList.addAll(singleMapper.getSourceAttributeList());
-			destinationAttributes.addAll(singleMapper.getDestinationAttributes());
-			destinationAttributeList.addAll(singleMapper.getDestinationAttributeList());
-		}else if (mapper instanceof MultipleAttributeMapperBase){
-			MultipleAttributeMapperBase<?> multipleMapper = (MultipleAttributeMapperBase<?>)mapper;
-			sourceAttributes.addAll(multipleMapper.getSourceAttributes());
-			sourceAttributeList.addAll(multipleMapper.getSourceAttributes());
-			destinationAttributes.addAll(multipleMapper.getDestinationAttributes());
-			destinationAttributeList.addAll(multipleMapper.getDestinationAttributeList());
-		}else if (mapper instanceof ObjectChangeMapper){
-			ObjectChangeMapper changeMapper = (ObjectChangeMapper)mapper;
-			sourceAttributes.addAll(changeMapper.getSourceAttributes());
-			sourceAttributeList.addAll(changeMapper.getSourceAttributes());
-			destinationAttributes.addAll(changeMapper.getDestinationAttributes());
-			destinationAttributeList.addAll(changeMapper.getDestinationAttributeList());
-
-		}else{
-			logger.error("Unknown mapper type: " + mapper.getClass().getSimpleName());
-			throw new IllegalArgumentException("Unknown mapper type: " + mapper.getClass().getSimpleName());
-		}
-	}
-
-	public Set<String> getSourceAttributes(){
-		Set<String> result = new HashSet<>();
-		result.addAll(sourceAttributes);
-		return result;
-	}
-
-	public Set<String> getSourceAttributesLowerCase(){
-		Set<String> result = new HashSet<>();
-		for(String attr : sourceAttributes){
-			if (attr != null){
-				result.add(attr.toLowerCase());
-			}else{
-				result.add(null);
-			}
-		}
-		return result;
-	}
-
-	public Set<String> getDestinationAttributes(){
-		Set<String> result = new HashSet<>();
-		result.addAll(destinationAttributes);
-		return result;
-	}
-
-	public List<String> getDestinationAttributeList(){
-		List<String> result = new ArrayList<>();
-		result.addAll(destinationAttributeList);
-		return result;
-	}
-}
+/**
+* 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.io.common.mapping;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.mapping.out.ObjectChangeMapper;
+
+/**
+ * @author a.mueller
+ * @since 27.07.2008
+ */
+public class CdmIoMapping {
+
+	private static final Logger logger = LogManager.getLogger();
+
+	protected List<CdmMapperBase> mapperList = new ArrayList<>();
+	Set<String> sourceAttributes = new HashSet<>();
+	Set<String> destinationAttributes = new HashSet<>();
+	List<String> sourceAttributeList = new ArrayList<>();
+	List<String> destinationAttributeList = new ArrayList<>();
+
+	public void addMapper(CdmAttributeMapperBase mapper){
+		if (mapper == null){
+			return;
+		}
+		mapperList.add(mapper);
+		if (mapper instanceof CdmSingleAttributeMapperBase){
+			CdmSingleAttributeMapperBase singleMapper = (CdmSingleAttributeMapperBase)mapper;
+			sourceAttributes.addAll(singleMapper.getSourceAttributes());
+			sourceAttributeList.addAll(singleMapper.getSourceAttributeList());
+			destinationAttributes.addAll(singleMapper.getDestinationAttributes());
+			destinationAttributeList.addAll(singleMapper.getDestinationAttributeList());
+		}else if (mapper instanceof MultipleAttributeMapperBase){
+			MultipleAttributeMapperBase<?> multipleMapper = (MultipleAttributeMapperBase<?>)mapper;
+			sourceAttributes.addAll(multipleMapper.getSourceAttributes());
+			sourceAttributeList.addAll(multipleMapper.getSourceAttributes());
+			destinationAttributes.addAll(multipleMapper.getDestinationAttributes());
+			destinationAttributeList.addAll(multipleMapper.getDestinationAttributeList());
+		}else if (mapper instanceof ObjectChangeMapper){
+			ObjectChangeMapper changeMapper = (ObjectChangeMapper)mapper;
+			sourceAttributes.addAll(changeMapper.getSourceAttributes());
+			sourceAttributeList.addAll(changeMapper.getSourceAttributes());
+			destinationAttributes.addAll(changeMapper.getDestinationAttributes());
+			destinationAttributeList.addAll(changeMapper.getDestinationAttributeList());
+
+		}else{
+			logger.error("Unknown mapper type: " + mapper.getClass().getSimpleName());
+			throw new IllegalArgumentException("Unknown mapper type: " + mapper.getClass().getSimpleName());
+		}
+	}
+
+	public Set<String> getSourceAttributes(){
+		Set<String> result = new HashSet<>();
+		result.addAll(sourceAttributes);
+		return result;
+	}
+
+	public Set<String> getSourceAttributesLowerCase(){
+		Set<String> result = new HashSet<>();
+		for(String attr : sourceAttributes){
+			if (attr != null){
+				result.add(attr.toLowerCase());
+			}else{
+				result.add(null);
+			}
+		}
+		return result;
+	}
+
+	public Set<String> getDestinationAttributes(){
+		Set<String> result = new HashSet<>();
+		result.addAll(destinationAttributes);
+		return result;
+	}
+
+	public List<String> getDestinationAttributeList(){
+		List<String> result = new ArrayList<>();
+		result.addAll(destinationAttributeList);
+		return result;
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmMapperBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmMapperBase.java
index 43de3b94e1..6e9cb2d4bf 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmMapperBase.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmMapperBase.java
@@ -1,23 +1,25 @@
-/**
-* 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.io.common.mapping;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-/**
- * The most general mapper class for all cdm mappers.
- * @author a.mueller
- * @since 12.01.2012
- */
-public abstract class CdmMapperBase {
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(CdmMapperBase.class);
-	
+/**
+* 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.io.common.mapping;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * The most general mapper class for all cdm mappers.
+ * @author a.mueller
+ * @since 12.01.2012
+ */
+public abstract class CdmMapperBase {
+
+	@SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
 }
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmSingleAttributeMapperBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmSingleAttributeMapperBase.java
index be44bc123b..ed58f606b6 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmSingleAttributeMapperBase.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmSingleAttributeMapperBase.java
@@ -1,86 +1,87 @@
-/**
-* 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.io.common.mapping;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-/**
- * Mapper base class mapping a single source attribute to a single destination attribute.
- *
- * @author a.mueller
- * @since 05.08.2008
- */
-public abstract class CdmSingleAttributeMapperBase extends CdmAttributeMapperBase{
-
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(CdmSingleAttributeMapperBase.class);
-
-	private String sourceValue;
-	private String destinationValue;
-	protected Object defaultValue;
-
-	protected CdmSingleAttributeMapperBase(String sourceAttributString, String destinationAttributeString){
-		this(sourceAttributString, destinationAttributeString, null);
-	}
-
-	protected CdmSingleAttributeMapperBase(String sourceAttributString, String destinationAttributeString, Object defaultValue){
-		this.sourceValue = sourceAttributString;
-		this.destinationValue = destinationAttributeString;
-		this.defaultValue = defaultValue;
-	}
-
-	public String getSourceAttribute(){
-		return sourceValue;
-	}
-
-	public String getDestinationAttribute(){
-		return destinationValue;
-	}
-
-	@Override
-	public Set<String> getSourceAttributes(){
-		Set<String>  result = new HashSet<>();
-		result.add(sourceValue);
-		return result;
-	}
-
-	@Override
-	public Set<String> getDestinationAttributes(){
-		Set<String> result = new HashSet<>();
-		if(destinationValue != null){
-			result.add(destinationValue);
-		}
-		return result;
-	}
-
-	@Override
-	public List<String> getSourceAttributeList(){
-		List<String> result = new ArrayList<>();
-		result.add(sourceValue);
-		return result;
-	}
-
-	@Override
-	public List<String> getDestinationAttributeList(){
-		List<String> result = new ArrayList<>();
-		if(destinationValue != null){
-			result.add(destinationValue);
-		}
-		return result;
-	}
-
-	@SuppressWarnings("rawtypes")
-    public abstract Class getTypeClass();
+/**
+* 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.io.common.mapping;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * Mapper base class mapping a single source attribute to a single destination attribute.
+ *
+ * @author a.mueller
+ * @since 05.08.2008
+ */
+public abstract class CdmSingleAttributeMapperBase extends CdmAttributeMapperBase{
+
+	@SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+	private String sourceValue;
+	private String destinationValue;
+	protected Object defaultValue;
+
+	protected CdmSingleAttributeMapperBase(String sourceAttributString, String destinationAttributeString){
+		this(sourceAttributString, destinationAttributeString, null);
+	}
+
+	protected CdmSingleAttributeMapperBase(String sourceAttributString, String destinationAttributeString, Object defaultValue){
+		this.sourceValue = sourceAttributString;
+		this.destinationValue = destinationAttributeString;
+		this.defaultValue = defaultValue;
+	}
+
+	public String getSourceAttribute(){
+		return sourceValue;
+	}
+
+	public String getDestinationAttribute(){
+		return destinationValue;
+	}
+
+	@Override
+	public Set<String> getSourceAttributes(){
+		Set<String>  result = new HashSet<>();
+		result.add(sourceValue);
+		return result;
+	}
+
+	@Override
+	public Set<String> getDestinationAttributes(){
+		Set<String> result = new HashSet<>();
+		if(destinationValue != null){
+			result.add(destinationValue);
+		}
+		return result;
+	}
+
+	@Override
+	public List<String> getSourceAttributeList(){
+		List<String> result = new ArrayList<>();
+		result.add(sourceValue);
+		return result;
+	}
+
+	@Override
+	public List<String> getDestinationAttributeList(){
+		List<String> result = new ArrayList<>();
+		if(destinationValue != null){
+			result.add(destinationValue);
+		}
+		return result;
+	}
+
+	@SuppressWarnings("rawtypes")
+    public abstract Class getTypeClass();
 }
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbIgnoreMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbIgnoreMapper.java
index 7a96e9413d..9aa43230e8 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbIgnoreMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbIgnoreMapper.java
@@ -1,71 +1,72 @@
-/**
-* 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.io.common.mapping;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbImportStateBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * This mapper does not change any import object, but keeps the information that a database
- * attribute does not need to be mapped.
- *
- * @author a.mueller
- * @since 25.02.2010
- */
-public class DbIgnoreMapper
-        extends DbSingleAttributeImportMapperBase<DbImportStateBase<?,?>, CdmBase> {
-
-    private static final Logger logger = LogManager.getLogger(DbIgnoreMapper.class);
-
-//*************************** FACTORY ***************************************************************//
-
-	public static DbIgnoreMapper NewInstance(String dbAttributeToIgnore){
-		return new DbIgnoreMapper(dbAttributeToIgnore, null, null, null);
-	}
-
-	public static DbIgnoreMapper NewInstance(String dbAttributeToIgnore, String ignoreReason){
-		return new DbIgnoreMapper(dbAttributeToIgnore, null, null, ignoreReason);
-	}
-
-//*************************** VARIABLES ***************************************************************//
-
-	private String ignoreReason;
-
-//*************************** CONSTRUCTOR ***************************************************************//
-
-	protected DbIgnoreMapper(String dbAttributString, String cdmAttributeString, Object defaultValue, String ignoreReason) {
-		super(dbAttributString, cdmAttributeString, defaultValue);
-		this.ignoreReason = ignoreReason;
-	}
-
-	@Override
-	public CdmBase invoke(ResultSet rs, CdmBase cdmBase) throws SQLException {
-		return cdmBase; //do nothing
-	}
-
-	@Override
-	public Class getTypeClass() {
-		return null;  //not needed
-	}
-
-	@Override
-	public void initialize(DbImportStateBase<?,?> state, Class<? extends CdmBase> destinationClass) {
-		String localIgnoreReason = "";
-		if (StringUtils.isNotBlank(ignoreReason)){
-			localIgnoreReason = "(" + ignoreReason +")";
-	}
-		logger.warn(this.getSourceAttribute() +  " ignored" +  localIgnoreReason);
-	}
+/**
+* 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.io.common.mapping;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbImportStateBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * This mapper does not change any import object, but keeps the information that a database
+ * attribute does not need to be mapped.
+ *
+ * @author a.mueller
+ * @since 25.02.2010
+ */
+public class DbIgnoreMapper
+        extends DbSingleAttributeImportMapperBase<DbImportStateBase<?,?>, CdmBase> {
+
+    private static final Logger logger = LogManager.getLogger();
+
+//*************************** FACTORY ***************************************************************//
+
+	public static DbIgnoreMapper NewInstance(String dbAttributeToIgnore){
+		return new DbIgnoreMapper(dbAttributeToIgnore, null, null, null);
+	}
+
+	public static DbIgnoreMapper NewInstance(String dbAttributeToIgnore, String ignoreReason){
+		return new DbIgnoreMapper(dbAttributeToIgnore, null, null, ignoreReason);
+	}
+
+//*************************** VARIABLES ***************************************************************//
+
+	private String ignoreReason;
+
+//*************************** CONSTRUCTOR ***************************************************************//
+
+	protected DbIgnoreMapper(String dbAttributString, String cdmAttributeString, Object defaultValue, String ignoreReason) {
+		super(dbAttributString, cdmAttributeString, defaultValue);
+		this.ignoreReason = ignoreReason;
+	}
+
+	@Override
+	public CdmBase invoke(ResultSet rs, CdmBase cdmBase) throws SQLException {
+		return cdmBase; //do nothing
+	}
+
+	@Override
+	public Class getTypeClass() {
+		return null;  //not needed
+	}
+
+	@Override
+	public void initialize(DbImportStateBase<?,?> state, Class<? extends CdmBase> destinationClass) {
+		String localIgnoreReason = "";
+		if (StringUtils.isNotBlank(ignoreReason)){
+			localIgnoreReason = "(" + ignoreReason +")";
+	}
+		logger.warn(this.getSourceAttribute() +  " ignored" +  localIgnoreReason);
+	}
 }
\ No newline at end of file
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportAnnotationCreationMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportAnnotationCreationMapper.java
index 6018eee0ba..877003a4d7 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportAnnotationCreationMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportAnnotationCreationMapper.java
@@ -1,109 +1,110 @@
-/**
-* 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.io.common.mapping;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbImportStateBase;
-import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
-import eu.etaxonomy.cdm.model.common.Annotation;
-import eu.etaxonomy.cdm.model.common.AnnotationType;
-import eu.etaxonomy.cdm.model.common.Language;
-
-
-/**
- * Object creation mapper which creates an annotation type and an annotation.
- *
- * @author a.mueller
- * @since 11.03.2010
- */
-public class DbImportAnnotationCreationMapper extends DbImportSupplementCreationMapperBase<Annotation, AnnotatableEntity, DbImportStateBase<?, ?>, AnnotationType> {
-	private static final Logger logger = LogManager.getLogger(DbImportAnnotationCreationMapper.class);
-
-//************************** FACTORY METHODS ***************************************************************/
-
-
-	/**
-	 * @param dbAnnotatedObjectAttribute
-	 * @param annotatedObjectNamespace
-	 * @return
-	 */
-	public static DbImportAnnotationCreationMapper NewInstance(String dbAnnotatedObjectAttribute, String annotatedObjectNamespace){
-		return new DbImportAnnotationCreationMapper(dbAnnotatedObjectAttribute, annotatedObjectNamespace, null, null, null, null);
-	}
-
-	/**
-	 * Creates an annotation mapper which creates an annotation and sets the annotation text,
-	 * the annotation language and annotation (added to this annotation) holding the original
-	 * source id.
-	 * If one of the attribute is null the according value is not set.
-
-	 * @param dbAnnotatedObjectAttribute - obligatory
-	 * @param annotatedObjectNamespace - obligatory
-	 * @param dbAnnotationTextAttribute
-	 * @param language
-	 * @param dbIdAttribute
-	 * @param annotationType
-	 * @return
-	 */
-	public static DbImportAnnotationCreationMapper NewInstance(String dbAnnotatedObjectAttribute, String annotatedObjectNamespace, String dbAnnotationTextAttribute, Language language, String dbIdAttribute, AnnotationType annotationType){
-		return new DbImportAnnotationCreationMapper(dbAnnotatedObjectAttribute, annotatedObjectNamespace, dbAnnotationTextAttribute, language, dbIdAttribute, annotationType);
-	}
-
-// *******************************  VARIABLES ****************************************/
-
-	protected Language language;
-
-//********************************* CONSTRUCTOR ****************************************/
-
-	/**
-	 * @param dbSupplementValueAttribute
-	 * @param dbSupplementedObjectAttribute
-	 * @param dbIdAttribute
-	 * @param supplementedObjectNamespace
-	 * @param supplementType
-	 */
-	protected DbImportAnnotationCreationMapper(String dbSupplementedObjectAttribute, String supplementedObjectNamespace, String dbSupplementValueAttribute, Language language, String dbIdAttribute, AnnotationType supplementType) {
-		super(dbSupplementValueAttribute, dbSupplementedObjectAttribute, dbIdAttribute, supplementedObjectNamespace, supplementType);
-		this.language = language;
-	}
-
-//************************************ METHODS *******************************************/
-
-	@Override
-	protected boolean addSupplement(Annotation annotation, AnnotatableEntity annotatableEntity, String id) {
-		if (annotatableEntity != null){
-			annotatableEntity.addAnnotation(annotation);
-			return true;
-		}else{
-			String warning = "Annotatable entity (" + id + ") for annotation not found. Annotation not created.";
-			logger.warn(warning);
-			return false;
-		}
-	}
-
-	@Override
-	protected void setSupplementValue(ResultSet rs, Annotation annotation) throws SQLException {
-		String value = rs.getString(dbSupplementValueAttribute);
-		annotation.setText(value);
-	}
-
-	@Override
-	protected Annotation createObject(ResultSet rs) throws SQLException {
-		Annotation annotation = Annotation.NewInstance(null, supplementType, null);
-		if (language != null){
-			annotation.setLanguage(language);
-		}
-		return annotation;
-	}
-}
+/**
+* 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.io.common.mapping;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbImportStateBase;
+import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
+import eu.etaxonomy.cdm.model.common.Annotation;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
+import eu.etaxonomy.cdm.model.common.Language;
+
+
+/**
+ * Object creation mapper which creates an annotation type and an annotation.
+ *
+ * @author a.mueller
+ * @since 11.03.2010
+ */
+public class DbImportAnnotationCreationMapper extends DbImportSupplementCreationMapperBase<Annotation, AnnotatableEntity, DbImportStateBase<?, ?>, AnnotationType> {
+
+    private static final Logger logger = LogManager.getLogger();
+
+//************************** FACTORY METHODS ***************************************************************/
+
+	/**
+	 * @param dbAnnotatedObjectAttribute
+	 * @param annotatedObjectNamespace
+	 * @return
+	 */
+	public static DbImportAnnotationCreationMapper NewInstance(String dbAnnotatedObjectAttribute, String annotatedObjectNamespace){
+		return new DbImportAnnotationCreationMapper(dbAnnotatedObjectAttribute, annotatedObjectNamespace, null, null, null, null);
+	}
+
+	/**
+	 * Creates an annotation mapper which creates an annotation and sets the annotation text,
+	 * the annotation language and annotation (added to this annotation) holding the original
+	 * source id.
+	 * If one of the attribute is null the according value is not set.
+
+	 * @param dbAnnotatedObjectAttribute - obligatory
+	 * @param annotatedObjectNamespace - obligatory
+	 * @param dbAnnotationTextAttribute
+	 * @param language
+	 * @param dbIdAttribute
+	 * @param annotationType
+	 * @return
+	 */
+	public static DbImportAnnotationCreationMapper NewInstance(String dbAnnotatedObjectAttribute, String annotatedObjectNamespace, String dbAnnotationTextAttribute, Language language, String dbIdAttribute, AnnotationType annotationType){
+		return new DbImportAnnotationCreationMapper(dbAnnotatedObjectAttribute, annotatedObjectNamespace, dbAnnotationTextAttribute, language, dbIdAttribute, annotationType);
+	}
+
+// *******************************  VARIABLES ****************************************/
+
+	protected Language language;
+
+//********************************* CONSTRUCTOR ****************************************/
+
+	/**
+	 * @param dbSupplementValueAttribute
+	 * @param dbSupplementedObjectAttribute
+	 * @param dbIdAttribute
+	 * @param supplementedObjectNamespace
+	 * @param supplementType
+	 */
+	protected DbImportAnnotationCreationMapper(String dbSupplementedObjectAttribute, String supplementedObjectNamespace, String dbSupplementValueAttribute, Language language, String dbIdAttribute, AnnotationType supplementType) {
+		super(dbSupplementValueAttribute, dbSupplementedObjectAttribute, dbIdAttribute, supplementedObjectNamespace, supplementType);
+		this.language = language;
+	}
+
+//************************************ METHODS *******************************************/
+
+	@Override
+	protected boolean addSupplement(Annotation annotation, AnnotatableEntity annotatableEntity, String id) {
+		if (annotatableEntity != null){
+			annotatableEntity.addAnnotation(annotation);
+			return true;
+		}else{
+			String warning = "Annotatable entity (" + id + ") for annotation not found. Annotation not created.";
+			logger.warn(warning);
+			return false;
+		}
+	}
+
+	@Override
+	protected void setSupplementValue(ResultSet rs, Annotation annotation) throws SQLException {
+		String value = rs.getString(dbSupplementValueAttribute);
+		annotation.setText(value);
+	}
+
+	@Override
+	protected Annotation createObject(ResultSet rs) throws SQLException {
+		Annotation annotation = Annotation.NewInstance(null, supplementType, null);
+		if (language != null){
+			annotation.setLanguage(language);
+		}
+		return annotation;
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportAnnotationMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportAnnotationMapper.java
index 2a8cc8ea28..4b7f97d74f 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportAnnotationMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportAnnotationMapper.java
@@ -1,195 +1,196 @@
-/**
-* 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.io.common.mapping;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.UUID;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.api.service.ITermService;
-import eu.etaxonomy.cdm.api.service.IVocabularyService;
-import eu.etaxonomy.cdm.io.common.CdmImportBase;
-import eu.etaxonomy.cdm.io.common.DbImportStateBase;
-import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
-import eu.etaxonomy.cdm.model.common.Annotation;
-import eu.etaxonomy.cdm.model.common.AnnotationType;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.common.MarkerType;
-import eu.etaxonomy.cdm.model.term.DefinedTermBase;
-import eu.etaxonomy.cdm.model.term.TermVocabulary;
-
-/**
- * This class maps a database attribute to CDM annotation added to the target class
- * TODO maybe this class should not inherit from DbSingleAttributeImportMapperBase
- * as it does not map to a single attribute
- * @author a.mueller
- * @since 01.03.2010
- */
-public class DbImportAnnotationMapper
-            extends DbSingleAttributeImportMapperBase<DbImportStateBase<?,?>, AnnotatableEntity>{
-
-    private static final Logger logger = LogManager.getLogger(DbImportAnnotationMapper.class);
-
-    private MarkerType ifNullMarkerType;
-
-	/**
-	 * FIXME Warning: the annotation type creation is not yet implemented
-	 * @param dbAttributeString
-	 * @param uuid
-	 * @param label
-	 * @param text
-	 * @param labelAbbrev
-	 * @return
-	 */
-    @Deprecated
-	public static DbImportAnnotationMapper NewInstance(String dbAttributeString, UUID uuid, String label, String text, String labelAbbrev){
-		Language language = null;
-		AnnotationType annotationType = null;
-		return new DbImportAnnotationMapper(dbAttributeString, language, annotationType, null);
-	}
-
-    /**
-     * @param dbAttributeString
-     * @param annotationType
-     * @param ifNullMarkerType the type of marker to set if the annotation value is null
-     * @return
-     */
-    public static DbImportAnnotationMapper NewInstance(String dbAttributeString, AnnotationType annotationType,
-            MarkerType ifNullMarkerType) {
-        return new DbImportAnnotationMapper(dbAttributeString, null, annotationType, ifNullMarkerType);
-    }
-
-	/**
-	 * * FIXME Warning: the annotation type creation is not yet implemented
-	 * @param dbAttributeString
-	 * @param uuid
-	 * @param label
-	 * @param text
-	 * @param labelAbbrev
-	 * @return
-	 */
-	public static DbImportAnnotationMapper NewInstance(String dbAttributeString, UUID uuid, String label, String text, String labelAbbrev, Language language){
-		AnnotationType annotationType = null;
-		return new DbImportAnnotationMapper(dbAttributeString, language, annotationType, null);
-	}
-
-	/**
-	 * @param dbAttributeString
-	 * @param annotationType
-	 * @return
-	 */
-	public static DbImportAnnotationMapper NewInstance(String dbAttributeString, AnnotationType annotationType){
-		Language language = null;
-		return NewInstance(dbAttributeString, annotationType, language);
-	}
-
-	/**
-	 * @param dbAttributeString
-	 * @param annotationType
-	 * @param language
-	 * @return
-	 */
-	public static DbImportAnnotationMapper NewInstance(String dbAttributeString, AnnotationType annotationType, Language language){
-		return new DbImportAnnotationMapper(dbAttributeString, language, annotationType, null);
-	}
-
-
-	private AnnotationType annotationType;
-	private Language language;
-
-
-	private DbImportAnnotationMapper(String dbAttributeString, Language language, AnnotationType annotationType,
-	        MarkerType ifNullMarkerType) {
-		super(dbAttributeString, dbAttributeString);
-		this.language = language;
-		this.annotationType = annotationType;
-		this.ifNullMarkerType = ifNullMarkerType;
-	}
-
-	@Override
-	public void initialize(DbImportStateBase<?,?> state, Class<? extends CdmBase> destinationClass) {
-		importMapperHelper.initialize(state, destinationClass);
-	}
-
-//	/**
-//	 * @param service
-//	 * @param state
-//	 * @param tableName
-//	 */
-//	public void initialize(ITermService service, DbImportStateBase state, Class<? extends CdmBase> destinationClass) {
-//		importMapperHelper.initialize(state, destinationClass);
-//		try {
-//			if (  checkDbColumnExists()){
-//				if (this.annotationType == null){
-//					this.annotationType = getAnnotationType(service, uuid, label, text, labelAbbrev);
-//				}
-//			}else{
-//				ignore = true;
-//			}
-//		} catch (MethodNotSupportedException e) {
-//			//do nothing
-//		}
-//	}
-
-	@Override
-	public AnnotatableEntity invoke(ResultSet rs, AnnotatableEntity annotatableEntity) throws SQLException {
-		if (ignore){
-			return annotatableEntity;
-		}
-		String dbValue = rs.getString(getSourceAttribute());
-		return doInvoke(annotatableEntity, dbValue);
-	}
-
-	@Override
-	protected AnnotatableEntity doInvoke(AnnotatableEntity annotatableEntity, Object dbValue){
-		String strAnnotation = (String)dbValue;
-		if (StringUtils.isNotBlank(strAnnotation)){
-			Annotation annotation = Annotation.NewInstance(strAnnotation.trim(), annotationType, language);
-			if (annotatableEntity != null){
-				annotatableEntity.addAnnotation(annotation);
-			}
-		}else if(this.ifNullMarkerType != null){
-		    annotatableEntity.addMarker(ifNullMarkerType, true);
-		}
-		return annotatableEntity;
-	}
-
-	protected AnnotationType getAnnotationType(CdmImportBase<?, ?> currentImport, UUID uuid, String label, String text, String labelAbbrev){
-		ITermService termService = currentImport.getTermService();
-		AnnotationType annotationType = (AnnotationType)termService.find(uuid);
-		if (annotationType == null){
-			annotationType = AnnotationType.NewInstance(text, label, labelAbbrev);
-			annotationType.setUuid(uuid);
-			//set vocabulary //TODO allow user defined vocabularies
-			UUID uuidAnnotationTypeVocabulary = UUID.fromString("ca04609b-1ba0-4d31-9c2e-aa8eb2f4e62d");
-			IVocabularyService vocService = currentImport.getVocabularyService();
-			@SuppressWarnings("unchecked")
-            TermVocabulary<DefinedTermBase<?>> voc = vocService.find(uuidAnnotationTypeVocabulary);
-			if (voc != null){
-				voc.addTerm(annotationType);
-			}else{
-				logger.warn("Could not find default annotation type vocabulary. Vocabulary not set for new annotation type.");
-			}
-			//savetermService.save(annotationType);
-		}
-		return annotationType;
-	}
-
-
-	//not used
-	@Override
-    public Class<String> getTypeClass(){
-		return String.class;
-	}
-}
+/**
+* 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.io.common.mapping;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.UUID;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.api.service.ITermService;
+import eu.etaxonomy.cdm.api.service.IVocabularyService;
+import eu.etaxonomy.cdm.io.common.CdmImportBase;
+import eu.etaxonomy.cdm.io.common.DbImportStateBase;
+import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
+import eu.etaxonomy.cdm.model.common.Annotation;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.MarkerType;
+import eu.etaxonomy.cdm.model.term.DefinedTermBase;
+import eu.etaxonomy.cdm.model.term.TermVocabulary;
+
+/**
+ * This class maps a database attribute to CDM annotation added to the target class
+ * TODO maybe this class should not inherit from DbSingleAttributeImportMapperBase
+ * as it does not map to a single attribute
+ * @author a.mueller
+ * @since 01.03.2010
+ */
+public class DbImportAnnotationMapper
+            extends DbSingleAttributeImportMapperBase<DbImportStateBase<?,?>, AnnotatableEntity>{
+
+    private static final Logger logger = LogManager.getLogger();
+
+    private MarkerType ifNullMarkerType;
+
+	/**
+	 * FIXME Warning: the annotation type creation is not yet implemented
+	 * @param dbAttributeString
+	 * @param uuid
+	 * @param label
+	 * @param text
+	 * @param labelAbbrev
+	 * @return
+	 */
+    @Deprecated
+	public static DbImportAnnotationMapper NewInstance(String dbAttributeString, UUID uuid, String label, String text, String labelAbbrev){
+		Language language = null;
+		AnnotationType annotationType = null;
+		return new DbImportAnnotationMapper(dbAttributeString, language, annotationType, null);
+	}
+
+    /**
+     * @param dbAttributeString
+     * @param annotationType
+     * @param ifNullMarkerType the type of marker to set if the annotation value is null
+     * @return
+     */
+    public static DbImportAnnotationMapper NewInstance(String dbAttributeString, AnnotationType annotationType,
+            MarkerType ifNullMarkerType) {
+        return new DbImportAnnotationMapper(dbAttributeString, null, annotationType, ifNullMarkerType);
+    }
+
+	/**
+	 * * FIXME Warning: the annotation type creation is not yet implemented
+	 * @param dbAttributeString
+	 * @param uuid
+	 * @param label
+	 * @param text
+	 * @param labelAbbrev
+	 * @return
+	 */
+	public static DbImportAnnotationMapper NewInstance(String dbAttributeString, UUID uuid, String label, String text, String labelAbbrev, Language language){
+		AnnotationType annotationType = null;
+		return new DbImportAnnotationMapper(dbAttributeString, language, annotationType, null);
+	}
+
+	/**
+	 * @param dbAttributeString
+	 * @param annotationType
+	 * @return
+	 */
+	public static DbImportAnnotationMapper NewInstance(String dbAttributeString, AnnotationType annotationType){
+		Language language = null;
+		return NewInstance(dbAttributeString, annotationType, language);
+	}
+
+	/**
+	 * @param dbAttributeString
+	 * @param annotationType
+	 * @param language
+	 * @return
+	 */
+	public static DbImportAnnotationMapper NewInstance(String dbAttributeString, AnnotationType annotationType, Language language){
+		return new DbImportAnnotationMapper(dbAttributeString, language, annotationType, null);
+	}
+
+
+	private AnnotationType annotationType;
+	private Language language;
+
+
+	private DbImportAnnotationMapper(String dbAttributeString, Language language, AnnotationType annotationType,
+	        MarkerType ifNullMarkerType) {
+		super(dbAttributeString, dbAttributeString);
+		this.language = language;
+		this.annotationType = annotationType;
+		this.ifNullMarkerType = ifNullMarkerType;
+	}
+
+	@Override
+	public void initialize(DbImportStateBase<?,?> state, Class<? extends CdmBase> destinationClass) {
+		importMapperHelper.initialize(state, destinationClass);
+	}
+
+//	/**
+//	 * @param service
+//	 * @param state
+//	 * @param tableName
+//	 */
+//	public void initialize(ITermService service, DbImportStateBase state, Class<? extends CdmBase> destinationClass) {
+//		importMapperHelper.initialize(state, destinationClass);
+//		try {
+//			if (  checkDbColumnExists()){
+//				if (this.annotationType == null){
+//					this.annotationType = getAnnotationType(service, uuid, label, text, labelAbbrev);
+//				}
+//			}else{
+//				ignore = true;
+//			}
+//		} catch (MethodNotSupportedException e) {
+//			//do nothing
+//		}
+//	}
+
+	@Override
+	public AnnotatableEntity invoke(ResultSet rs, AnnotatableEntity annotatableEntity) throws SQLException {
+		if (ignore){
+			return annotatableEntity;
+		}
+		String dbValue = rs.getString(getSourceAttribute());
+		return doInvoke(annotatableEntity, dbValue);
+	}
+
+	@Override
+	protected AnnotatableEntity doInvoke(AnnotatableEntity annotatableEntity, Object dbValue){
+		String strAnnotation = (String)dbValue;
+		if (StringUtils.isNotBlank(strAnnotation)){
+			Annotation annotation = Annotation.NewInstance(strAnnotation.trim(), annotationType, language);
+			if (annotatableEntity != null){
+				annotatableEntity.addAnnotation(annotation);
+			}
+		}else if(this.ifNullMarkerType != null){
+		    annotatableEntity.addMarker(ifNullMarkerType, true);
+		}
+		return annotatableEntity;
+	}
+
+	protected AnnotationType getAnnotationType(CdmImportBase<?, ?> currentImport, UUID uuid, String label, String text, String labelAbbrev){
+		ITermService termService = currentImport.getTermService();
+		AnnotationType annotationType = (AnnotationType)termService.find(uuid);
+		if (annotationType == null){
+			annotationType = AnnotationType.NewInstance(text, label, labelAbbrev);
+			annotationType.setUuid(uuid);
+			//set vocabulary //TODO allow user defined vocabularies
+			UUID uuidAnnotationTypeVocabulary = UUID.fromString("ca04609b-1ba0-4d31-9c2e-aa8eb2f4e62d");
+			IVocabularyService vocService = currentImport.getVocabularyService();
+			@SuppressWarnings("unchecked")
+            TermVocabulary<DefinedTermBase<?>> voc = vocService.find(uuidAnnotationTypeVocabulary);
+			if (voc != null){
+				voc.addTerm(annotationType);
+			}else{
+				logger.warn("Could not find default annotation type vocabulary. Vocabulary not set for new annotation type.");
+			}
+			//savetermService.save(annotationType);
+		}
+		return annotationType;
+	}
+
+
+	//not used
+	@Override
+    public Class<String> getTypeClass(){
+		return String.class;
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportCommonNameCreationMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportCommonNameCreationMapper.java
index 5d3966cf54..298ed313b6 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportCommonNameCreationMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportCommonNameCreationMapper.java
@@ -1,60 +1,61 @@
-/**
-* 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.io.common.mapping;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbImportStateBase;
-import eu.etaxonomy.cdm.model.description.CommonTaxonName;
-
-/**
- * @author a.mueller
- * @since 11.03.2010
- * @version 1.0
- */
-public class DbImportCommonNameCreationMapper<STATE extends DbImportStateBase<?,?>> extends DbImportDescriptionElementCreationMapperBase<CommonTaxonName, DbImportStateBase<?,?>> {
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbImportCommonNameCreationMapper.class);
-
-//******************************** FACTORY METHOD ***************************************************/
-	
-	public static DbImportCommonNameCreationMapper<?> NewInstance(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace){
-		return new DbImportCommonNameCreationMapper(dbIdAttribute, objectToCreateNamespace, dbTaxonFkAttribute, taxonNamespace);
-	}
-	
-//******************************* ATTRIBUTES ***************************************/
-
-	
-//********************************* CONSTRUCTOR ****************************************/
-	/**
-	 * @param dbIdAttribute
-	 * @param objectToCreateNamespace
-	 * @param dbTaxonFkAttribute
-	 * @param taxonNamespace
-	 */
-	protected DbImportCommonNameCreationMapper(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace) {
-		super(dbIdAttribute, objectToCreateNamespace, dbTaxonFkAttribute, taxonNamespace);
-	}
-
-//************************************ METHODS *******************************************/
-
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.io.common.mapping.DbImportObjectCreationMapperBase#createObject(java.sql.ResultSet)
-	 */
-	@Override
-	protected CommonTaxonName createObject(ResultSet rs) throws SQLException {
-		CommonTaxonName commonName = CommonTaxonName.NewInstance(null, null);
-		return commonName;
-	}
-
-}
+/**
+* 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.io.common.mapping;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbImportStateBase;
+import eu.etaxonomy.cdm.model.description.CommonTaxonName;
+
+/**
+ * @author a.mueller
+ * @since 11.03.2010
+ */
+public class DbImportCommonNameCreationMapper<STATE extends DbImportStateBase<?,?>> extends DbImportDescriptionElementCreationMapperBase<CommonTaxonName, DbImportStateBase<?,?>> {
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+//******************************** FACTORY METHOD ***************************************************/
+
+	public static DbImportCommonNameCreationMapper<?> NewInstance(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace){
+		return new DbImportCommonNameCreationMapper(dbIdAttribute, objectToCreateNamespace, dbTaxonFkAttribute, taxonNamespace);
+	}
+
+//******************************* ATTRIBUTES ***************************************/
+
+
+//********************************* CONSTRUCTOR ****************************************/
+	/**
+	 * @param dbIdAttribute
+	 * @param objectToCreateNamespace
+	 * @param dbTaxonFkAttribute
+	 * @param taxonNamespace
+	 */
+	protected DbImportCommonNameCreationMapper(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace) {
+		super(dbIdAttribute, objectToCreateNamespace, dbTaxonFkAttribute, taxonNamespace);
+	}
+
+//************************************ METHODS *******************************************/
+
+	/* (non-Javadoc)
+	 * @see eu.etaxonomy.cdm.io.common.mapping.DbImportObjectCreationMapperBase#createObject(java.sql.ResultSet)
+	 */
+	@Override
+	protected CommonTaxonName createObject(ResultSet rs) throws SQLException {
+		CommonTaxonName commonName = CommonTaxonName.NewInstance(null, null);
+		return commonName;
+	}
+
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDefinedTermCreationMapperBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDefinedTermCreationMapperBase.java
index 9602b0cf5c..aa5e0fa0ae 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDefinedTermCreationMapperBase.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDefinedTermCreationMapperBase.java
@@ -1,194 +1,195 @@
-/**
-* 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.io.common.mapping;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.UUID;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbImportStateBase;
-import eu.etaxonomy.cdm.model.common.VersionableEntity;
-import eu.etaxonomy.cdm.model.reference.Reference;
-import eu.etaxonomy.cdm.model.term.DefinedTermBase;
-
-/**
- * This class either retrieves a defined Term from the database or creates and saves it in the database.
- * This is done by first checking the according transformer for term attributes map to an existing
- * CDM term (term that is available by static methods in the term classes), if not it tries to retrieve
- * it via its uuid available through the transformer, if not retrievable it tries to retrieve from the
- * database via the original source, if not retrievable it creates the new and stores it in the database.<BR>
- * Subclasses may decide if they implement a function to use the term immediately via
- * {@link #handleTermWithObject(VersionableEntity, DefinedTermBase)}
- *
- * @author a.mueller
- * @since 12.05.2009
- * @param <TERM>The class of the term to be created or retrieved.
- * @param <TERMED>The class of the object the term is added to.
- * @param <STATE>The class of the import state that is available during import.
- */
-public abstract class DbImportDefinedTermCreationMapperBase<TERM extends DefinedTermBase, TERMED extends VersionableEntity, STATE extends DbImportStateBase<?,?>>
-        extends DbImportObjectCreationMapperBase<TERMED, STATE>  {
-
-    private static final Logger logger = LogManager.getLogger(DbImportDefinedTermCreationMapperBase.class);
-
-//******************************* ATTRIBUTES ***************************************/
-	protected String dbTermAttribute;
-	protected String dbLabelAttribute;
-	protected String dbLabelAbbrevAttribute;
-
-//********************************* CONSTRUCTOR ****************************************/
-	/**
-	 * @param mappingImport
-	 */
-	protected DbImportDefinedTermCreationMapperBase(String dbIdAttribute, String termNamespace, String dbTermAttribute, String dbLabelAttribute, String dbLabelAbbrevAttribute) {
-		super(dbIdAttribute, termNamespace);
-		this.dbTermAttribute = dbTermAttribute;
-		this.dbLabelAttribute = dbLabelAttribute;
-		this.dbLabelAbbrevAttribute = dbLabelAbbrevAttribute;
-	}
-
-//************************************ METHODS *******************************************/
-
-	@Override
-	public TERMED invoke(ResultSet rs, TERMED noObject) throws SQLException {
-		String key = getKeyString(rs);
-		if (key != null){
-			TERM definedTerm = getDefinedTermIfExist(rs);
-			if (definedTerm == null){
-				definedTerm = createDefinedTerm(rs);
-				Reference citation = null;
-				getState().getCurrentIO().addOriginalSource(rs, definedTerm, dbIdAttribute, objectToCreateNamespace, citation);
-
-				UUID transformerUuid = getUuidFromTransformer(rs);
-				if (transformerUuid != null){
-					definedTerm.setUuid(transformerUuid);
-				}
-				getState().getCurrentIO().getTermService().save(definedTerm);
-				saveTermToState(definedTerm);
-				if (transformerUuid == null){
-					getState().addRelatedObject(objectToCreateNamespace, getKeyString(rs), definedTerm);
-				}
-			}
-			handleTermWithObject(noObject, definedTerm);
-		}
-		return noObject;
-	}
-
-	private void makeUuid(ResultSet rs, TERM definedTerm) throws SQLException {
-		UUID uuid = getUuidFromTransformer(rs);
-		if (uuid != null){
-			definedTerm.setUuid(uuid);
-		}
-	}
-
-	protected abstract TERM createDefinedTerm(ResultSet rs) throws SQLException;
-
-	protected abstract void handleTermWithObject(TERMED termed, TERM term);
-
-	/**
-	 * Returns the term if it is available via the transformer, or via the state (uuidMap or relatedObject)
-	 */
-	private TERM getDefinedTermIfExist(ResultSet rs) throws SQLException {
-		//get object from transformer, return if not null
-		TERM definedTerm = getTermFromTransformer(rs);
-		if (definedTerm == null){
-			//if null get uuid from transformer
-			UUID uuidTerm = getUuidFromTransformer(rs);
-			if (uuidTerm != null){
-				definedTerm = getTermByUuid(uuidTerm, rs);
-			}else{
-				definedTerm = getTermByIdentifier(rs);
-			}
-		}
-		return definedTerm;
-	}
-
-	protected TERM getTermByIdentifier(ResultSet rs) throws SQLException {
-		//get object from stat.featur map
-		String key = getKeyString(rs);
-		if (key == null){
-			return null;
-		}
-		TERM term = (TERM)getState().getRelatedObject(objectToCreateNamespace, key);
-		return term;
-	}
-
-	protected TERM getTermByUuid(UUID uuidTerm, ResultSet rs) throws SQLException{
-		TERM term = getTermFromState(uuidTerm);
-		if (term == null){
-			term = (TERM)getState().getCurrentIO().getTermService().find(uuidTerm);
-			if (term != null){
-				saveTermToState(term);
-			}
-		}
-		return term;
-	}
-
-	/**
-	 * Saves the defined term to the state
-	 */
-	protected abstract void saveTermToState(TERM term);
-
-	protected abstract TERM getTermFromState(UUID uuid);
-
-	protected UUID getUuidFromTransformer(ResultSet rs) throws SQLException{
-		IInputTransformer transformer = getTransformer();
-		String key = getKeyString(rs);
-		UUID uuid;
-		try {
-			uuid = getUuidFromTransformer(key, transformer);
-		} catch (UndefinedTransformerMethodException e) {
-			logger.warn(e.getMessage());
-			return null;
-		}
-		return uuid;
-	}
-
-	protected abstract UUID getUuidFromTransformer(String key, IInputTransformer transformer) throws UndefinedTransformerMethodException;
-
-	protected TERM getTermFromTransformer(ResultSet rs) throws SQLException{
-		IInputTransformer transformer = getTransformer();
-		String key = getKeyString(rs);
-		TERM term;
-		try {
-			term = getTermFromTransformer(key, transformer);
-		} catch (UndefinedTransformerMethodException e) {
-			logger.warn(e.getMessage());
-			return null;
-		}
-		return term;
-	}
-
-	protected abstract TERM getTermFromTransformer(String key, IInputTransformer transformer) throws UndefinedTransformerMethodException;
-
-	protected String getKeyString(ResultSet rs) throws SQLException {
-		Object oKey = rs.getString(dbIdAttribute);
-		if (oKey == null){
-			return null;
-		}
-		String key = String.valueOf(oKey);
-		key = key.trim();
-		return key;
-	}
-
-	@Override
-	protected TERMED doInvoke(ResultSet rs, TERMED createdObject)
-			throws SQLException {
-		return createdObject; //not needed because invoke is implemented separately
-	}
-
-	@Override
-	protected TERMED createObject(ResultSet rs) throws SQLException {
-		logger.warn("Never should read this");
-		return null; //not needed, object is created in createDefineTerm(rs)
-	}
-}
+/**
+* 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.io.common.mapping;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.UUID;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbImportStateBase;
+import eu.etaxonomy.cdm.model.common.VersionableEntity;
+import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.model.term.DefinedTermBase;
+
+/**
+ * This class either retrieves a defined Term from the database or creates and saves it in the database.
+ * This is done by first checking the according transformer for term attributes map to an existing
+ * CDM term (term that is available by static methods in the term classes), if not it tries to retrieve
+ * it via its uuid available through the transformer, if not retrievable it tries to retrieve from the
+ * database via the original source, if not retrievable it creates the new and stores it in the database.<BR>
+ * Subclasses may decide if they implement a function to use the term immediately via
+ * {@link #handleTermWithObject(VersionableEntity, DefinedTermBase)}
+ *
+ * @author a.mueller
+ * @since 12.05.2009
+ * @param <TERM>The class of the term to be created or retrieved.
+ * @param <TERMED>The class of the object the term is added to.
+ * @param <STATE>The class of the import state that is available during import.
+ */
+public abstract class DbImportDefinedTermCreationMapperBase<TERM extends DefinedTermBase, TERMED extends VersionableEntity, STATE extends DbImportStateBase<?,?>>
+        extends DbImportObjectCreationMapperBase<TERMED, STATE>  {
+
+    private static final Logger logger = LogManager.getLogger();
+
+//******************************* ATTRIBUTES ***************************************/
+	protected String dbTermAttribute;
+	protected String dbLabelAttribute;
+	protected String dbLabelAbbrevAttribute;
+
+//********************************* CONSTRUCTOR ****************************************/
+	/**
+	 * @param mappingImport
+	 */
+	protected DbImportDefinedTermCreationMapperBase(String dbIdAttribute, String termNamespace, String dbTermAttribute, String dbLabelAttribute, String dbLabelAbbrevAttribute) {
+		super(dbIdAttribute, termNamespace);
+		this.dbTermAttribute = dbTermAttribute;
+		this.dbLabelAttribute = dbLabelAttribute;
+		this.dbLabelAbbrevAttribute = dbLabelAbbrevAttribute;
+	}
+
+//************************************ METHODS *******************************************/
+
+	@Override
+	public TERMED invoke(ResultSet rs, TERMED noObject) throws SQLException {
+		String key = getKeyString(rs);
+		if (key != null){
+			TERM definedTerm = getDefinedTermIfExist(rs);
+			if (definedTerm == null){
+				definedTerm = createDefinedTerm(rs);
+				Reference citation = null;
+				getState().getCurrentIO().addOriginalSource(rs, definedTerm, dbIdAttribute, objectToCreateNamespace, citation);
+
+				UUID transformerUuid = getUuidFromTransformer(rs);
+				if (transformerUuid != null){
+					definedTerm.setUuid(transformerUuid);
+				}
+				getState().getCurrentIO().getTermService().save(definedTerm);
+				saveTermToState(definedTerm);
+				if (transformerUuid == null){
+					getState().addRelatedObject(objectToCreateNamespace, getKeyString(rs), definedTerm);
+				}
+			}
+			handleTermWithObject(noObject, definedTerm);
+		}
+		return noObject;
+	}
+
+	private void makeUuid(ResultSet rs, TERM definedTerm) throws SQLException {
+		UUID uuid = getUuidFromTransformer(rs);
+		if (uuid != null){
+			definedTerm.setUuid(uuid);
+		}
+	}
+
+	protected abstract TERM createDefinedTerm(ResultSet rs) throws SQLException;
+
+	protected abstract void handleTermWithObject(TERMED termed, TERM term);
+
+	/**
+	 * Returns the term if it is available via the transformer, or via the state (uuidMap or relatedObject)
+	 */
+	private TERM getDefinedTermIfExist(ResultSet rs) throws SQLException {
+		//get object from transformer, return if not null
+		TERM definedTerm = getTermFromTransformer(rs);
+		if (definedTerm == null){
+			//if null get uuid from transformer
+			UUID uuidTerm = getUuidFromTransformer(rs);
+			if (uuidTerm != null){
+				definedTerm = getTermByUuid(uuidTerm, rs);
+			}else{
+				definedTerm = getTermByIdentifier(rs);
+			}
+		}
+		return definedTerm;
+	}
+
+	protected TERM getTermByIdentifier(ResultSet rs) throws SQLException {
+		//get object from stat.featur map
+		String key = getKeyString(rs);
+		if (key == null){
+			return null;
+		}
+		TERM term = (TERM)getState().getRelatedObject(objectToCreateNamespace, key);
+		return term;
+	}
+
+	protected TERM getTermByUuid(UUID uuidTerm, ResultSet rs) throws SQLException{
+		TERM term = getTermFromState(uuidTerm);
+		if (term == null){
+			term = (TERM)getState().getCurrentIO().getTermService().find(uuidTerm);
+			if (term != null){
+				saveTermToState(term);
+			}
+		}
+		return term;
+	}
+
+	/**
+	 * Saves the defined term to the state
+	 */
+	protected abstract void saveTermToState(TERM term);
+
+	protected abstract TERM getTermFromState(UUID uuid);
+
+	protected UUID getUuidFromTransformer(ResultSet rs) throws SQLException{
+		IInputTransformer transformer = getTransformer();
+		String key = getKeyString(rs);
+		UUID uuid;
+		try {
+			uuid = getUuidFromTransformer(key, transformer);
+		} catch (UndefinedTransformerMethodException e) {
+			logger.warn(e.getMessage());
+			return null;
+		}
+		return uuid;
+	}
+
+	protected abstract UUID getUuidFromTransformer(String key, IInputTransformer transformer) throws UndefinedTransformerMethodException;
+
+	protected TERM getTermFromTransformer(ResultSet rs) throws SQLException{
+		IInputTransformer transformer = getTransformer();
+		String key = getKeyString(rs);
+		TERM term;
+		try {
+			term = getTermFromTransformer(key, transformer);
+		} catch (UndefinedTransformerMethodException e) {
+			logger.warn(e.getMessage());
+			return null;
+		}
+		return term;
+	}
+
+	protected abstract TERM getTermFromTransformer(String key, IInputTransformer transformer) throws UndefinedTransformerMethodException;
+
+	protected String getKeyString(ResultSet rs) throws SQLException {
+		Object oKey = rs.getString(dbIdAttribute);
+		if (oKey == null){
+			return null;
+		}
+		String key = String.valueOf(oKey);
+		key = key.trim();
+		return key;
+	}
+
+	@Override
+	protected TERMED doInvoke(ResultSet rs, TERMED createdObject)
+			throws SQLException {
+		return createdObject; //not needed because invoke is implemented separately
+	}
+
+	@Override
+	protected TERMED createObject(ResultSet rs) throws SQLException {
+		logger.warn("Never should read this");
+		return null; //not needed, object is created in createDefineTerm(rs)
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDescriptionElementCreationMapperBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDescriptionElementCreationMapperBase.java
index 552a82246a..8d79d4d7b2 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDescriptionElementCreationMapperBase.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDescriptionElementCreationMapperBase.java
@@ -1,137 +1,138 @@
-/**
-* 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.io.common.mapping;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Set;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbImportStateBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
-import eu.etaxonomy.cdm.model.description.TaxonDescription;
-import eu.etaxonomy.cdm.model.reference.OriginalSourceType;
-import eu.etaxonomy.cdm.model.reference.Reference;
-import eu.etaxonomy.cdm.model.taxon.Synonym;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;
-
-/**
- * @author a.mueller
- * @since 11.03.2010
- */
-public abstract class DbImportDescriptionElementCreationMapperBase<ELEMENT extends DescriptionElementBase, STATE extends DbImportStateBase<?,?>> extends DbImportObjectCreationMapperBase<ELEMENT, STATE> {
-
-    private static final Logger logger = LogManager.getLogger(DbImportDescriptionElementCreationMapperBase.class);
-
-//******************************* ATTRIBUTES ***************************************/
-
-	protected String taxonNamespace;
-	protected String dbTaxonFkAttribute;
-	protected boolean isImageGallery = false;
-	protected String dbCitationAttribute;  //if there is a single source available
-	protected String sourceNamespace;
-	protected String dbMicroCitationAttribute;
-
-//********************************* CONSTRUCTOR ****************************************/
-
-	protected DbImportDescriptionElementCreationMapperBase(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace) {
-		super(dbIdAttribute, objectToCreateNamespace);
-		this.taxonNamespace = taxonNamespace;
-		this.dbTaxonFkAttribute = dbTaxonFkAttribute;
-	}
-
-//************************************ METHODS *******************************************/
-
-	public DbImportDescriptionElementCreationMapperBase<ELEMENT,STATE> setSource(String dbCitationAttribute, String sourceNamespace, String dbMicroCitationAttribute){
-		this.dbCitationAttribute = dbCitationAttribute;
-		this.sourceNamespace = sourceNamespace;
-		this.dbMicroCitationAttribute = dbMicroCitationAttribute;
-		return this;
-	}
-
-	@Override
-	protected ELEMENT doInvoke(ResultSet rs, ELEMENT element) throws SQLException {
-		Taxon taxon = getAcceptedTaxon(rs);
-		if (taxon != null){
-			element = addDescriptionElement(taxon, element);
-		}else{
-			logger.info("Taxon could not be determined. Description element was not add to any description or taxon");
-		}
-		//Source
-		if (StringUtils.isNotBlank(dbCitationAttribute)){
-			addSource(rs, element);
-		}
-		return element;
-	}
-
-	private void addSource(ResultSet rs, ELEMENT element) throws SQLException {
-		String microCitation = getStringDbValue(rs, dbMicroCitationAttribute);
-		Reference citation = (Reference) getState().getRelatedObject(sourceNamespace, String.valueOf(rs.getObject(dbCitationAttribute)));
-		element.addSource(OriginalSourceType.PrimaryTaxonomicSource, null, null, citation, microCitation);
-	}
-
-	protected Taxon getAcceptedTaxon(ResultSet rs) throws SQLException {
-		String taxonFk = getForeignKey(rs, dbTaxonFkAttribute);
-		TaxonBase<?> taxonBase = (TaxonBase<?>)getRelatedObject(taxonNamespace, taxonFk);
-		Taxon taxon = null;
-		if (taxonBase == null){
-			logger.warn("TaxonBase not found: " + taxonFk);
-		}else if (taxonBase instanceof Taxon){
-			taxon = (Taxon)taxonBase;
-
-		}else if (taxonBase instanceof Synonym){
-			Synonym synonym = CdmBase.deproxy(taxonBase, Synonym.class);
-			Taxon accTaxon = synonym.getAcceptedTaxon();
-			if (accTaxon == null){
-				logger.warn("Synonym '" + synonym.getTitleCache() + "' ("+ taxonFk + ") has no accepted taxon. Can't define a taxon to add the description element to");
-			}else {
-				taxon = accTaxon;
-			}
-		}else{ //null
-			throw new IllegalStateException("TaxonBase must either be null, Taxon or Synonym but was something else");
-		}
-		return taxon;
-	}
-
-	/**
-	 * Adds a description element to the taxon's first description which is not an image gallery.
-	 * If no such description exists a new one is generated. Returns the element or, if null if taxon is null.
-	 */
-	protected ELEMENT addDescriptionElement(Taxon taxon, ELEMENT element) {
-		if (taxon == null){
-			return null;
-		}else{
-			TaxonDescription description = getTaxonDescription(taxon, isImageGallery);
-			description.addElement(element);
-			return element;
-		}
-	}
-
-	protected TaxonDescription getTaxonDescription(Taxon taxon, boolean isImageGallery) {
-		Set<TaxonDescription> descriptions = taxon.getDescriptions();
-		TaxonDescription description = null;
-		if (descriptions.size() > 0){
-			for (TaxonDescription desc : descriptions){
-				if ( desc.isImageGallery() == isImageGallery ){
-					description = desc;
-					break;
-				}
-			}
-		}
-		if (description == null){
-			description = TaxonDescription.NewInstance(taxon, isImageGallery);
-		}
-		return description;
-	}
-}
+/**
+* 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.io.common.mapping;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Set;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbImportStateBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.reference.OriginalSourceType;
+import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+
+/**
+ * @author a.mueller
+ * @since 11.03.2010
+ */
+public abstract class DbImportDescriptionElementCreationMapperBase<ELEMENT extends DescriptionElementBase, STATE extends DbImportStateBase<?,?>> extends DbImportObjectCreationMapperBase<ELEMENT, STATE> {
+
+    private static final Logger logger = LogManager.getLogger();
+
+//******************************* ATTRIBUTES ***************************************/
+
+	protected String taxonNamespace;
+	protected String dbTaxonFkAttribute;
+	protected boolean isImageGallery = false;
+	protected String dbCitationAttribute;  //if there is a single source available
+	protected String sourceNamespace;
+	protected String dbMicroCitationAttribute;
+
+//********************************* CONSTRUCTOR ****************************************/
+
+	protected DbImportDescriptionElementCreationMapperBase(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace) {
+		super(dbIdAttribute, objectToCreateNamespace);
+		this.taxonNamespace = taxonNamespace;
+		this.dbTaxonFkAttribute = dbTaxonFkAttribute;
+	}
+
+//************************************ METHODS *******************************************/
+
+	public DbImportDescriptionElementCreationMapperBase<ELEMENT,STATE> setSource(String dbCitationAttribute, String sourceNamespace, String dbMicroCitationAttribute){
+		this.dbCitationAttribute = dbCitationAttribute;
+		this.sourceNamespace = sourceNamespace;
+		this.dbMicroCitationAttribute = dbMicroCitationAttribute;
+		return this;
+	}
+
+	@Override
+	protected ELEMENT doInvoke(ResultSet rs, ELEMENT element) throws SQLException {
+		Taxon taxon = getAcceptedTaxon(rs);
+		if (taxon != null){
+			element = addDescriptionElement(taxon, element);
+		}else{
+			logger.info("Taxon could not be determined. Description element was not add to any description or taxon");
+		}
+		//Source
+		if (StringUtils.isNotBlank(dbCitationAttribute)){
+			addSource(rs, element);
+		}
+		return element;
+	}
+
+	private void addSource(ResultSet rs, ELEMENT element) throws SQLException {
+		String microCitation = getStringDbValue(rs, dbMicroCitationAttribute);
+		Reference citation = (Reference) getState().getRelatedObject(sourceNamespace, String.valueOf(rs.getObject(dbCitationAttribute)));
+		element.addSource(OriginalSourceType.PrimaryTaxonomicSource, null, null, citation, microCitation);
+	}
+
+	protected Taxon getAcceptedTaxon(ResultSet rs) throws SQLException {
+		String taxonFk = getForeignKey(rs, dbTaxonFkAttribute);
+		TaxonBase<?> taxonBase = (TaxonBase<?>)getRelatedObject(taxonNamespace, taxonFk);
+		Taxon taxon = null;
+		if (taxonBase == null){
+			logger.warn("TaxonBase not found: " + taxonFk);
+		}else if (taxonBase instanceof Taxon){
+			taxon = (Taxon)taxonBase;
+
+		}else if (taxonBase instanceof Synonym){
+			Synonym synonym = CdmBase.deproxy(taxonBase, Synonym.class);
+			Taxon accTaxon = synonym.getAcceptedTaxon();
+			if (accTaxon == null){
+				logger.warn("Synonym '" + synonym.getTitleCache() + "' ("+ taxonFk + ") has no accepted taxon. Can't define a taxon to add the description element to");
+			}else {
+				taxon = accTaxon;
+			}
+		}else{ //null
+			throw new IllegalStateException("TaxonBase must either be null, Taxon or Synonym but was something else");
+		}
+		return taxon;
+	}
+
+	/**
+	 * Adds a description element to the taxon's first description which is not an image gallery.
+	 * If no such description exists a new one is generated. Returns the element or, if null if taxon is null.
+	 */
+	protected ELEMENT addDescriptionElement(Taxon taxon, ELEMENT element) {
+		if (taxon == null){
+			return null;
+		}else{
+			TaxonDescription description = getTaxonDescription(taxon, isImageGallery);
+			description.addElement(element);
+			return element;
+		}
+	}
+
+	protected TaxonDescription getTaxonDescription(Taxon taxon, boolean isImageGallery) {
+		Set<TaxonDescription> descriptions = taxon.getDescriptions();
+		TaxonDescription description = null;
+		if (descriptions.size() > 0){
+			for (TaxonDescription desc : descriptions){
+				if ( desc.isImageGallery() == isImageGallery ){
+					description = desc;
+					break;
+				}
+			}
+		}
+		if (description == null){
+			description = TaxonDescription.NewInstance(taxon, isImageGallery);
+		}
+		return description;
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDescriptionElementSourceCreationMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDescriptionElementSourceCreationMapper.java
index 2e9083afcb..ab036b1e1a 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDescriptionElementSourceCreationMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDescriptionElementSourceCreationMapper.java
@@ -13,7 +13,8 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbImportStateBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
@@ -28,8 +29,9 @@ import eu.etaxonomy.cdm.model.reference.Reference;
  * @since 11.03.2010
  */
 public class DbImportDescriptionElementSourceCreationMapper extends DbImportObjectCreationMapperBase<DescriptionElementSource, DbImportStateBase<?,?>> {
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbImportDescriptionElementSourceCreationMapper.class);
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
 
 //**************************** FACTORY METHOD ***********************************************/
 
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDistributionCreationMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDistributionCreationMapper.java
index 0f02a4dc11..3985da1798 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDistributionCreationMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportDistributionCreationMapper.java
@@ -1,73 +1,74 @@
-/**
-* 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.io.common.mapping;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbImportStateBase;
-import eu.etaxonomy.cdm.model.description.Distribution;
-import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
-
-/**
- * This Mapper creates a distribution and adds it to a taxon.
- * @author a.mueller
- * @since 11.03.2010
- */
-public class DbImportDistributionCreationMapper<STATE extends DbImportStateBase<?,?>>
-        extends DbImportDescriptionElementCreationMapperBase<Distribution, DbImportStateBase<?,?>> {
-
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbImportDistributionCreationMapper.class);
-
-//******************************** FACTORY METHOD ***************************************************/
-
-	/**
-	 * Creates a Distribution and adds it to the description of a taxon.
-	 * @param dbIdAttribute
-	 * @param objectToCreateNamespace
-	 * @param dbTaxonFkAttribute
-	 * @param taxonNamespace
-	 * @return
-	 */
-	public static DbImportDistributionCreationMapper<?> NewInstance(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace){
-		PresenceAbsenceTerm status = null;
-		return new DbImportDistributionCreationMapper<>(dbIdAttribute, objectToCreateNamespace, dbTaxonFkAttribute, taxonNamespace, status);
-	}
-
-	/**
-	 * Creates a Distribution with status <code>status</code> and adds it to the description of a taxon.
-	 */
-	public static DbImportDistributionCreationMapper<?> NewFixedStatusInstance(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace, PresenceAbsenceTerm status){
-		return new DbImportDistributionCreationMapper<>(dbIdAttribute, objectToCreateNamespace, dbTaxonFkAttribute, taxonNamespace, status);
-	}
-
-//******************************* ATTRIBUTES ***************************************/
-
-	protected PresenceAbsenceTerm status;
-
-//********************************* CONSTRUCTOR ****************************************/
-
-	protected DbImportDistributionCreationMapper(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace, PresenceAbsenceTerm status) {
-		super(dbIdAttribute, objectToCreateNamespace, dbTaxonFkAttribute, taxonNamespace);
-		this.status = status;
-	}
-
-//************************************ METHODS *******************************************/
-
-	@Override
-	protected Distribution createObject(ResultSet rs) throws SQLException {
-		Distribution distribution = Distribution.NewInstance(null, null);
-		distribution.setStatus(status);
-		return distribution;
-	}
-}
+/**
+* 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.io.common.mapping;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbImportStateBase;
+import eu.etaxonomy.cdm.model.description.Distribution;
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
+
+/**
+ * This Mapper creates a distribution and adds it to a taxon.
+ * @author a.mueller
+ * @since 11.03.2010
+ */
+public class DbImportDistributionCreationMapper<STATE extends DbImportStateBase<?,?>>
+        extends DbImportDescriptionElementCreationMapperBase<Distribution, DbImportStateBase<?,?>> {
+
+	@SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+//******************************** FACTORY METHOD ***************************************************/
+
+	/**
+	 * Creates a Distribution and adds it to the description of a taxon.
+	 * @param dbIdAttribute
+	 * @param objectToCreateNamespace
+	 * @param dbTaxonFkAttribute
+	 * @param taxonNamespace
+	 * @return
+	 */
+	public static DbImportDistributionCreationMapper<?> NewInstance(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace){
+		PresenceAbsenceTerm status = null;
+		return new DbImportDistributionCreationMapper<>(dbIdAttribute, objectToCreateNamespace, dbTaxonFkAttribute, taxonNamespace, status);
+	}
+
+	/**
+	 * Creates a Distribution with status <code>status</code> and adds it to the description of a taxon.
+	 */
+	public static DbImportDistributionCreationMapper<?> NewFixedStatusInstance(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace, PresenceAbsenceTerm status){
+		return new DbImportDistributionCreationMapper<>(dbIdAttribute, objectToCreateNamespace, dbTaxonFkAttribute, taxonNamespace, status);
+	}
+
+//******************************* ATTRIBUTES ***************************************/
+
+	protected PresenceAbsenceTerm status;
+
+//********************************* CONSTRUCTOR ****************************************/
+
+	protected DbImportDistributionCreationMapper(String dbIdAttribute, String objectToCreateNamespace, String dbTaxonFkAttribute, String taxonNamespace, PresenceAbsenceTerm status) {
+		super(dbIdAttribute, objectToCreateNamespace, dbTaxonFkAttribute, taxonNamespace);
+		this.status = status;
+	}
+
+//************************************ METHODS *******************************************/
+
+	@Override
+	protected Distribution createObject(ResultSet rs) throws SQLException {
+		Distribution distribution = Distribution.NewInstance(null, null);
+		distribution.setStatus(status);
+		return distribution;
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/berlinModel/CdmOneToManyMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/berlinModel/CdmOneToManyMapper.java
index 0338da9426..54b9e985c6 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/berlinModel/CdmOneToManyMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/berlinModel/CdmOneToManyMapper.java
@@ -1,110 +1,111 @@
-/**
-* 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.io.common.mapping.berlinModel;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.mapping.CdmSingleAttributeMapperBase;
-import eu.etaxonomy.cdm.io.common.mapping.MultipleAttributeMapperBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * @author a.mueller
- * @since 20.03.2008
- * @version 1.0
- */
-public class CdmOneToManyMapper<ONE extends CdmBase, MANY extends CdmBase, SINGLE_MAPPER extends CdmSingleAttributeMapperBase> extends MultipleAttributeMapperBase<SINGLE_MAPPER> {
-	@SuppressWarnings("unused")
-	private static Logger logger = LogManager.getLogger(CdmOneToManyMapper.class);
-
-	private Class<MANY> manyClass;
-	private Class<ONE> oneClass;
-	private String singleAttributeName;
-
-	public CdmOneToManyMapper(Class<ONE> oneClass, Class<MANY> manyClass, String singleAttributeName, SINGLE_MAPPER[] singleAttributesMappers) {
-		if (singleAttributesMappers == null){
-			throw new NullPointerException("singleAttributesMapper and cdmAttributeStrings must not be null");
-		}
-		for (SINGLE_MAPPER singleMapper : singleAttributesMappers){
-			singleMappers.add(singleMapper);
-		}
-		this.manyClass = manyClass;
-		this.oneClass = oneClass;
-		this.singleAttributeName = singleAttributeName;
-	}
-
-//	@Override
-//	public Set<String> getSourceAttributes(){
-//		Set<String> result = new HashSet<>();
-//		result.addAll(getSourceAttributeList());
-//		return result;
-//	}
-
-	@Override
-	public List<String> getSourceAttributeList(){
-		List<String> result = new ArrayList<String>();
-		for (SINGLE_MAPPER singleMapper : singleMappers){
-			result.add(singleMapper.getSourceAttribute());
-		}
-		return result;
-	}
-
-//	@Override
-//	public Set<String> getDestinationAttributes(){
-//		Set<String> result = new HashSet<>();
-//		result.addAll(getDestinationAttributeList());
-//		return result;
-//	}
-
-	@Override
-	public List<String> getDestinationAttributeList(){
-		List<String> result = new ArrayList<String>();
-		for (SINGLE_MAPPER singleMapper : singleMappers){
-			result.add(singleMapper.getDestinationAttribute());
-		}
-		return result;
-	}
-
-
-	public Class<MANY> getManyClass(){
-		return manyClass;
-	}
-
-	public Class<ONE> getOneClass(){
-		return oneClass;
-	}
-
-	public String getDestinationAttribute(String sourceAttribute){
-		if (sourceAttribute == null){
-			return null;
-		}
-		for (SINGLE_MAPPER singleMapper : singleMappers){
-			if (sourceAttribute.equals(singleMapper.getSourceAttribute())){
-				return singleMapper.getDestinationAttribute();
-			}
-		}
-		return null;
-	}
-
-	public List<SINGLE_MAPPER> getSingleMappers(){
-		return singleMappers;
-	}
-
-	/**
-	 * @return the singleAttributeName
-	 */
-	public String getSingleAttributeName() {
-		return singleAttributeName;
-	}
-
-}
+/**
+* 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.io.common.mapping.berlinModel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.mapping.CdmSingleAttributeMapperBase;
+import eu.etaxonomy.cdm.io.common.mapping.MultipleAttributeMapperBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * @author a.mueller
+ * @since 20.03.2008
+ */
+public class CdmOneToManyMapper<ONE extends CdmBase, MANY extends CdmBase, SINGLE_MAPPER extends CdmSingleAttributeMapperBase> extends MultipleAttributeMapperBase<SINGLE_MAPPER> {
+
+    @SuppressWarnings("unused")
+	private static Logger logger = LogManager.getLogger();
+
+	private Class<MANY> manyClass;
+	private Class<ONE> oneClass;
+	private String singleAttributeName;
+
+	public CdmOneToManyMapper(Class<ONE> oneClass, Class<MANY> manyClass, String singleAttributeName, SINGLE_MAPPER[] singleAttributesMappers) {
+		if (singleAttributesMappers == null){
+			throw new NullPointerException("singleAttributesMapper and cdmAttributeStrings must not be null");
+		}
+		for (SINGLE_MAPPER singleMapper : singleAttributesMappers){
+			singleMappers.add(singleMapper);
+		}
+		this.manyClass = manyClass;
+		this.oneClass = oneClass;
+		this.singleAttributeName = singleAttributeName;
+	}
+
+//	@Override
+//	public Set<String> getSourceAttributes(){
+//		Set<String> result = new HashSet<>();
+//		result.addAll(getSourceAttributeList());
+//		return result;
+//	}
+
+	@Override
+	public List<String> getSourceAttributeList(){
+		List<String> result = new ArrayList<String>();
+		for (SINGLE_MAPPER singleMapper : singleMappers){
+			result.add(singleMapper.getSourceAttribute());
+		}
+		return result;
+	}
+
+//	@Override
+//	public Set<String> getDestinationAttributes(){
+//		Set<String> result = new HashSet<>();
+//		result.addAll(getDestinationAttributeList());
+//		return result;
+//	}
+
+	@Override
+	public List<String> getDestinationAttributeList(){
+		List<String> result = new ArrayList<String>();
+		for (SINGLE_MAPPER singleMapper : singleMappers){
+			result.add(singleMapper.getDestinationAttribute());
+		}
+		return result;
+	}
+
+
+	public Class<MANY> getManyClass(){
+		return manyClass;
+	}
+
+	public Class<ONE> getOneClass(){
+		return oneClass;
+	}
+
+	public String getDestinationAttribute(String sourceAttribute){
+		if (sourceAttribute == null){
+			return null;
+		}
+		for (SINGLE_MAPPER singleMapper : singleMappers){
+			if (sourceAttribute.equals(singleMapper.getSourceAttribute())){
+				return singleMapper.getDestinationAttribute();
+			}
+		}
+		return null;
+	}
+
+	public List<SINGLE_MAPPER> getSingleMappers(){
+		return singleMappers;
+	}
+
+	/**
+	 * @return the singleAttributeName
+	 */
+	public String getSingleAttributeName() {
+		return singleAttributeName;
+	}
+
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/berlinModel/CdmStringMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/berlinModel/CdmStringMapper.java
index e635d8380e..b3feeb3817 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/berlinModel/CdmStringMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/berlinModel/CdmStringMapper.java
@@ -1,37 +1,34 @@
-/**
-* 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.io.common.mapping.berlinModel;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.mapping.CdmSingleAttributeMapperBase;
-
-/**
- * @author a.mueller
- * @since 20.03.2008
- * @version 1.0
- */
-public class CdmStringMapper extends CdmSingleAttributeMapperBase {
-	@SuppressWarnings("unused")
-	private static Logger logger = LogManager.getLogger(CdmStringMapper.class);
-	
-	/**
-	 * @param dbValue
-	 * @param cdmValue
-	 */
-	public CdmStringMapper(String dbAttributeString, String cdmAttributeString) {
-		super(dbAttributeString, cdmAttributeString);
-	}
-	
-	public Class<String> getTypeClass(){
-		return String.class;
-	}
-	
-}
+/**
+* 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.io.common.mapping.berlinModel;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.mapping.CdmSingleAttributeMapperBase;
+
+/**
+ * @author a.mueller
+ * @since 20.03.2008
+ */
+public class CdmStringMapper extends CdmSingleAttributeMapperBase {
+
+	@SuppressWarnings("unused")
+	private static Logger logger = LogManager.getLogger();
+
+	public CdmStringMapper(String dbAttributeString, String cdmAttributeString) {
+		super(dbAttributeString, cdmAttributeString);
+	}
+
+	@Override
+    public Class<String> getTypeClass(){
+		return String.class;
+	}
+}
\ No newline at end of file
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CdmDbExportMapping.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CdmDbExportMapping.java
index 4821b490e1..68181ef0c0 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CdmDbExportMapping.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CdmDbExportMapping.java
@@ -1,146 +1,147 @@
-/**
-* 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.io.common.mapping.out;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbExportConfiguratorBase;
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-import eu.etaxonomy.cdm.io.common.Source;
-import eu.etaxonomy.cdm.io.common.mapping.CdmIoMapping;
-import eu.etaxonomy.cdm.io.common.mapping.CdmMapperBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * @author a.mueller
- * @since 12.05.2009
- */
-public class CdmDbExportMapping<STATE extends DbExportStateBase<CONFIG, TRANSFORM>, CONFIG extends DbExportConfiguratorBase<STATE, TRANSFORM, Source>, TRANSFORM extends IExportTransformer>
-        extends CdmIoMapping {
-
-    private static final Logger logger = LogManager.getLogger(CdmDbExportMapping.class);
-
-	private PreparedStatement preparedStatement;
-	private String dbTableName;
-	private List<CollectionExportMapping<STATE,CONFIG, TRANSFORM>> collectionMappingList = new ArrayList<>();
-
-	public CdmDbExportMapping(String tableName){
-		this.dbTableName = tableName;
-	}
-
-	public boolean initialize(STATE state) throws SQLException{
-		CONFIG config = state.getConfig();
-		Source db = config.getDestination();
-
-		try {
-			IndexCounter index;
-			String strPreparedStatement = prepareStatement();
-			logger.debug(strPreparedStatement);
-			this.preparedStatement = db.getConnection().prepareStatement(strPreparedStatement);
-			index = new IndexCounter(1);
-
-			for (CdmMapperBase mapper : this.mapperList){
-				if (mapper instanceof IDbExportMapper){
-					IDbExportMapper<DbExportStateBase<?,TRANSFORM>,TRANSFORM> dbMapper = (IDbExportMapper)mapper;
-					dbMapper.initialize(preparedStatement, index, state, dbTableName);
-				}else{
-					logger.warn("mapper "+mapper.toString() + "," + mapper.getClass().getName() +" is not of type " + IDbExportMapper.class.getSimpleName());
-				}
-			}
-			for (CollectionExportMapping<STATE,CONFIG, TRANSFORM> collectionMapping : this.collectionMappingList ){
-				collectionMapping.initialize(state);
-			}
-			return true;
-		} catch (SQLException e) {
-			logger.warn("SQL Exception");
-			throw e;
-		}
-	}
-
-	public boolean invoke(CdmBase cdmBase){
-		try {
-			boolean result = true;
-			for (CdmMapperBase mapper : this.mapperList){
-				if (mapper instanceof ObjectChangeMapper){
-					ObjectChangeMapper changeMapper = (ObjectChangeMapper)mapper;
-					cdmBase = changeMapper.getNewObject(cdmBase);
-				}else if (mapper instanceof IDbExportMapper){
-					IDbExportMapper<DbExportStateBase<?,TRANSFORM>, TRANSFORM> dbMapper = (IDbExportMapper)mapper;
-					try {
-						result &= dbMapper.invoke(cdmBase);
-					} catch (Exception e) {
-						result = false;
-						logger.error("Error occurred in mapping.invoke");
-						e.printStackTrace();
-						continue;
-					}
-				}else {
-					logger.warn("mapper " + mapper.toString() + "is not of required type " + IDbExportMapper.class.getSimpleName());
-				}
-			}
-			int count = preparedStatement.executeUpdate();
-			if (logger.isDebugEnabled()) {
-                logger.debug("Number of rows affected: " + count);
-            }
-			for (CollectionExportMapping<STATE,CONFIG, TRANSFORM> collectionMapping : this.collectionMappingList ){
-				result &= collectionMapping.invoke(cdmBase);
-			}
-			return result;
-		} catch(Exception e){
-			e.printStackTrace();
-			logger.error(e.getMessage() + ": " + cdmBase.toString());
-			return false;
-		}
-	}
-
-	public void addCollectionMapping(CollectionExportMapping<STATE,CONFIG, TRANSFORM> collectionMapping){
-		this.collectionMappingList.add(collectionMapping);
-	}
-
-	protected String prepareStatement(){
-		String sqlInsert = "INSERT INTO " + getDbTableName() + " (";
-		String sqlValues = ") VALUES(";
-		String sqlEnd = ")";
-		String attributes = "";
-		String values = "";
-		for (String attribute : this.getDestinationAttributeList()){
-			attributes +=  "," + attribute;
-			values += ",?";
-		}
-		attributes = attributes.substring(1); //delete first ','
-		values = values.substring(1); //delete first ','
-		String result = sqlInsert + attributes + sqlValues + values + sqlEnd;
-		return result;
-	}
-
-	public String getDbTableName() {
-		return dbTableName;
-	}
-	public void setDbTableName(String dbTableName) {
-		this.dbTableName = dbTableName;
-	}
-
-	protected PreparedStatement getPreparedStatement() {
-		return preparedStatement;
-	}
-	protected void setPreparedStatement(PreparedStatement preparedStatement) {
-		this.preparedStatement = preparedStatement;
-	}
-
-//	protected List<CdmAttributeMapperBase> getAttributeMapperList(){
-//		List<CdmAttributeMapperBase> list = this.mapperList;
-//		return list;
-//	}
-}
+/**
+* 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.io.common.mapping.out;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbExportConfiguratorBase;
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+import eu.etaxonomy.cdm.io.common.Source;
+import eu.etaxonomy.cdm.io.common.mapping.CdmIoMapping;
+import eu.etaxonomy.cdm.io.common.mapping.CdmMapperBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * @author a.mueller
+ * @since 12.05.2009
+ */
+public class CdmDbExportMapping<STATE extends DbExportStateBase<CONFIG, TRANSFORM>, CONFIG extends DbExportConfiguratorBase<STATE, TRANSFORM, Source>, TRANSFORM extends IExportTransformer>
+        extends CdmIoMapping {
+
+    private static final Logger logger = LogManager.getLogger();
+
+	private PreparedStatement preparedStatement;
+	private String dbTableName;
+	private List<CollectionExportMapping<STATE,CONFIG, TRANSFORM>> collectionMappingList = new ArrayList<>();
+
+	public CdmDbExportMapping(String tableName){
+		this.dbTableName = tableName;
+	}
+
+	public boolean initialize(STATE state) throws SQLException{
+		CONFIG config = state.getConfig();
+		Source db = config.getDestination();
+
+		try {
+			IndexCounter index;
+			String strPreparedStatement = prepareStatement();
+			logger.debug(strPreparedStatement);
+			this.preparedStatement = db.getConnection().prepareStatement(strPreparedStatement);
+			index = new IndexCounter(1);
+
+			for (CdmMapperBase mapper : this.mapperList){
+				if (mapper instanceof IDbExportMapper){
+					IDbExportMapper<DbExportStateBase<?,TRANSFORM>,TRANSFORM> dbMapper = (IDbExportMapper)mapper;
+					dbMapper.initialize(preparedStatement, index, state, dbTableName);
+				}else{
+					logger.warn("mapper "+mapper.toString() + "," + mapper.getClass().getName() +" is not of type " + IDbExportMapper.class.getSimpleName());
+				}
+			}
+			for (CollectionExportMapping<STATE,CONFIG, TRANSFORM> collectionMapping : this.collectionMappingList ){
+				collectionMapping.initialize(state);
+			}
+			return true;
+		} catch (SQLException e) {
+			logger.warn("SQL Exception");
+			throw e;
+		}
+	}
+
+	public boolean invoke(CdmBase cdmBase){
+		try {
+			boolean result = true;
+			for (CdmMapperBase mapper : this.mapperList){
+				if (mapper instanceof ObjectChangeMapper){
+					ObjectChangeMapper changeMapper = (ObjectChangeMapper)mapper;
+					cdmBase = changeMapper.getNewObject(cdmBase);
+				}else if (mapper instanceof IDbExportMapper){
+					IDbExportMapper<DbExportStateBase<?,TRANSFORM>, TRANSFORM> dbMapper = (IDbExportMapper)mapper;
+					try {
+						result &= dbMapper.invoke(cdmBase);
+					} catch (Exception e) {
+						result = false;
+						logger.error("Error occurred in mapping.invoke");
+						e.printStackTrace();
+						continue;
+					}
+				}else {
+					logger.warn("mapper " + mapper.toString() + "is not of required type " + IDbExportMapper.class.getSimpleName());
+				}
+			}
+			int count = preparedStatement.executeUpdate();
+			if (logger.isDebugEnabled()) {
+                logger.debug("Number of rows affected: " + count);
+            }
+			for (CollectionExportMapping<STATE,CONFIG, TRANSFORM> collectionMapping : this.collectionMappingList ){
+				result &= collectionMapping.invoke(cdmBase);
+			}
+			return result;
+		} catch(Exception e){
+			e.printStackTrace();
+			logger.error(e.getMessage() + ": " + cdmBase.toString());
+			return false;
+		}
+	}
+
+	public void addCollectionMapping(CollectionExportMapping<STATE,CONFIG, TRANSFORM> collectionMapping){
+		this.collectionMappingList.add(collectionMapping);
+	}
+
+	protected String prepareStatement(){
+		String sqlInsert = "INSERT INTO " + getDbTableName() + " (";
+		String sqlValues = ") VALUES(";
+		String sqlEnd = ")";
+		String attributes = "";
+		String values = "";
+		for (String attribute : this.getDestinationAttributeList()){
+			attributes +=  "," + attribute;
+			values += ",?";
+		}
+		attributes = attributes.substring(1); //delete first ','
+		values = values.substring(1); //delete first ','
+		String result = sqlInsert + attributes + sqlValues + values + sqlEnd;
+		return result;
+	}
+
+	public String getDbTableName() {
+		return dbTableName;
+	}
+	public void setDbTableName(String dbTableName) {
+		this.dbTableName = dbTableName;
+	}
+
+	protected PreparedStatement getPreparedStatement() {
+		return preparedStatement;
+	}
+	protected void setPreparedStatement(PreparedStatement preparedStatement) {
+		this.preparedStatement = preparedStatement;
+	}
+
+//	protected List<CdmAttributeMapperBase> getAttributeMapperList(){
+//		List<CdmAttributeMapperBase> list = this.mapperList;
+//		return list;
+//	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CollectionExportMapping.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CollectionExportMapping.java
index 8c0ddcca37..47141173c2 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CollectionExportMapping.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CollectionExportMapping.java
@@ -1,149 +1,150 @@
-/**
-* 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.io.common.mapping.out;
-
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbExportConfiguratorBase;
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-import eu.etaxonomy.cdm.io.common.ImportHelper;
-import eu.etaxonomy.cdm.io.common.Source;
-import eu.etaxonomy.cdm.io.common.mapping.CdmAttributeMapperBase;
-import eu.etaxonomy.cdm.io.common.mapping.CdmMapperBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * @author a.mueller
- * @since 12.05.2009
- */
-public class CollectionExportMapping<STATE extends DbExportStateBase<CONFIG, TRANSFORM>, CONFIG extends DbExportConfiguratorBase<STATE, TRANSFORM, Source>, TRANSFORM extends IExportTransformer>
-        extends CdmDbExportMapping<STATE, CONFIG, TRANSFORM> {
-
-    private static final Logger logger = LogManager.getLogger(CollectionExportMapping.class);
-
-	private IdMapper parentMapper;
-	private DbSequenceMapper sequenceMapper;
-	private String collectionAttributeName;
-	private List<DbSimpleFilterMapper> filterMapper = new ArrayList<DbSimpleFilterMapper>() ;
-
-	public static CollectionExportMapping NewInstance(String tableName, String collectionAttributeName, IdMapper parentMapper){
-		return new CollectionExportMapping(tableName, collectionAttributeName, parentMapper, null);
-	}
-
-	public static CollectionExportMapping NewInstance(String tableName, String collectionAttributeName, IdMapper parentMapper, String seqenceAttribute){
-		return NewInstance(tableName, collectionAttributeName, parentMapper, seqenceAttribute, 0);
-	}
-
-	public static CollectionExportMapping NewInstance(String tableName, String collectionAttributeName, IdMapper parentMapper, String seqenceAttribute, int sequenceStart){
-		DbSequenceMapper sequenceMapper = DbSequenceMapper.NewInstance(seqenceAttribute, sequenceStart);
-		CollectionExportMapping result = new CollectionExportMapping(tableName, collectionAttributeName, parentMapper, sequenceMapper);
-		return result;
-	}
-
-
-	@Override
-	public void addMapper(CdmAttributeMapperBase mapper) {
-		if (mapper instanceof DbSimpleFilterMapper){
-			DbSimpleFilterMapper filterMapper = (DbSimpleFilterMapper)mapper;
-			this.filterMapper.add(filterMapper);
-		}else{
-			super.addMapper(mapper);
-		}
-	}
-
-	private CollectionExportMapping(String tableName, String collectionAttributeName, IdMapper parentMapper, DbSequenceMapper sequenceMapper){
-		super(tableName);
-		this.parentMapper = parentMapper;
-		this.addMapper(parentMapper);
-		this.sequenceMapper = sequenceMapper;
-		this.addMapper(sequenceMapper);
-		this.collectionAttributeName = collectionAttributeName;
-	}
-
-
-	@Override
-	public boolean invoke(CdmBase parent) {
-		boolean result = true;
-		Collection<CdmBase> collection = getCollection(parent);
-		if (this.sequenceMapper != null){
-			this.sequenceMapper.reset();
-		}
-		for(CdmBase collectionObject : collection){
-		    try {
-				if (collectionObject == null){
-					logger.warn("Collection object was null");
-					result = false;
-					continue;
-				}
-				if (isFiltered(collectionObject)){
-					continue;
-				}
-				for (CdmMapperBase mapper : this.mapperList){
-					result &= handleSingleMapper(parent, collectionObject, mapper);
-				}
-				int count = getPreparedStatement().executeUpdate();
-				if (logger.isDebugEnabled()) {
-                    logger.debug("Number of rows affected: " + count);
-                }
-			} catch(SQLException e){
-                e.printStackTrace();
-                logger.error(e.getMessage() + ": " + parent.toString());
-                result = false;
-            }
-		}
-		return result;
-	}
-
-    private boolean handleSingleMapper(CdmBase parent, CdmBase collectionObject, CdmMapperBase mapper)
-            throws SQLException {
-
-        boolean result = true;
-        if (mapper == this.parentMapper){
-        	parentMapper.invoke(parent);
-        }else if (mapper == this.sequenceMapper){
-        	this.sequenceMapper.invoke(null);
-        }else if (mapper instanceof IDbExportMapper){
-        	IDbExportMapper<DbExportStateBase<?, TRANSFORM>, TRANSFORM> dbMapper = (IDbExportMapper)mapper;
-        	try {
-        		result &= dbMapper.invoke(collectionObject);
-        	} catch (Exception e) {
-        		result = false;
-        		logger.error("Error occurred in mapping.invoke");
-        		e.printStackTrace();
-        		return result;
-        	}
-        }else{
-        	logger.warn("mapper is not of type " + IDbExportMapper.class.getSimpleName());
-        }
-        return result;
-    }
-
-	private boolean isFiltered(CdmBase cdmBase) throws SQLException {
-		for (DbSimpleFilterMapper filterMapper : this.filterMapper){
-			boolean result = filterMapper.doInvoke(cdmBase);
-			if (result == true){
-				return true;
-			}
-		}
-		return false;
-	}
-
-	private Collection<CdmBase> getCollection(CdmBase cdmBase){
-		Object result = ImportHelper.getValue(cdmBase, collectionAttributeName, false, true);
-		return (Collection<CdmBase>)result;
-	}
-
-
-}
+/**
+* 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.io.common.mapping.out;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbExportConfiguratorBase;
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+import eu.etaxonomy.cdm.io.common.ImportHelper;
+import eu.etaxonomy.cdm.io.common.Source;
+import eu.etaxonomy.cdm.io.common.mapping.CdmAttributeMapperBase;
+import eu.etaxonomy.cdm.io.common.mapping.CdmMapperBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * @author a.mueller
+ * @since 12.05.2009
+ */
+public class CollectionExportMapping<STATE extends DbExportStateBase<CONFIG, TRANSFORM>, CONFIG extends DbExportConfiguratorBase<STATE, TRANSFORM, Source>, TRANSFORM extends IExportTransformer>
+        extends CdmDbExportMapping<STATE, CONFIG, TRANSFORM> {
+
+    private static final Logger logger = LogManager.getLogger();
+
+	private IdMapper parentMapper;
+	private DbSequenceMapper sequenceMapper;
+	private String collectionAttributeName;
+	private List<DbSimpleFilterMapper> filterMapper = new ArrayList<>() ;
+
+	public static CollectionExportMapping NewInstance(String tableName, String collectionAttributeName, IdMapper parentMapper){
+		return new CollectionExportMapping(tableName, collectionAttributeName, parentMapper, null);
+	}
+
+	public static CollectionExportMapping NewInstance(String tableName, String collectionAttributeName, IdMapper parentMapper, String seqenceAttribute){
+		return NewInstance(tableName, collectionAttributeName, parentMapper, seqenceAttribute, 0);
+	}
+
+	public static CollectionExportMapping NewInstance(String tableName, String collectionAttributeName, IdMapper parentMapper, String seqenceAttribute, int sequenceStart){
+		DbSequenceMapper sequenceMapper = DbSequenceMapper.NewInstance(seqenceAttribute, sequenceStart);
+		CollectionExportMapping result = new CollectionExportMapping(tableName, collectionAttributeName, parentMapper, sequenceMapper);
+		return result;
+	}
+
+
+	@Override
+	public void addMapper(CdmAttributeMapperBase mapper) {
+		if (mapper instanceof DbSimpleFilterMapper){
+			DbSimpleFilterMapper filterMapper = (DbSimpleFilterMapper)mapper;
+			this.filterMapper.add(filterMapper);
+		}else{
+			super.addMapper(mapper);
+		}
+	}
+
+	private CollectionExportMapping(String tableName, String collectionAttributeName, IdMapper parentMapper, DbSequenceMapper sequenceMapper){
+		super(tableName);
+		this.parentMapper = parentMapper;
+		this.addMapper(parentMapper);
+		this.sequenceMapper = sequenceMapper;
+		this.addMapper(sequenceMapper);
+		this.collectionAttributeName = collectionAttributeName;
+	}
+
+
+	@Override
+	public boolean invoke(CdmBase parent) {
+		boolean result = true;
+		Collection<CdmBase> collection = getCollection(parent);
+		if (this.sequenceMapper != null){
+			this.sequenceMapper.reset();
+		}
+		for(CdmBase collectionObject : collection){
+		    try {
+				if (collectionObject == null){
+					logger.warn("Collection object was null");
+					result = false;
+					continue;
+				}
+				if (isFiltered(collectionObject)){
+					continue;
+				}
+				for (CdmMapperBase mapper : this.mapperList){
+					result &= handleSingleMapper(parent, collectionObject, mapper);
+				}
+				int count = getPreparedStatement().executeUpdate();
+				if (logger.isDebugEnabled()) {
+                    logger.debug("Number of rows affected: " + count);
+                }
+			} catch(SQLException e){
+                e.printStackTrace();
+                logger.error(e.getMessage() + ": " + parent.toString());
+                result = false;
+            }
+		}
+		return result;
+	}
+
+    private boolean handleSingleMapper(CdmBase parent, CdmBase collectionObject, CdmMapperBase mapper)
+            throws SQLException {
+
+        boolean result = true;
+        if (mapper == this.parentMapper){
+        	parentMapper.invoke(parent);
+        }else if (mapper == this.sequenceMapper){
+        	this.sequenceMapper.invoke(null);
+        }else if (mapper instanceof IDbExportMapper){
+        	IDbExportMapper<DbExportStateBase<?, TRANSFORM>, TRANSFORM> dbMapper = (IDbExportMapper)mapper;
+        	try {
+        		result &= dbMapper.invoke(collectionObject);
+        	} catch (Exception e) {
+        		result = false;
+        		logger.error("Error occurred in mapping.invoke");
+        		e.printStackTrace();
+        		return result;
+        	}
+        }else{
+        	logger.warn("mapper is not of type " + IDbExportMapper.class.getSimpleName());
+        }
+        return result;
+    }
+
+	private boolean isFiltered(CdmBase cdmBase) throws SQLException {
+		for (DbSimpleFilterMapper filterMapper : this.filterMapper){
+			boolean result = filterMapper.doInvoke(cdmBase);
+			if (result == true){
+				return true;
+			}
+		}
+		return false;
+	}
+
+	private Collection<CdmBase> getCollection(CdmBase cdmBase){
+		Object result = ImportHelper.getValue(cdmBase, collectionAttributeName, false, true);
+		return (Collection<CdmBase>)result;
+	}
+
+
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CreatedAndNotesMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CreatedAndNotesMapper.java
index 395239a414..e27b4d412d 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CreatedAndNotesMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/CreatedAndNotesMapper.java
@@ -1,94 +1,97 @@
-/**
-* 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.io.common.mapping.out;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.common.CdmUtils;
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-import eu.etaxonomy.cdm.io.common.mapping.MultipleAttributeMapperBase;
-import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
-import eu.etaxonomy.cdm.model.common.Annotation;
-import eu.etaxonomy.cdm.model.common.AnnotationType;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * @author a.mueller
- * @since 12.05.2009
- * @version 1.0
- */
-public class CreatedAndNotesMapper extends MultipleAttributeMapperBase<DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(CreatedAndNotesMapper.class);
-	
-	public static CreatedAndNotesMapper NewInstance(){
-		return new CreatedAndNotesMapper(true);
-	}
-	
-	public static CreatedAndNotesMapper NewInstance(boolean withUpdate){
-		return new CreatedAndNotesMapper(withUpdate);
-	}
-
-	
-	/**
-	 * @param dbAttributString
-	 * @param cdmAttributeString
-	 */
-	private CreatedAndNotesMapper(boolean withUpdate) {
-		singleMappers.add(DbUserMapper.NewInstance("createdBy", "Created_Who"));
-		singleMappers.add(DbDateMapper.NewInstance("created", "Created_When"));
-		singleMappers.add(MethodMapper.NewInstance("Notes", this.getClass(), "getNotes", AnnotatableEntity.class));
-		if (withUpdate){
-			singleMappers.add(DbUserMapper.NewInstance("updatedBy", "Updated_Who"));
-			singleMappers.add(DbDateMapper.NewInstance("updated", "Updated_When"));
-		}
-	}
-
-
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.IDbExportMapper#initialize(java.sql.PreparedStatement, eu.etaxonomy.cdm.io.berlinModel.out.mapper.IndexCounter, eu.etaxonomy.cdm.io.berlinModel.out.DbExportState)
-	 */
-	public void initialize(PreparedStatement stmt, IndexCounter index, DbExportStateBase<?, IExportTransformer> state, String tableName) {
-		for (DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> mapper : singleMappers){
-			mapper.initialize(stmt, index, state, tableName);
-		}	
-	}
-
-
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.IDbExportMapper#invoke(eu.etaxonomy.cdm.model.common.CdmBase)
-	 */
-	public boolean invoke(CdmBase cdmBase) throws SQLException {
-		boolean result = true;
-		for (DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> mapper : singleMappers){
-			result &= mapper.invoke(cdmBase);
-		}
-		return result;
-	}
-	
-	//used by MethodMapper
-	@SuppressWarnings("unused")
-	private static String getNotes(AnnotatableEntity obj){
-		String result = "";
-		String separator = ";";
-		for (Annotation annotation :obj.getAnnotations()){
-			if (! AnnotationType.TECHNICAL().equals(annotation.getAnnotationType())){
-				if (! ( annotation.getText() != null && annotation.getText().startsWith("ORDER:"))){  //TODO casus Salvador, should be stored in Extension ones extensions are also for annotatable entities
-					result = CdmUtils.concat(separator, result, annotation.getText());
-				}
-			}
-		}
-		return (result.trim().equals("")? null : result);
-	}
-	
-}
+/**
+* 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.io.common.mapping.out;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+import eu.etaxonomy.cdm.io.common.mapping.MultipleAttributeMapperBase;
+import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
+import eu.etaxonomy.cdm.model.common.Annotation;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * @author a.mueller
+ * @since 12.05.2009
+ */
+public class CreatedAndNotesMapper extends MultipleAttributeMapperBase<DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+	public static CreatedAndNotesMapper NewInstance(){
+		return new CreatedAndNotesMapper(true);
+	}
+
+	public static CreatedAndNotesMapper NewInstance(boolean withUpdate){
+		return new CreatedAndNotesMapper(withUpdate);
+	}
+
+
+	/**
+	 * @param dbAttributString
+	 * @param cdmAttributeString
+	 */
+	private CreatedAndNotesMapper(boolean withUpdate) {
+		singleMappers.add(DbUserMapper.NewInstance("createdBy", "Created_Who"));
+		singleMappers.add(DbDateMapper.NewInstance("created", "Created_When"));
+		singleMappers.add(MethodMapper.NewInstance("Notes", this.getClass(), "getNotes", AnnotatableEntity.class));
+		if (withUpdate){
+			singleMappers.add(DbUserMapper.NewInstance("updatedBy", "Updated_Who"));
+			singleMappers.add(DbDateMapper.NewInstance("updated", "Updated_When"));
+		}
+	}
+
+
+	/* (non-Javadoc)
+	 * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.IDbExportMapper#initialize(java.sql.PreparedStatement, eu.etaxonomy.cdm.io.berlinModel.out.mapper.IndexCounter, eu.etaxonomy.cdm.io.berlinModel.out.DbExportState)
+	 */
+	@Override
+    public void initialize(PreparedStatement stmt, IndexCounter index, DbExportStateBase<?, IExportTransformer> state, String tableName) {
+		for (DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> mapper : singleMappers){
+			mapper.initialize(stmt, index, state, tableName);
+		}
+	}
+
+
+	/* (non-Javadoc)
+	 * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.IDbExportMapper#invoke(eu.etaxonomy.cdm.model.common.CdmBase)
+	 */
+	@Override
+    public boolean invoke(CdmBase cdmBase) throws SQLException {
+		boolean result = true;
+		for (DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> mapper : singleMappers){
+			result &= mapper.invoke(cdmBase);
+		}
+		return result;
+	}
+
+	//used by MethodMapper
+	@SuppressWarnings("unused")
+	private static String getNotes(AnnotatableEntity obj){
+		String result = "";
+		String separator = ";";
+		for (Annotation annotation :obj.getAnnotations()){
+			if (! AnnotationType.TECHNICAL().equals(annotation.getAnnotationType())){
+				if (! ( annotation.getText() != null && annotation.getText().startsWith("ORDER:"))){  //TODO casus Salvador, should be stored in Extension ones extensions are also for annotatable entities
+					result = CdmUtils.concat(separator, result, annotation.getText());
+				}
+			}
+		}
+		return (result.trim().equals("")? null : result);
+	}
+
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbAnnotationMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbAnnotationMapper.java
index e22c8da2b0..f6b735835b 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbAnnotationMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbAnnotationMapper.java
@@ -14,7 +14,8 @@ import java.util.Collection;
 import java.util.HashSet;
 import java.util.UUID;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
@@ -34,7 +35,7 @@ public class DbAnnotationMapper
             extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>{
 
     @SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbAnnotationMapper.class);
+	private static final Logger logger = LogManager.getLogger();
 
 	private final String annotationPrefix;
 	private String separator = ";";
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbAreaMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbAreaMapper.java
index fb0d6ae49e..c2fa6fe69a 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbAreaMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbAreaMapper.java
@@ -12,7 +12,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 import java.lang.reflect.Method;
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -24,7 +25,8 @@ import eu.etaxonomy.cdm.model.location.NamedArea;
  * @since 06.02.2012
  */
 public class DbAreaMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
-	private static final Logger logger = LogManager.getLogger(DbAreaMapper.class);
+
+    private static final Logger logger = LogManager.getLogger();
 
 	private Method method;
 	private boolean isCache;
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbBooleanMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbBooleanMapper.java
index b5846724d1..7350702f1e 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbBooleanMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbBooleanMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 
 /**
@@ -25,7 +26,7 @@ public class DbBooleanMapper
         implements IDbExportMapper {
 
     @SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbBooleanMapper.class);
+	private static final Logger logger = LogManager.getLogger();
 
 	public static DbBooleanMapper NewInstance(String cdmAttributeString, String dbAttributeString){
 		return new DbBooleanMapper(cdmAttributeString, dbAttributeString, null, false);
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbClobMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbClobMapper.java
index c44d30afeb..ac9d55c717 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbClobMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbClobMapper.java
@@ -11,18 +11,19 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 
 /**
  * @author a.mueller
  * @since 12.05.2009
- * @version 1.0
  */
 public class DbClobMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer> {
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbClobMapper.class);
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
 
 	public static DbClobMapper NewInstance(String cdmAttributeString, String dbAttributeString){
 		return new DbClobMapper(cdmAttributeString, dbAttributeString, null);
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbConstantMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbConstantMapper.java
index c32b3a0e05..2f7e197a03 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbConstantMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbConstantMapper.java
@@ -1,58 +1,59 @@
-/**
-* 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.io.common.mapping.out;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * Maps to a constant value.
- *
- * TODO deduplicate with {@link DbFixedIntegerMapper} and {@link DbFixedStringMapper}.
- *
- * @author a.mueller
- * @since 12.05.2009
- */
-public class DbConstantMapper
-        extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>{
-
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbConstantMapper.class);
-
-	private int sqlType;
-	private Object value;
-
-	public static DbConstantMapper NewInstance(String dbIdAttributeString, int sqlType, Object value){
-		return new DbConstantMapper(dbIdAttributeString, sqlType, value);
-	}
-
-	protected DbConstantMapper(String dbAttributeString, int sqlType, Object value) {
-		super(null, dbAttributeString, null);
-		this.sqlType = sqlType;
-		this.value = value;
-	}
-
-	@Override
-	public Class<?> getTypeClass() {
-		return Integer.class;
-	}
-
-	@Override
-	protected Object getValue(CdmBase cdmBase) {
-		return value;
-	}
-
-	@Override
-	protected int getSqlType() {
-		return this.sqlType;
-	}
-}
+/**
+* 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.io.common.mapping.out;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * Maps to a constant value.
+ *
+ * TODO deduplicate with {@link DbFixedIntegerMapper} and {@link DbFixedStringMapper}.
+ *
+ * @author a.mueller
+ * @since 12.05.2009
+ */
+public class DbConstantMapper
+        extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>{
+
+	@SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+	private int sqlType;
+	private Object value;
+
+	public static DbConstantMapper NewInstance(String dbIdAttributeString, int sqlType, Object value){
+		return new DbConstantMapper(dbIdAttributeString, sqlType, value);
+	}
+
+	protected DbConstantMapper(String dbAttributeString, int sqlType, Object value) {
+		super(null, dbAttributeString, null);
+		this.sqlType = sqlType;
+		this.value = value;
+	}
+
+	@Override
+	public Class<?> getTypeClass() {
+		return Integer.class;
+	}
+
+	@Override
+	protected Object getValue(CdmBase cdmBase) {
+		return value;
+	}
+
+	@Override
+	protected int getSqlType() {
+		return this.sqlType;
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDateMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDateMapper.java
index 688273c523..1f694faa66 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDateMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDateMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.joda.time.DateTime;
 
 /**
@@ -21,7 +22,7 @@ import org.joda.time.DateTime;
 public class DbDateMapper extends DbSingleAttributeExportMapperBase implements IDbExportMapper {
 
 	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbStringMapper.class);
+	private static final Logger logger = LogManager.getLogger();
 
 	public static DbDateMapper NewInstance(String cdmAttributeString, String dbAttributeString){
 		return new DbDateMapper(cdmAttributeString, dbAttributeString, null);
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDescriptionElementTaxonMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDescriptionElementTaxonMapper.java
index 23868f6bbd..08ee6f8003 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDescriptionElementTaxonMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDescriptionElementTaxonMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -27,8 +28,9 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
  * @since 12.05.2009
  */
 public class DbDescriptionElementTaxonMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbDescriptionElementTaxonMapper.class);
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
 
 	private boolean isCache = false;
 	private boolean cacheIsNameTitleCache = false;
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDistributionStatusMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDistributionStatusMapper.java
index ff66860cb8..adcbeb80b2 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDistributionStatusMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDistributionStatusMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
@@ -26,8 +27,9 @@ import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
  * @since 06.02.2012
  */
 public class DbDistributionStatusMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbDistributionStatusMapper.class);
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
 
 	private boolean isCache = false;
 
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDoiMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDoiMapper.java
index 3e755cb98c..1c09a36fc6 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDoiMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbDoiMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.common.DOI;
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
@@ -26,7 +27,7 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
 public class DbDoiMapper
             extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> {
 
-    private static final Logger logger = LogManager.getLogger(DbDoiMapper.class);
+    private static final Logger logger = LogManager.getLogger();
 
     private static final int MAX_PRECISION = -1;  //precision for datatype nvarchar(max) == clob (SQL Server 2008)
 
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportIgnoreMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportIgnoreMapper.java
index b39d606100..5d339220ac 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportIgnoreMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportIgnoreMapper.java
@@ -1,88 +1,89 @@
-/**
-* 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.io.common.mapping.out;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * This mapper does not change any import object, but logs the information that a database
- * attribute is ignored for the mapping.
- *
- * @see DbNullMapper
- *
- * @author a.mueller
- * @since 25.02.2010
- */
-public class DbExportIgnoreMapper
-            extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> {
-
-    private static final Logger logger = LogManager.getLogger(DbExportIgnoreMapper.class);
-
-	public static DbExportIgnoreMapper NewInstance(String dbAttributeToIgnore){
-		return new DbExportIgnoreMapper(null, dbAttributeToIgnore, null, null);
-	}
-
-	public static DbExportIgnoreMapper NewInstance(String dbAttributeToIgnore, String reason){
-		return new DbExportIgnoreMapper(null, dbAttributeToIgnore, null, reason);
-	}
-
-//*************************** VARIABLES ***************************************************************//
-
-	protected String ignoreReason;
-	protected String dbAttributeString;
-
-//*************************** CONSTRUCTOR ***************************************************************//
-
-	protected DbExportIgnoreMapper(String cdmAttributeString, String dbAttributeString, Object defaultValue, String ignoreReason) {
-		super(cdmAttributeString, null, defaultValue);
-		//we do not pass to parent, otherwise this is part of the prepared statement
-		//once we check if all fields of a table are mapped this behavior needs to be changed
-		//or at least the checking mechanism needs to know that this attribute is handled (but ignored)
-		this.dbAttributeString = dbAttributeString;
-		this.ignoreReason = ignoreReason;
-	}
-
-	@Override
-	public void initialize(PreparedStatement stmt, IndexCounter index, DbExportStateBase state, String tableName) {
-		initializeLogging();
-		exportMapperHelper.initializeNull(stmt, state, tableName);
-	}
-
-    protected void initializeLogging() {
-        String attributeName = dbAttributeString; //this.getDestinationAttribute();
-        String localReason = "";
-        if (StringUtils.isNotBlank(ignoreReason)){
-            localReason = " (" + ignoreReason +")";
-        }
-        logger.warn(attributeName + " ignored" +  localReason + ".");
-    }
-
-    @Override
-	protected boolean doInvoke(CdmBase cdmBase) throws SQLException {
-		return true;   // do nothing
-	}
-
-	@Override
-	public Class getTypeClass() {
-		return null;  //not needed
-	}
-
-	@Override
-	protected int getSqlType() {
-		return -1;  // not needed
-	}
-}
+/**
+* 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.io.common.mapping.out;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * This mapper does not change any import object, but logs the information that a database
+ * attribute is ignored for the mapping.
+ *
+ * @see DbNullMapper
+ *
+ * @author a.mueller
+ * @since 25.02.2010
+ */
+public class DbExportIgnoreMapper
+            extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> {
+
+    private static final Logger logger = LogManager.getLogger();
+
+	public static DbExportIgnoreMapper NewInstance(String dbAttributeToIgnore){
+		return new DbExportIgnoreMapper(null, dbAttributeToIgnore, null, null);
+	}
+
+	public static DbExportIgnoreMapper NewInstance(String dbAttributeToIgnore, String reason){
+		return new DbExportIgnoreMapper(null, dbAttributeToIgnore, null, reason);
+	}
+
+//*************************** VARIABLES ***************************************************************//
+
+	protected String ignoreReason;
+	protected String dbAttributeString;
+
+//*************************** CONSTRUCTOR ***************************************************************//
+
+	protected DbExportIgnoreMapper(String cdmAttributeString, String dbAttributeString, Object defaultValue, String ignoreReason) {
+		super(cdmAttributeString, null, defaultValue);
+		//we do not pass to parent, otherwise this is part of the prepared statement
+		//once we check if all fields of a table are mapped this behavior needs to be changed
+		//or at least the checking mechanism needs to know that this attribute is handled (but ignored)
+		this.dbAttributeString = dbAttributeString;
+		this.ignoreReason = ignoreReason;
+	}
+
+	@Override
+	public void initialize(PreparedStatement stmt, IndexCounter index, DbExportStateBase state, String tableName) {
+		initializeLogging();
+		exportMapperHelper.initializeNull(stmt, state, tableName);
+	}
+
+    protected void initializeLogging() {
+        String attributeName = dbAttributeString; //this.getDestinationAttribute();
+        String localReason = "";
+        if (StringUtils.isNotBlank(ignoreReason)){
+            localReason = " (" + ignoreReason +")";
+        }
+        logger.warn(attributeName + " ignored" +  localReason + ".");
+    }
+
+    @Override
+	protected boolean doInvoke(CdmBase cdmBase) throws SQLException {
+		return true;   // do nothing
+	}
+
+	@Override
+	public Class getTypeClass() {
+		return null;  //not needed
+	}
+
+	@Override
+	protected int getSqlType() {
+		return -1;  // not needed
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportMapperBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportMapperBase.java
index afe85d7d2e..d28503464e 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportMapperBase.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportMapperBase.java
@@ -1,67 +1,68 @@
-/**
-* 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.io.common.mapping.out;
-
-import java.sql.PreparedStatement;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-
-/**
- * @author a.mueller
- * @since 12.05.2009
- */
-public class DbExportMapperBase<STATE extends DbExportStateBase<?, IExportTransformer>>  /*implements IDbExportMapper */{
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbExportMapperBase.class);
-
-	protected PreparedStatement preparedStatement = null;
-	protected int index = 0;
-	private STATE state;
-	private String tableName;
-
-	public void initialize(PreparedStatement stmt, IndexCounter index, STATE state, String tableName) {
-		this.preparedStatement = stmt;
-		this.index = index.getIncreasing();
-		this.state = state;
-		this.tableName = tableName;
-	}
-
-	/**
-	 * Initialize the mapper in a way that it does not add any data
-	 * to the prepared statement.
-	 */
-	public void initializeNull(PreparedStatement stmt, STATE state, String tableName) {
-		this.preparedStatement = stmt;
-		this.index = -1;
-		this.state = state;
-		this.tableName = tableName;
-	}
-
-	public PreparedStatement getPreparedStatement() {
-		return preparedStatement;
-	}
-
-	public int getIndex() {
-		return index;
-	}
-
-	public STATE getState() {
-		return state;
-	}
-
-	public String getTableName() {
-		return tableName;
-	}
-	public void setTableName(String tableName) {
-		this.tableName = tableName;
-	}
-}
+/**
+* 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.io.common.mapping.out;
+
+import java.sql.PreparedStatement;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+
+/**
+ * @author a.mueller
+ * @since 12.05.2009
+ */
+public class DbExportMapperBase<STATE extends DbExportStateBase<?, IExportTransformer>>  /*implements IDbExportMapper */{
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+	protected PreparedStatement preparedStatement = null;
+	protected int index = 0;
+	private STATE state;
+	private String tableName;
+
+	public void initialize(PreparedStatement stmt, IndexCounter index, STATE state, String tableName) {
+		this.preparedStatement = stmt;
+		this.index = index.getIncreasing();
+		this.state = state;
+		this.tableName = tableName;
+	}
+
+	/**
+	 * Initialize the mapper in a way that it does not add any data
+	 * to the prepared statement.
+	 */
+	public void initializeNull(PreparedStatement stmt, STATE state, String tableName) {
+		this.preparedStatement = stmt;
+		this.index = -1;
+		this.state = state;
+		this.tableName = tableName;
+	}
+
+	public PreparedStatement getPreparedStatement() {
+		return preparedStatement;
+	}
+
+	public int getIndex() {
+		return index;
+	}
+
+	public STATE getState() {
+		return state;
+	}
+
+	public String getTableName() {
+		return tableName;
+	}
+	public void setTableName(String tableName) {
+		this.tableName = tableName;
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportNotYetImplementedMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportNotYetImplementedMapper.java
index 5770b337cd..b5065be57a 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportNotYetImplementedMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExportNotYetImplementedMapper.java
@@ -1,53 +1,54 @@
-/**
-* 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.io.common.mapping.out;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-/**
- * This mapper does not change any import object, but keeps the information that a database
- * attribute needs to be mapped but is not yet mapped.
- *
- * @see DbExportIgnoreMapper
- * @see DbNullMapper
- *
- * @author a.mueller
- * @since 25.02.2010
- */
-public class DbExportNotYetImplementedMapper
-        extends DbExportIgnoreMapper {
-
-    private static final Logger logger = LogManager.getLogger(DbExportNotYetImplementedMapper.class);
-
-	public static DbExportNotYetImplementedMapper NewInstance(String dbAttributeToIgnore){
-		return new DbExportNotYetImplementedMapper(null, dbAttributeToIgnore, null, null);
-	}
-
-	public static DbExportNotYetImplementedMapper NewInstance(String dbAttributeToIgnore, String reason){
-		return new DbExportNotYetImplementedMapper(null, dbAttributeToIgnore, null, reason);
-	}
-
-//*************************** CONSTRUCTOR ***************************************************************//
-
-	protected DbExportNotYetImplementedMapper(String cdmAttributeString, String dbAttributString, Object defaultValue, String unimplementedReason) {
-		super(cdmAttributeString, dbAttributString, defaultValue, unimplementedReason);
-	}
-
-	@Override
-    protected void initializeLogging() {
-	    String attributeName = this.dbAttributeString;
-        String localReason = "";
-        if (StringUtils.isNotBlank(ignoreReason)){
-            localReason = " (" + ignoreReason +")";
-        }
-        logger.warn(attributeName + " not yet implemented." +  localReason);
-	}
-}
+/**
+* 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.io.common.mapping.out;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * This mapper does not change any import object, but keeps the information that a database
+ * attribute needs to be mapped but is not yet mapped.
+ *
+ * @see DbExportIgnoreMapper
+ * @see DbNullMapper
+ *
+ * @author a.mueller
+ * @since 25.02.2010
+ */
+public class DbExportNotYetImplementedMapper
+        extends DbExportIgnoreMapper {
+
+    private static final Logger logger = LogManager.getLogger();
+
+	public static DbExportNotYetImplementedMapper NewInstance(String dbAttributeToIgnore){
+		return new DbExportNotYetImplementedMapper(null, dbAttributeToIgnore, null, null);
+	}
+
+	public static DbExportNotYetImplementedMapper NewInstance(String dbAttributeToIgnore, String reason){
+		return new DbExportNotYetImplementedMapper(null, dbAttributeToIgnore, null, reason);
+	}
+
+//*************************** CONSTRUCTOR ***************************************************************//
+
+	protected DbExportNotYetImplementedMapper(String cdmAttributeString, String dbAttributString, Object defaultValue, String unimplementedReason) {
+		super(cdmAttributeString, dbAttributString, defaultValue, unimplementedReason);
+	}
+
+	@Override
+    protected void initializeLogging() {
+	    String attributeName = this.dbAttributeString;
+        String localReason = "";
+        if (StringUtils.isNotBlank(ignoreReason)){
+            localReason = " (" + ignoreReason +")";
+        }
+        logger.warn(attributeName + " not yet implemented." +  localReason);
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExtensionMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExtensionMapper.java
index eb8580a74f..39e03dea82 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExtensionMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbExtensionMapper.java
@@ -12,7 +12,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 import java.sql.Types;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
@@ -26,7 +27,8 @@ import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
  * @since 12.05.2009
  */
 public class DbExtensionMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
-	private static final Logger logger = LogManager.getLogger(DbExtensionMapper.class);
+
+    private static final Logger logger = LogManager.getLogger();
 
 	private final ExtensionType extensionType;
 
@@ -34,11 +36,6 @@ public class DbExtensionMapper extends DbSingleAttributeExportMapperBase<DbExpor
 		return new DbExtensionMapper(extensionType, dbAttributeString);
 	}
 
-
-	/**
-	 * @param dbAttributeString
-	 * @param cdmAttributeString
-	 */
 	protected DbExtensionMapper(ExtensionType extensionType, String dbAttributeString) {
 		super("extensions", dbAttributeString, null);
 		this.extensionType  = extensionType;
@@ -78,4 +75,4 @@ public class DbExtensionMapper extends DbSingleAttributeExportMapperBase<DbExpor
 	public Class<?> getTypeClass() {
 		return String.class;
 	}
-}
+}
\ No newline at end of file
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbFixedIntegerMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbFixedIntegerMapper.java
index 36544ad237..6562975d7a 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbFixedIntegerMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbFixedIntegerMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -28,7 +29,7 @@ public class DbFixedIntegerMapper
         extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> {
 
     @SuppressWarnings("unused")
-    private static final Logger logger = LogManager.getLogger(DbFixedIntegerMapper.class);
+    private static final Logger logger = LogManager.getLogger();
 
 	private Integer fixInteger;
 
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbFixedStringMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbFixedStringMapper.java
index d48a350af6..63e5bc93e2 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbFixedStringMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbFixedStringMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -24,7 +25,7 @@ public class DbFixedStringMapper
         extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>
         implements IDbExportMapper<DbExportStateBase<?,IExportTransformer>, IExportTransformer> {
 
-    private static final Logger logger = LogManager.getLogger(DbFixedStringMapper.class);
+    private static final Logger logger = LogManager.getLogger();
 
 	private static final int MAX_PRECISION = -1;  //precision for datatype nvarchar(max) == clob (SQL Server 2008)
 
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbImageMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbImageMapper.java
index 982826bc11..5208ef6d27 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbImageMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbImageMapper.java
@@ -12,7 +12,8 @@ import java.sql.Types;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.common.URI;
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
@@ -33,7 +34,7 @@ public class DbImageMapper
             implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
 
     @SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbImageMapper.class);
+	private static final Logger logger = LogManager.getLogger();
 
 	public static DbImageMapper NewInstance(String dbAttributeString){
 		return new DbImageMapper(dbAttributeString, null);
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbIntegerAnnotationMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbIntegerAnnotationMapper.java
index fbd341a464..d2b1202e37 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbIntegerAnnotationMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbIntegerAnnotationMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 
@@ -20,9 +21,8 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
  * @since 10.06.2009
  */
 public class DbIntegerAnnotationMapper extends DbAnnotationMapper {
-	private static final Logger logger = LogManager.getLogger(DbIntegerAnnotationMapper.class);
-
 
+	private static final Logger logger = LogManager.getLogger();
 
 	public static DbIntegerAnnotationMapper NewInstance(String annotationPrefix, String dbAttributeString){
 		return new DbIntegerAnnotationMapper(annotationPrefix, dbAttributeString, null);
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbIntegerExtensionMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbIntegerExtensionMapper.java
index b48da246e2..dbca435ad7 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbIntegerExtensionMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbIntegerExtensionMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.ExtensionType;
@@ -19,12 +20,10 @@ import eu.etaxonomy.cdm.model.common.ExtensionType;
 /**
  * @author a.mueller
  * @since 10.06.2009
- * @version 1.0
  */
 public class DbIntegerExtensionMapper extends DbExtensionMapper {
-	private static final Logger logger = LogManager.getLogger(DbIntegerExtensionMapper.class);
-
 
+	private static final Logger logger = LogManager.getLogger();
 
 	public static DbIntegerExtensionMapper NewInstance(ExtensionType extensionType, String dbAttributeString){
 		return new DbIntegerExtensionMapper(extensionType, dbAttributeString);
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbLanguageMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbLanguageMapper.java
index 730e7e25ab..6fe7ce6cbc 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbLanguageMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbLanguageMapper.java
@@ -12,7 +12,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 import java.lang.reflect.Method;
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -27,7 +28,7 @@ public class DbLanguageMapper
             extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>
             implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
 
-    private static final Logger logger = LogManager.getLogger(DbLanguageMapper.class);
+    private static final Logger logger = LogManager.getLogger();
 
 	private Method method;
 	private boolean isCache;
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbLastActionMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbLastActionMapper.java
index f7163725ce..94ba7612f3 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbLastActionMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbLastActionMapper.java
@@ -12,7 +12,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 import java.sql.Types;
 import java.util.UUID;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.joda.time.DateTime;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
@@ -29,7 +30,7 @@ public class DbLastActionMapper
         extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>{
 
     @SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbLastActionMapper.class);
+	private static final Logger logger = LogManager.getLogger();
 
 	public static final UUID uuidMarkerTypeHasNoLastAction = UUID.fromString("99652d5a-bc92-4251-b57d-0fec4d258ab7");
 	public static final UUID uuidAnnotationTypeLastAction = UUID.fromString("d0423ffd-d1dc-4571-ba05-eb724eec3c77");
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbMarkerMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbMarkerMapper.java
index 834288d80f..bdf4c3e539 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbMarkerMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbMarkerMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
@@ -22,11 +23,11 @@ import eu.etaxonomy.cdm.model.common.MarkerType;
 /**
  * @author a.mueller
  * @since 12.05.2009
- * @version 1.0
  */
 public class DbMarkerMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbMarkerMapper.class);
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
 
 	private final MarkerType markerType;
 
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbNullMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbNullMapper.java
index d61d983732..abd5165a04 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbNullMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbNullMapper.java
@@ -1,67 +1,68 @@
-/**
-* 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.io.common.mapping.out;
-
-import java.sql.Types;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * Mapper that inserts <code>null</code> to the target field.
- *
- * @see DbExportIgnoreMapper
- * @see DbExportNotYetImplementedMapper
- *
- * @author a.mueller
- * @since 12.05.2009
- */
-public class DbNullMapper
-        extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> {
-
-    @SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbNullMapper.class);
-
-    private int sqlType;
-
-	public static DbNullMapper NewInstance(String dbIdAttributeString, int sqlType){
-		return new DbNullMapper(dbIdAttributeString, sqlType);
-	}
-
-    public static DbNullMapper NewIntegerInstance(String dbIdAttributeString){
-        return new DbNullMapper(dbIdAttributeString, Types.INTEGER);
-    }
-
-    public static DbNullMapper NewStringInstance(String dbIdAttributeString){
-        return new DbNullMapper(dbIdAttributeString, Types.NVARCHAR);
-    }
-
-	protected DbNullMapper(String dbAttributeString, int sqlType) {
-		super(null, dbAttributeString, null);
-		this.sqlType = sqlType;
-	}
-
-	@Override
-	public Class<?> getTypeClass() {
-		return Integer.class;
-	}
-
-	@Override
-	protected Object getValue(CdmBase cdmBase) {
-		return null;
-	}
-
-	@Override
-	protected int getSqlType() {
-		return this.sqlType;
-	}
-}
+/**
+* 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.io.common.mapping.out;
+
+import java.sql.Types;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * Mapper that inserts <code>null</code> to the target field.
+ *
+ * @see DbExportIgnoreMapper
+ * @see DbExportNotYetImplementedMapper
+ *
+ * @author a.mueller
+ * @since 12.05.2009
+ */
+public class DbNullMapper
+        extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> {
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+    private int sqlType;
+
+	public static DbNullMapper NewInstance(String dbIdAttributeString, int sqlType){
+		return new DbNullMapper(dbIdAttributeString, sqlType);
+	}
+
+    public static DbNullMapper NewIntegerInstance(String dbIdAttributeString){
+        return new DbNullMapper(dbIdAttributeString, Types.INTEGER);
+    }
+
+    public static DbNullMapper NewStringInstance(String dbIdAttributeString){
+        return new DbNullMapper(dbIdAttributeString, Types.NVARCHAR);
+    }
+
+	protected DbNullMapper(String dbAttributeString, int sqlType) {
+		super(null, dbAttributeString, null);
+		this.sqlType = sqlType;
+	}
+
+	@Override
+	public Class<?> getTypeClass() {
+		return Integer.class;
+	}
+
+	@Override
+	protected Object getValue(CdmBase cdmBase) {
+		return null;
+	}
+
+	@Override
+	protected int getSqlType() {
+		return this.sqlType;
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbObjectMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbObjectMapper.java
index 114ebc685e..3d0dc25e22 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbObjectMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbObjectMapper.java
@@ -12,7 +12,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 import java.sql.Types;
 import java.util.Set;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.hibernate.Hibernate;
 
 import eu.etaxonomy.cdm.io.common.DbExportConfiguratorBase;
@@ -28,7 +29,7 @@ import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 public class DbObjectMapper
         extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>{
 
-	private static final Logger logger = LogManager.getLogger(DbObjectMapper.class);
+	private static final Logger logger = LogManager.getLogger();
 
 	boolean isCache;
 
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbOriginalNameMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbOriginalNameMapper.java
index 05f3e219d2..b3e4b87878 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbOriginalNameMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbOriginalNameMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -22,11 +23,11 @@ import eu.etaxonomy.cdm.model.reference.OriginalSourceBase;
 /**
  * @author a.mueller
  * @since 12.05.2009
- * @version 1.0
  */
 public class DbOriginalNameMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbOriginalNameMapper.class);
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
 
 	private boolean isCache = false;
 
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSequenceMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSequenceMapper.java
index 655b6b74ea..1999195162 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSequenceMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSequenceMapper.java
@@ -1,81 +1,83 @@
-/**
-* 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.io.common.mapping.out;
-
-import java.sql.Types;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * @author a.mueller
- * @since 12.05.2009
- * @version 1.0
- */
-public class DbSequenceMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbSequenceMapper.class);
-	private int sqlType = Types.INTEGER; ;
-	private int sequence;
-	private int start = 0;
-	
-	public static DbSequenceMapper NewInstance(String dbAttributeString){
-		return new DbSequenceMapper(dbAttributeString, 0);
-	}
-
-	
-	public static DbSequenceMapper NewInstance(String dbAttributeString, int start){
-		return new DbSequenceMapper(dbAttributeString, start);
-	}
-	
-	/**
-	 * @param dbAttributString
-	 * @param cdmAttributeString
-	 */
-	protected DbSequenceMapper(String dbAttributeString, int start) {
-		super(null, dbAttributeString, null);
-		this.start = start;
-		this.reset();
-	}
-	
-	public void reset(){
-		this.sequence = this.start;
-	}
-
-
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase#getTypeClass()
-	 */
-	@Override
-	public Class<?> getTypeClass() {
-		return Integer.class;
-	}
-
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValue()
-	 */
-	@Override
-	protected Object getValue(CdmBase cdmBase) {
-		return this.sequence++;
-	}
-	
-	
-
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()
-	 */
-	@Override
-	protected int getSqlType() {
-		return this.sqlType;
-	}
-	
-}
+/**
+* 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.io.common.mapping.out;
+
+import java.sql.Types;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * @author a.mueller
+ * @since 12.05.2009
+ */
+public class DbSequenceMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+	private int sqlType = Types.INTEGER;
+	private int sequence;
+	private int start = 0;
+
+	public static DbSequenceMapper NewInstance(String dbAttributeString){
+		return new DbSequenceMapper(dbAttributeString, 0);
+	}
+
+
+	public static DbSequenceMapper NewInstance(String dbAttributeString, int start){
+		return new DbSequenceMapper(dbAttributeString, start);
+	}
+
+	/**
+	 * @param dbAttributString
+	 * @param cdmAttributeString
+	 */
+	protected DbSequenceMapper(String dbAttributeString, int start) {
+		super(null, dbAttributeString, null);
+		this.start = start;
+		this.reset();
+	}
+
+	public void reset(){
+		this.sequence = this.start;
+	}
+
+
+	/* (non-Javadoc)
+	 * @see eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase#getTypeClass()
+	 */
+	@Override
+	public Class<?> getTypeClass() {
+		return Integer.class;
+	}
+
+	/* (non-Javadoc)
+	 * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValue()
+	 */
+	@Override
+	protected Object getValue(CdmBase cdmBase) {
+		return this.sequence++;
+	}
+
+
+
+	/* (non-Javadoc)
+	 * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()
+	 */
+	@Override
+	protected int getSqlType() {
+		return this.sqlType;
+	}
+
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSimpleFilterMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSimpleFilterMapper.java
index 55db477975..429358b144 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSimpleFilterMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSimpleFilterMapper.java
@@ -1,109 +1,111 @@
-/**
-* 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.io.common.mapping.out;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * This mapper removes objects from the stream of objects to be mapped.
- * This is a very preliminary implementation. In future there will be at least an
- * interface to implement and some more parameter to better define which values to include/exclude.
- *
- * Current implementation
- *
- * @author a.mueller
- * @since 13.02.2012
- */
-public class DbSimpleFilterMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> {
-	private static final Logger logger = LogManager.getLogger(DbSimpleFilterMapper.class);
-
-	/**
-	 * Returns a filter mapper which filters out objects which have
-	 * <code>null</code> value for the given source attribute.
-	 */
-	public static DbSimpleFilterMapper NewSingleNullAttributeInstance(String cdmFilterCriterionAttribute, String reason){
-	    Set<Object> notAllowedValues = new HashSet<>();
-	    notAllowedValues.add(null);
-	    return new DbSimpleFilterMapper(null, cdmFilterCriterionAttribute, null, notAllowedValues, null, reason);
-	}
-
-    public static DbSimpleFilterMapper NewAllowedValueInstance(String cdmFilterCriterionAttribute,
-            Set<?> allowedValues, Set<?> notAllowedValues, String reason){
-        return new DbSimpleFilterMapper(null, cdmFilterCriterionAttribute,
-                allowedValues, notAllowedValues, null, reason);
-    }
-
-//*************************** VARIABLES ***************************************************************//
-
-	private String filterReason;
-	private Set<?> allowedValues;
-	private Set<?> notAllowedValues;
-
-
-//*************************** CONSTRUCTOR ***************************************************************//
-
-	protected DbSimpleFilterMapper(String dbAttributString, String cdmAttributeString,
-	        Set<?> allowedValues, Set<?> notAllowedValues, Object defaultValue, String filterReason) {
-		super(cdmAttributeString, dbAttributString, defaultValue);
-		this.filterReason = filterReason;
-		this.allowedValues = allowedValues;
-		this.notAllowedValues = notAllowedValues;
-	}
-
-	@Override
-	public void initialize(PreparedStatement stmt, IndexCounter index, DbExportStateBase state, String tableName) {
-		String attributeName = this.getDestinationAttribute();
-		String localReason = "";
-		if (StringUtils.isNotBlank(filterReason)){
-			localReason = " (" + filterReason +")";
-		}
-		logger.info(" Some objects are filtered on " + attributeName + "." +  localReason);
-		exportMapperHelper.initializeNull(stmt, state, tableName);
-	}
-
-	@Override
-	protected boolean doInvoke(CdmBase cdmBase) throws SQLException {
-		if (isFiltered(cdmBase)){
-			return false;
-		}else{
-			return true; // do nothing
-		}
-	}
-
-	private boolean isFiltered(CdmBase cdmBase) {
-		Object value = super.getValue(cdmBase);
-		if (allowedValues != null && !allowedValues.contains(value)){
-		    return true;  //filtered out
-		}else if (notAllowedValues.contains(value)){
-		    return true;
-		}else{
-		    return false;
-		}
-	}
-
-	@Override
-	public Class getTypeClass() {
-		return null;  //not needed
-	}
-
-	@Override
-	protected int getSqlType() {
-		return -1;  // not needed
-	}
-}
+/**
+* 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.io.common.mapping.out;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * This mapper removes objects from the stream of objects to be mapped.
+ * This is a very preliminary implementation. In future there will be at least an
+ * interface to implement and some more parameter to better define which values to include/exclude.
+ *
+ * Current implementation
+ *
+ * @author a.mueller
+ * @since 13.02.2012
+ */
+public class DbSimpleFilterMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> {
+
+    private static final Logger logger = LogManager.getLogger();
+
+	/**
+	 * Returns a filter mapper which filters out objects which have
+	 * <code>null</code> value for the given source attribute.
+	 */
+	public static DbSimpleFilterMapper NewSingleNullAttributeInstance(String cdmFilterCriterionAttribute, String reason){
+	    Set<Object> notAllowedValues = new HashSet<>();
+	    notAllowedValues.add(null);
+	    return new DbSimpleFilterMapper(null, cdmFilterCriterionAttribute, null, notAllowedValues, null, reason);
+	}
+
+    public static DbSimpleFilterMapper NewAllowedValueInstance(String cdmFilterCriterionAttribute,
+            Set<?> allowedValues, Set<?> notAllowedValues, String reason){
+        return new DbSimpleFilterMapper(null, cdmFilterCriterionAttribute,
+                allowedValues, notAllowedValues, null, reason);
+    }
+
+//*************************** VARIABLES ***************************************************************//
+
+	private String filterReason;
+	private Set<?> allowedValues;
+	private Set<?> notAllowedValues;
+
+
+//*************************** CONSTRUCTOR ***************************************************************//
+
+	protected DbSimpleFilterMapper(String dbAttributString, String cdmAttributeString,
+	        Set<?> allowedValues, Set<?> notAllowedValues, Object defaultValue, String filterReason) {
+		super(cdmAttributeString, dbAttributString, defaultValue);
+		this.filterReason = filterReason;
+		this.allowedValues = allowedValues;
+		this.notAllowedValues = notAllowedValues;
+	}
+
+	@Override
+	public void initialize(PreparedStatement stmt, IndexCounter index, DbExportStateBase state, String tableName) {
+		String attributeName = this.getDestinationAttribute();
+		String localReason = "";
+		if (StringUtils.isNotBlank(filterReason)){
+			localReason = " (" + filterReason +")";
+		}
+		logger.info(" Some objects are filtered on " + attributeName + "." +  localReason);
+		exportMapperHelper.initializeNull(stmt, state, tableName);
+	}
+
+	@Override
+	protected boolean doInvoke(CdmBase cdmBase) throws SQLException {
+		if (isFiltered(cdmBase)){
+			return false;
+		}else{
+			return true; // do nothing
+		}
+	}
+
+	private boolean isFiltered(CdmBase cdmBase) {
+		Object value = super.getValue(cdmBase);
+		if (allowedValues != null && !allowedValues.contains(value)){
+		    return true;  //filtered out
+		}else if (notAllowedValues.contains(value)){
+		    return true;
+		}else{
+		    return false;
+		}
+	}
+
+	@Override
+	public Class getTypeClass() {
+		return null;  //not needed
+	}
+
+	@Override
+	protected int getSqlType() {
+		return -1;  // not needed
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSingleAttributeExportMapperBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSingleAttributeExportMapperBase.java
index 20f2fdcdae..c3193c222a 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSingleAttributeExportMapperBase.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSingleAttributeExportMapperBase.java
@@ -1,226 +1,227 @@
-/**
-* 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.io.common.mapping.out;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-import org.joda.time.DateTime;
-
-import eu.etaxonomy.cdm.common.CdmUtils;
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-import eu.etaxonomy.cdm.io.common.ImportHelper;
-import eu.etaxonomy.cdm.io.common.Source;
-import eu.etaxonomy.cdm.io.common.mapping.CdmSingleAttributeMapperBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * @author a.mueller
- * @since 12.05.2009
- */
-public abstract class DbSingleAttributeExportMapperBase<STATE extends DbExportStateBase<?, IExportTransformer>>
-        extends CdmSingleAttributeMapperBase
-        implements IDbExportMapper<STATE, IExportTransformer>  {
-
-    private static final Logger logger = LogManager.getLogger(DbSingleAttributeExportMapperBase.class);
-
-	protected DbExportMapperBase<STATE> exportMapperHelper = new DbExportMapperBase<>();
-	private Integer precision = null;
-	//if the source attribute (not the value) is obligatory, currently results in error logging only
-	protected boolean obligatory = true;
-	protected boolean notNull = false;
-
-	protected DbSingleAttributeExportMapperBase(String cdmAttributeString, String dbAttributString, Object defaultValue) {
-		super(cdmAttributeString, dbAttributString, defaultValue);
-	}
-
-	/**
-     * @param cdmAttributeString source attribute (CDM)
-     * @param dbAttributString target attribute (export DB)
-     * @param defaultValue default value if source value is <code>null</code>
-     * @param obligatory if the source attribute is obligatory, but value may be <code>null</code>
-     */
-    protected DbSingleAttributeExportMapperBase(String cdmAttributeString, String dbAttributString, Object defaultValue, boolean obligatory, boolean notNull) {
-        super(cdmAttributeString, dbAttributString, defaultValue);
-        this.notNull = notNull;
-        this.obligatory = obligatory;
-    }
-
-	@Override
-    public void initialize(PreparedStatement stmt, IndexCounter index, STATE state, String tableName) {
-		exportMapperHelper.initialize(stmt, index, state, tableName);
-		this.precision = getDbColumnIntegerInfo("c.prec");
-	}
-
-	@Override
-    public boolean invoke(CdmBase cdmBase) throws SQLException {
-		if (exportMapperHelper.preparedStatement == null){
-			logger.warn("PreparedStatement is null");
-			return false;
-		}else{
-			return doInvoke(cdmBase);
-		}
-	}
-
-	protected boolean doInvoke(CdmBase cdmBase) throws SQLException {
-		try {
-			Object value = getValue(cdmBase);
-			int sqlType = getSqlType();
-			//use default value if necessary
-			if (value == null && defaultValue != null){
-				value = defaultValue;
-			}
-			if (value == null){
-			    if (notNull){
-			        logger.error("Value for '"+this.getSourceAttribute()+"' is null but a value is required. Object: " + cdmBase.toString());
-			        return false;
-			    }else{
-			        getPreparedStatement().setNull(getIndex(), sqlType);
-			    }
-			}else{
-				if (sqlType == Types.INTEGER){
-					try{
-						getPreparedStatement().setInt(getIndex(), (Integer)value);
-					}catch (Exception e) {
-						logger.error("Exception: " + e.getLocalizedMessage() + ": " + cdmBase.toString());
-						value = getValue(cdmBase);
-						throw new RuntimeException( e);
-					}
-				}else if (sqlType == Types.CLOB){
-					getPreparedStatement().setString(getIndex(), (String)value);
-				}else if (sqlType == Types.VARCHAR){
-					String strValue = (String)value;
-//					if (strValue.length() > 255){
-//						logger.debug("String to long (" + strValue.length() + ") for object " + cdmBase.toString() + ": " + value);
-//					}
-					int precision = getPrecision();
-					if (strValue.length() > 450){
-						logger.debug(">450");
-					}
-
-					if (strValue.length() > precision && precision > 0 ){
-						logger.warn("The length of the string to save ("+ getDestinationAttribute() + ") is longer than the database columns precision ("+precision+"). String will be truncated: " + strValue);
-						if (precision >= 4) {
-							strValue = strValue.substring(0, precision - 4 )+" ...";
-						} else {
-							strValue = strValue.substring(0, precision);
-						}
-					}
-					getPreparedStatement().setString(getIndex(), strValue);
-				}else if (sqlType == Types.BOOLEAN){
-					getPreparedStatement().setBoolean(getIndex(), (Boolean)value);
-				}else if (sqlType == Types.DATE){
-				    java.sql.Timestamp sqlTimestamp;
-				    if(value instanceof String){
-				        String strDate = (String)value;
-				        sqlTimestamp = java.sql.Timestamp.valueOf(strDate);
-				    }else{
-				        DateTime dateTime = (DateTime)value;
-				        java.util.Date date = dateTime.toDate();
-				        long t = date.getTime();
-				        sqlTimestamp = new java.sql.Timestamp(t);
-				    }
-					getPreparedStatement().setTimestamp(getIndex(), sqlTimestamp);
-				}else{
-					throw new IllegalArgumentException("SqlType not yet supported yet: " + sqlType);
-				}
-			}
-			return true;
-		} catch (SQLException e) {
-			logger.warn("SQL Exception: " + e.getLocalizedMessage());
-			throw e;
-		} catch (IllegalArgumentException e) {
-			logger.error("IllegalArgumentException: " + e.getLocalizedMessage() + ": " + cdmBase.toString());
-			return false;
-		} catch (Exception e) {
-			logger.error("Exception: " + e.getLocalizedMessage() + ": " + cdmBase.toString());
-			throw new RuntimeException( e);
-		}
-	}
-
-	protected Object getValue(CdmBase cdmBase){
-		boolean isBoolean = (this.getTypeClass() == boolean.class || this.getTypeClass() == Boolean.class);
-		return ImportHelper.getValue(cdmBase, this.getSourceAttribute(), isBoolean, obligatory);
-	}
-
-	protected abstract int getSqlType();
-
-	public PreparedStatement getPreparedStatement() {
-		return exportMapperHelper.getPreparedStatement();
-	}
-
-	public int getIndex() {
-		return exportMapperHelper.getIndex();
-	}
-
-	public STATE getState() {
-		return exportMapperHelper.getState();
-	}
-
-	public String getTableName() {
-		return exportMapperHelper.getTableName();
-	}
-
-	protected boolean checkSqlServerColumnExists(){
-		Source source = getState().getConfig().getDestination();
-		String strQuery = "SELECT  Count(t.id) as n " +
-				" FROM sysobjects AS t " +
-				" INNER JOIN syscolumns AS c ON t.id = c.id " +
-				" WHERE (t.xtype = 'U') AND " +
-				" (t.name = '" + getTableName() + "') AND " +
-				" (c.name = '" + getDestinationAttribute() + "')";
-		ResultSet rs = source.getResultSet(strQuery) ;
-		int n;
-		try {
-			rs.next();
-			n = rs.getInt("n");
-			return n>0;
-		} catch (SQLException e) {
-			e.printStackTrace();
-			return false;
-		}
-	}
-
-	protected int getPrecision(){
-		return this.precision;
-	}
-
-	protected int getDbColumnIntegerInfo(String selectPart){
-		Source source = getState().getConfig().getDestination();
-		String strQuery = "SELECT  " + selectPart + " as result" +
-				" FROM sysobjects AS t " +
-				" INNER JOIN syscolumns AS c ON t.id = c.id " +
-				" WHERE (t.xtype = 'U') AND " +
-				" (t.name = '" + getTableName() + "') AND " +
-				" (c.name = '" + getDestinationAttribute() + "')";
-		ResultSet rs = source.getResultSet(strQuery) ;
-		int n;
-		try {
-			rs.next();
-			n = rs.getInt("result");
-			return n;
-		} catch (Exception e) {
-			System.out.println(strQuery);
-		    logger.error(e.getMessage() + ", selectPart: " + CdmUtils.Nz(selectPart) + ", table: " + CdmUtils.Nz(getTableName()) +", destination: " + CdmUtils.Nz(getDestinationAttribute()));
-			e.printStackTrace();
-			return -1;
-		}
-	}
-
-	@Override
-    public String toString(){
-		String sourceAtt = CdmUtils.Nz(getSourceAttribute());
-		String destAtt = CdmUtils.Nz(getDestinationAttribute());
-		return this.getClass().getSimpleName() +"[" + sourceAtt + "->" + destAtt + "]";
-	}
-}
+/**
+* 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.io.common.mapping.out;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.joda.time.DateTime;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+import eu.etaxonomy.cdm.io.common.ImportHelper;
+import eu.etaxonomy.cdm.io.common.Source;
+import eu.etaxonomy.cdm.io.common.mapping.CdmSingleAttributeMapperBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * @author a.mueller
+ * @since 12.05.2009
+ */
+public abstract class DbSingleAttributeExportMapperBase<STATE extends DbExportStateBase<?, IExportTransformer>>
+        extends CdmSingleAttributeMapperBase
+        implements IDbExportMapper<STATE, IExportTransformer>  {
+
+    private static final Logger logger = LogManager.getLogger();
+
+	protected DbExportMapperBase<STATE> exportMapperHelper = new DbExportMapperBase<>();
+	private Integer precision = null;
+	//if the source attribute (not the value) is obligatory, currently results in error logging only
+	protected boolean obligatory = true;
+	protected boolean notNull = false;
+
+	protected DbSingleAttributeExportMapperBase(String cdmAttributeString, String dbAttributString, Object defaultValue) {
+		super(cdmAttributeString, dbAttributString, defaultValue);
+	}
+
+	/**
+     * @param cdmAttributeString source attribute (CDM)
+     * @param dbAttributString target attribute (export DB)
+     * @param defaultValue default value if source value is <code>null</code>
+     * @param obligatory if the source attribute is obligatory, but value may be <code>null</code>
+     */
+    protected DbSingleAttributeExportMapperBase(String cdmAttributeString, String dbAttributString, Object defaultValue, boolean obligatory, boolean notNull) {
+        super(cdmAttributeString, dbAttributString, defaultValue);
+        this.notNull = notNull;
+        this.obligatory = obligatory;
+    }
+
+	@Override
+    public void initialize(PreparedStatement stmt, IndexCounter index, STATE state, String tableName) {
+		exportMapperHelper.initialize(stmt, index, state, tableName);
+		this.precision = getDbColumnIntegerInfo("c.prec");
+	}
+
+	@Override
+    public boolean invoke(CdmBase cdmBase) throws SQLException {
+		if (exportMapperHelper.preparedStatement == null){
+			logger.warn("PreparedStatement is null");
+			return false;
+		}else{
+			return doInvoke(cdmBase);
+		}
+	}
+
+	protected boolean doInvoke(CdmBase cdmBase) throws SQLException {
+		try {
+			Object value = getValue(cdmBase);
+			int sqlType = getSqlType();
+			//use default value if necessary
+			if (value == null && defaultValue != null){
+				value = defaultValue;
+			}
+			if (value == null){
+			    if (notNull){
+			        logger.error("Value for '"+this.getSourceAttribute()+"' is null but a value is required. Object: " + cdmBase.toString());
+			        return false;
+			    }else{
+			        getPreparedStatement().setNull(getIndex(), sqlType);
+			    }
+			}else{
+				if (sqlType == Types.INTEGER){
+					try{
+						getPreparedStatement().setInt(getIndex(), (Integer)value);
+					}catch (Exception e) {
+						logger.error("Exception: " + e.getLocalizedMessage() + ": " + cdmBase.toString());
+						value = getValue(cdmBase);
+						throw new RuntimeException( e);
+					}
+				}else if (sqlType == Types.CLOB){
+					getPreparedStatement().setString(getIndex(), (String)value);
+				}else if (sqlType == Types.VARCHAR){
+					String strValue = (String)value;
+//					if (strValue.length() > 255){
+//						logger.debug("String to long (" + strValue.length() + ") for object " + cdmBase.toString() + ": " + value);
+//					}
+					int precision = getPrecision();
+					if (strValue.length() > 450){
+						logger.debug(">450");
+					}
+
+					if (strValue.length() > precision && precision > 0 ){
+						logger.warn("The length of the string to save ("+ getDestinationAttribute() + ") is longer than the database columns precision ("+precision+"). String will be truncated: " + strValue);
+						if (precision >= 4) {
+							strValue = strValue.substring(0, precision - 4 )+" ...";
+						} else {
+							strValue = strValue.substring(0, precision);
+						}
+					}
+					getPreparedStatement().setString(getIndex(), strValue);
+				}else if (sqlType == Types.BOOLEAN){
+					getPreparedStatement().setBoolean(getIndex(), (Boolean)value);
+				}else if (sqlType == Types.DATE){
+				    java.sql.Timestamp sqlTimestamp;
+				    if(value instanceof String){
+				        String strDate = (String)value;
+				        sqlTimestamp = java.sql.Timestamp.valueOf(strDate);
+				    }else{
+				        DateTime dateTime = (DateTime)value;
+				        java.util.Date date = dateTime.toDate();
+				        long t = date.getTime();
+				        sqlTimestamp = new java.sql.Timestamp(t);
+				    }
+					getPreparedStatement().setTimestamp(getIndex(), sqlTimestamp);
+				}else{
+					throw new IllegalArgumentException("SqlType not yet supported yet: " + sqlType);
+				}
+			}
+			return true;
+		} catch (SQLException e) {
+			logger.warn("SQL Exception: " + e.getLocalizedMessage());
+			throw e;
+		} catch (IllegalArgumentException e) {
+			logger.error("IllegalArgumentException: " + e.getLocalizedMessage() + ": " + cdmBase.toString());
+			return false;
+		} catch (Exception e) {
+			logger.error("Exception: " + e.getLocalizedMessage() + ": " + cdmBase.toString());
+			throw new RuntimeException( e);
+		}
+	}
+
+	protected Object getValue(CdmBase cdmBase){
+		boolean isBoolean = (this.getTypeClass() == boolean.class || this.getTypeClass() == Boolean.class);
+		return ImportHelper.getValue(cdmBase, this.getSourceAttribute(), isBoolean, obligatory);
+	}
+
+	protected abstract int getSqlType();
+
+	public PreparedStatement getPreparedStatement() {
+		return exportMapperHelper.getPreparedStatement();
+	}
+
+	public int getIndex() {
+		return exportMapperHelper.getIndex();
+	}
+
+	public STATE getState() {
+		return exportMapperHelper.getState();
+	}
+
+	public String getTableName() {
+		return exportMapperHelper.getTableName();
+	}
+
+	protected boolean checkSqlServerColumnExists(){
+		Source source = getState().getConfig().getDestination();
+		String strQuery = "SELECT  Count(t.id) as n " +
+				" FROM sysobjects AS t " +
+				" INNER JOIN syscolumns AS c ON t.id = c.id " +
+				" WHERE (t.xtype = 'U') AND " +
+				" (t.name = '" + getTableName() + "') AND " +
+				" (c.name = '" + getDestinationAttribute() + "')";
+		ResultSet rs = source.getResultSet(strQuery) ;
+		int n;
+		try {
+			rs.next();
+			n = rs.getInt("n");
+			return n>0;
+		} catch (SQLException e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+
+	protected int getPrecision(){
+		return this.precision;
+	}
+
+	protected int getDbColumnIntegerInfo(String selectPart){
+		Source source = getState().getConfig().getDestination();
+		String strQuery = "SELECT  " + selectPart + " as result" +
+				" FROM sysobjects AS t " +
+				" INNER JOIN syscolumns AS c ON t.id = c.id " +
+				" WHERE (t.xtype = 'U') AND " +
+				" (t.name = '" + getTableName() + "') AND " +
+				" (c.name = '" + getDestinationAttribute() + "')";
+		ResultSet rs = source.getResultSet(strQuery) ;
+		int n;
+		try {
+			rs.next();
+			n = rs.getInt("result");
+			return n;
+		} catch (Exception e) {
+			System.out.println(strQuery);
+		    logger.error(e.getMessage() + ", selectPart: " + CdmUtils.Nz(selectPart) + ", table: " + CdmUtils.Nz(getTableName()) +", destination: " + CdmUtils.Nz(getDestinationAttribute()));
+			e.printStackTrace();
+			return -1;
+		}
+	}
+
+	@Override
+    public String toString(){
+		String sourceAtt = CdmUtils.Nz(getSourceAttribute());
+		String destAtt = CdmUtils.Nz(getDestinationAttribute());
+		return this.getClass().getSimpleName() +"[" + sourceAtt + "->" + destAtt + "]";
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSingleSourceMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSingleSourceMapper.java
index 795cbf675f..f185c82c44 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSingleSourceMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbSingleSourceMapper.java
@@ -15,7 +15,8 @@ import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -33,7 +34,7 @@ import eu.etaxonomy.cdm.model.reference.Reference;
 public class DbSingleSourceMapper
             extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>{
 
-    private static final Logger logger = LogManager.getLogger(DbSingleSourceMapper.class);
+    private static final Logger logger = LogManager.getLogger();
 
 	public enum EXCLUDE{
 		NONE,
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbStringMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbStringMapper.java
index 6a3487f4c6..6b9a5f618a 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbStringMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbStringMapper.java
@@ -12,7 +12,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 import java.sql.Types;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -24,7 +25,7 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
 public class DbStringMapper
         extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> {
 
-    private static final Logger logger = LogManager.getLogger(DbStringMapper.class);
+    private static final Logger logger = LogManager.getLogger();
 
 	private static final int MAX_PRECISION = -1;  //precision for datatype nvarchar(max) == clob (SQL Server 2008)
 	private boolean blankToNull = false;
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbTextDataMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbTextDataMapper.java
index 46b8c24c8a..414401a5c5 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbTextDataMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbTextDataMapper.java
@@ -14,7 +14,8 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -28,8 +29,9 @@ import eu.etaxonomy.cdm.model.description.TextData;
  * @since 06.02.2012
  */
 public class DbTextDataMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbTextDataMapper.class);
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
 
 	private final List<Language> languages;
 	private boolean restrictToGivenLanguages;
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbTimePeriodMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbTimePeriodMapper.java
index cae0944001..7203aa9892 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbTimePeriodMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbTimePeriodMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -22,8 +23,9 @@ import eu.etaxonomy.cdm.model.common.TimePeriod;
  * @since 12.05.2009
  */
 public class DbTimePeriodMapper extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer> {
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbTimePeriodMapper.class);
+
+    @SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
 
 	public static DbTimePeriodMapper NewInstance(String cdmAttributeString, String dbAttributeString){
 		return new DbTimePeriodMapper(cdmAttributeString, dbAttributeString, null, true);
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbUriMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbUriMapper.java
index 4c4a52b9a7..d5642d793f 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbUriMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbUriMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.common.URI;
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
@@ -24,7 +25,7 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
 public class DbUriMapper
             extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> {
 
-    private static final Logger logger = LogManager.getLogger(DbUriMapper.class);
+    private static final Logger logger = LogManager.getLogger();
 
 	private static final int MAX_PRECISION = -1;  //precision for datatype nvarchar(max) == clob (SQL Server 2008)
 
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbUserMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbUserMapper.java
index 45ab32b4d3..8c5b0741f4 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbUserMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/DbUserMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -25,7 +26,7 @@ public class DbUserMapper
             extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>> {
 
     @SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(DbUserMapper.class);
+	private static final Logger logger = LogManager.getLogger();
 
 	public static DbUserMapper NewInstance(String cdmAttributeString, String dbAttributeString){
 		return new DbUserMapper(cdmAttributeString, dbAttributeString, null, true);
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/ExportTransformerBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/ExportTransformerBase.java
index 2b190669e6..26db2b812f 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/ExportTransformerBase.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/ExportTransformerBase.java
@@ -1,119 +1,120 @@
-/**
-* 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.io.common.mapping.out;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
-import eu.etaxonomy.cdm.model.common.ExtensionType;
-import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
-import eu.etaxonomy.cdm.model.location.NamedArea;
-import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
-
-/**
- * @author a.mueller
- * @since 15.03.2010
- * @version 1.0
- */
-public class ExportTransformerBase implements IExportTransformer {
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(ExportTransformerBase.class);
-
-	@Override
-	public Object getKeyByFeature(Feature feature) throws UndefinedTransformerMethodException {
-		String warning = "getKeyByFeature is not implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-
-	@Override
-	public String getCacheByFeature(Feature feature) throws UndefinedTransformerMethodException {
-		String warning = "getCacheByFeature is not implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-
-	@Override
-	public Object getKeyByLanguage(Language language) throws UndefinedTransformerMethodException {
-		String warning = "getKeyByLanguage is not implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-	
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.io.common.mapping.out.IExportTransformer#getCacheByLanguage(eu.etaxonomy.cdm.model.common.Language)
-	 */
-	@Override
-	public String getCacheByLanguage(Language language) throws UndefinedTransformerMethodException {
-		String warning = "getCacheByLanguage is not implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-
-	/* (non-Javadoc)
-	 * @see eu.etaxonomy.cdm.io.common.mapping.out.IExportTransformer#getKeyByExtensionType(eu.etaxonomy.cdm.model.common.ExtensionType)
-	 */
-	@Override
-	public Object getKeyByExtensionType(ExtensionType extensionType) throws UndefinedTransformerMethodException {
-		String warning = "getKeyByExtensionType is not implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}	@Override
-	public String getCacheByExtensionType(ExtensionType extensionType) throws UndefinedTransformerMethodException {
-		String warning = "getCacheByExtensionType is not implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-
-	@Override
-	public Object getKeyByPresenceAbsenceTerm(PresenceAbsenceTerm term) throws UndefinedTransformerMethodException {
-		String warning = "getKeyByPresenceAbsenceTerm is not implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-
-	@Override
-	public String getCacheByPresenceAbsenceTerm(PresenceAbsenceTerm term) throws UndefinedTransformerMethodException {
-		String warning = "getKeyByPresenceAbsenceTerm is not implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-
-	@Override
-	public Object getKeyByNamedArea(NamedArea area) throws UndefinedTransformerMethodException {
-		String warning = "getKeyByNamedArea is not implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-	
-	@Override
-	public String getCacheByNamedArea(NamedArea area) throws UndefinedTransformerMethodException{
-		String warning = "getCacheByNamedArea is not implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-	
-	@Override
-	public String getCacheByNomStatus(NomenclaturalStatusType status) throws UndefinedTransformerMethodException {
-		String warning = "getCacheByNomStatus is not implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-	
-	
-	@Override
-	public Object getKeyByNomStatus(NomenclaturalStatusType status) throws UndefinedTransformerMethodException {
-		String warning = "getKeyByNomStatus is not yet implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-	@Override
-	public String getQualityStatusCacheByKey(Integer qualityStatusFk) throws UndefinedTransformerMethodException {
-		String warning = "getQualityStatusCacheByKey is not yet implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-	@Override
-	public String getTaxonStatusCacheByKey(Integer taxonStatusId) throws UndefinedTransformerMethodException {
-		String warning = "getTaxonStatusCacheByKey is not yet implemented in implementing transformer class";
-		throw new UndefinedTransformerMethodException(warning);
-	}
-
-		
-}
+/**
+* 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.io.common.mapping.out;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
+import eu.etaxonomy.cdm.model.common.ExtensionType;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
+import eu.etaxonomy.cdm.model.location.NamedArea;
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
+
+/**
+ * @author a.mueller
+ * @since 15.03.2010
+ */
+public class ExportTransformerBase implements IExportTransformer {
+
+	@SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+	@Override
+	public Object getKeyByFeature(Feature feature) throws UndefinedTransformerMethodException {
+		String warning = "getKeyByFeature is not implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+
+	@Override
+	public String getCacheByFeature(Feature feature) throws UndefinedTransformerMethodException {
+		String warning = "getCacheByFeature is not implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+
+	@Override
+	public Object getKeyByLanguage(Language language) throws UndefinedTransformerMethodException {
+		String warning = "getKeyByLanguage is not implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+
+	/* (non-Javadoc)
+	 * @see eu.etaxonomy.cdm.io.common.mapping.out.IExportTransformer#getCacheByLanguage(eu.etaxonomy.cdm.model.common.Language)
+	 */
+	@Override
+	public String getCacheByLanguage(Language language) throws UndefinedTransformerMethodException {
+		String warning = "getCacheByLanguage is not implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+
+	/* (non-Javadoc)
+	 * @see eu.etaxonomy.cdm.io.common.mapping.out.IExportTransformer#getKeyByExtensionType(eu.etaxonomy.cdm.model.common.ExtensionType)
+	 */
+	@Override
+	public Object getKeyByExtensionType(ExtensionType extensionType) throws UndefinedTransformerMethodException {
+		String warning = "getKeyByExtensionType is not implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}	@Override
+	public String getCacheByExtensionType(ExtensionType extensionType) throws UndefinedTransformerMethodException {
+		String warning = "getCacheByExtensionType is not implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+
+	@Override
+	public Object getKeyByPresenceAbsenceTerm(PresenceAbsenceTerm term) throws UndefinedTransformerMethodException {
+		String warning = "getKeyByPresenceAbsenceTerm is not implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+
+	@Override
+	public String getCacheByPresenceAbsenceTerm(PresenceAbsenceTerm term) throws UndefinedTransformerMethodException {
+		String warning = "getKeyByPresenceAbsenceTerm is not implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+
+	@Override
+	public Object getKeyByNamedArea(NamedArea area) throws UndefinedTransformerMethodException {
+		String warning = "getKeyByNamedArea is not implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+
+	@Override
+	public String getCacheByNamedArea(NamedArea area) throws UndefinedTransformerMethodException{
+		String warning = "getCacheByNamedArea is not implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+
+	@Override
+	public String getCacheByNomStatus(NomenclaturalStatusType status) throws UndefinedTransformerMethodException {
+		String warning = "getCacheByNomStatus is not implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+
+
+	@Override
+	public Object getKeyByNomStatus(NomenclaturalStatusType status) throws UndefinedTransformerMethodException {
+		String warning = "getKeyByNomStatus is not yet implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+	@Override
+	public String getQualityStatusCacheByKey(Integer qualityStatusFk) throws UndefinedTransformerMethodException {
+		String warning = "getQualityStatusCacheByKey is not yet implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+	@Override
+	public String getTaxonStatusCacheByKey(Integer taxonStatusId) throws UndefinedTransformerMethodException {
+		String warning = "getTaxonStatusCacheByKey is not yet implemented in implementing transformer class";
+		throw new UndefinedTransformerMethodException(warning);
+	}
+
+
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IdIncMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IdIncMapper.java
index b31e60802d..08e129f37e 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IdIncMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IdIncMapper.java
@@ -11,7 +11,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
 import eu.etaxonomy.cdm.io.common.Source;
@@ -29,7 +30,7 @@ public class IdIncMapper
         implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
 
     @SuppressWarnings("unused")
-    private static final Logger logger = LogManager.getLogger(IdIncMapper.class);
+    private static final Logger logger = LogManager.getLogger();
 
     private Integer startValue;
     private IndexCounter counter;
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IdMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IdMapper.java
index f39ab8de38..7e46b5c2f8 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IdMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IdMapper.java
@@ -12,7 +12,8 @@ package eu.etaxonomy.cdm.io.common.mapping.out;
 import java.sql.SQLException;
 import java.sql.Types;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.io.common.DbExportConfiguratorBase.IdType;
 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
@@ -28,7 +29,7 @@ public class IdMapper
         extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>
         implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer>{
 
-    private static final Logger logger = LogManager.getLogger(IdMapper.class);
+    private static final Logger logger = LogManager.getLogger();
 
 	public static IdMapper NewInstance(String dbIdAttributeString){
 		return new IdMapper(dbIdAttributeString);
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IndexCounter.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IndexCounter.java
index 109de884c4..25141886ea 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IndexCounter.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IndexCounter.java
@@ -1,41 +1,43 @@
-/**
-* 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.io.common.mapping.out;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-/**
- * @author a.mueller
- * @since 12.05.2009
- */
-public class IndexCounter {
-	@SuppressWarnings("unused")
-	private static final Logger logger = LogManager.getLogger(IndexCounter.class);
-
-	int index = 0;
-
-	public IndexCounter(int startValue){
-		index = startValue;
-	}
-
-	/**
-	 * Returns the index and increases it by 1
-	 * @return
-	 */
-	public int getIncreasing(){
-		return index++;
-	}
-
-	@Override
-    public String toString(){
-		return String.valueOf(index);
-	}
-
-}
+/**
+* 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.io.common.mapping.out;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @author a.mueller
+ * @since 12.05.2009
+ */
+public class IndexCounter {
+
+	@SuppressWarnings("unused")
+	private static final Logger logger = LogManager.getLogger();
+
+	int index = 0;
+
+	public IndexCounter(int startValue){
+		index = startValue;
+	}
+
+	/**
+	 * Returns the index and increases it by 1
+	 * @return
+	 */
+	public int getIncreasing(){
+		return index++;
+	}
+
+	@Override
+    public String toString(){
+		return String.valueOf(index);
+	}
+
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/MethodMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/MethodMapper.java
index f09e1a64c5..ace4316d5b 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/MethodMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/MethodMapper.java
@@ -1,127 +1,128 @@
-/**
-* 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.io.common.mapping.out;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.sql.Types;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-import org.joda.time.DateTime;
-
-import eu.etaxonomy.cdm.io.common.DbExportBase;
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * @author a.mueller
- * @since 12.05.2009
- */
-public class MethodMapper
-            extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>
-            implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer> {
-
-    private static final Logger logger = LogManager.getLogger(MethodMapper.class);
-
-	private Method method;
-	private Class<?>[] parameterTypes;
-
-	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, DbExportBase exportBase){
-		String methodName = getMethodName(dbAttributeString);
-		return NewInstance(dbAttributeString, exportBase, methodName);
-	}
-
-	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, DbExportBase exportBase, Class<?>... parameterTypes){
-		String methodName = getMethodName(dbAttributeString);
-		return new MethodMapper(dbAttributeString, exportBase.getClass(), methodName, parameterTypes);
-	}
-
-	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, DbExportBase exportBase, String methodName){
-		Class<?> parameterTypes = exportBase.getStandardMethodParameter();
-		MethodMapper result = new MethodMapper(dbAttributeString, exportBase.getClass(), methodName, parameterTypes);
-		return result;
-	}
-
-	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, Class<?> clazz, Class<?>... parameterTypes){
-	    String methodName = getMethodName(dbAttributeString);
-        MethodMapper result = new MethodMapper(dbAttributeString, clazz, methodName, parameterTypes);
-        return result;
-    }
-
-	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, Class<?> clazz, String methodName, Class<?>... parameterTypes){
-		MethodMapper result = new MethodMapper(dbAttributeString, clazz, methodName, parameterTypes);
-		return result;
-	}
-
-	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, Class<?> clazz, String methodName, Class<?> parameterType1, Class<?> parameterType2){
-		MethodMapper result = new MethodMapper(dbAttributeString, clazz, methodName, parameterType1, parameterType2);
-		return result;
-	}
-
-	protected MethodMapper(String dbAttributeString, Class<?> clazz, String methodName, Class<?>... parameterTypes) {
-		super(null, dbAttributeString, null);
-		try {
-			this.parameterTypes = parameterTypes;
-			method = clazz.getDeclaredMethod(methodName, parameterTypes);
-			method.setAccessible(true);
-		} catch (SecurityException e) {
-			logger.error("SecurityException", e);
-		} catch (NoSuchMethodException e) {
-			logger.error("NoSuchMethodException", e);
-		}
-	}
-
-    private static String getMethodName(String dbAttributeString) {
-        String methodName = "get" + dbAttributeString;
-        return methodName;
-    }
-
-	@Override
-	public Class<?> getTypeClass() {
-		return method.getReturnType();
-	}
-
-	@Override
-	protected Object getValue(CdmBase cdmBase) {
-		try{
-			if (this.parameterTypes.length > 1 && DbExportStateBase.class.isAssignableFrom(parameterTypes[1])){
-				return method.invoke(null, cdmBase, getState());
-			}else{
-				return method.invoke(null, cdmBase);
-			}
-		} catch (IllegalAccessException e) {
-			logger.error("IllegalAccessException: " + e.getMessage() + " when invoking MethodMapper " +  this.toString());
-			throw new RuntimeException(e);
-		} catch (InvocationTargetException e) {
-			logger.error("InvocationTargetException: " + e.getMessage() + " when invoking MethodMapper " +  this.toString());
-			throw new RuntimeException(e);
-		} catch (Exception e) {
-			logger.error("Any Exception: " + e.getMessage() + " when invoking MethodMapper " +  this.toString());
-			throw new RuntimeException(e);
-		}
-	}
-
-	@Override
-	protected int getSqlType() {
-		Class<?> returnType = method.getReturnType();
-		if (returnType == Integer.class){
-			return Types.INTEGER;
-		}else if (returnType == String.class){
-			return Types.VARCHAR;
-		}else if (returnType == Boolean.class){
-			return Types.BOOLEAN;
-		}else if (returnType == DateTime.class){
-			return Types.DATE;
-		}else{
-			logger.warn("Return type not supported yet: " + returnType.getSimpleName());
-			throw new IllegalArgumentException("Return type not supported yet: " + returnType.getSimpleName());
-		}
-	}
-}
+/**
+* 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.io.common.mapping.out;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.sql.Types;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.joda.time.DateTime;
+
+import eu.etaxonomy.cdm.io.common.DbExportBase;
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * @author a.mueller
+ * @since 12.05.2009
+ */
+public class MethodMapper
+            extends DbSingleAttributeExportMapperBase<DbExportStateBase<?, IExportTransformer>>
+            implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer> {
+
+    private static final Logger logger = LogManager.getLogger();
+
+	private Method method;
+	private Class<?>[] parameterTypes;
+
+	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, DbExportBase exportBase){
+		String methodName = getMethodName(dbAttributeString);
+		return NewInstance(dbAttributeString, exportBase, methodName);
+	}
+
+	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, DbExportBase exportBase, Class<?>... parameterTypes){
+		String methodName = getMethodName(dbAttributeString);
+		return new MethodMapper(dbAttributeString, exportBase.getClass(), methodName, parameterTypes);
+	}
+
+	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, DbExportBase exportBase, String methodName){
+		Class<?> parameterTypes = exportBase.getStandardMethodParameter();
+		MethodMapper result = new MethodMapper(dbAttributeString, exportBase.getClass(), methodName, parameterTypes);
+		return result;
+	}
+
+	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, Class<?> clazz, Class<?>... parameterTypes){
+	    String methodName = getMethodName(dbAttributeString);
+        MethodMapper result = new MethodMapper(dbAttributeString, clazz, methodName, parameterTypes);
+        return result;
+    }
+
+	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, Class<?> clazz, String methodName, Class<?>... parameterTypes){
+		MethodMapper result = new MethodMapper(dbAttributeString, clazz, methodName, parameterTypes);
+		return result;
+	}
+
+	public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, Class<?> clazz, String methodName, Class<?> parameterType1, Class<?> parameterType2){
+		MethodMapper result = new MethodMapper(dbAttributeString, clazz, methodName, parameterType1, parameterType2);
+		return result;
+	}
+
+	protected MethodMapper(String dbAttributeString, Class<?> clazz, String methodName, Class<?>... parameterTypes) {
+		super(null, dbAttributeString, null);
+		try {
+			this.parameterTypes = parameterTypes;
+			method = clazz.getDeclaredMethod(methodName, parameterTypes);
+			method.setAccessible(true);
+		} catch (SecurityException e) {
+			logger.error("SecurityException", e);
+		} catch (NoSuchMethodException e) {
+			logger.error("NoSuchMethodException", e);
+		}
+	}
+
+    private static String getMethodName(String dbAttributeString) {
+        String methodName = "get" + dbAttributeString;
+        return methodName;
+    }
+
+	@Override
+	public Class<?> getTypeClass() {
+		return method.getReturnType();
+	}
+
+	@Override
+	protected Object getValue(CdmBase cdmBase) {
+		try{
+			if (this.parameterTypes.length > 1 && DbExportStateBase.class.isAssignableFrom(parameterTypes[1])){
+				return method.invoke(null, cdmBase, getState());
+			}else{
+				return method.invoke(null, cdmBase);
+			}
+		} catch (IllegalAccessException e) {
+			logger.error("IllegalAccessException: " + e.getMessage() + " when invoking MethodMapper " +  this.toString());
+			throw new RuntimeException(e);
+		} catch (InvocationTargetException e) {
+			logger.error("InvocationTargetException: " + e.getMessage() + " when invoking MethodMapper " +  this.toString());
+			throw new RuntimeException(e);
+		} catch (Exception e) {
+			logger.error("Any Exception: " + e.getMessage() + " when invoking MethodMapper " +  this.toString());
+			throw new RuntimeException(e);
+		}
+	}
+
+	@Override
+	protected int getSqlType() {
+		Class<?> returnType = method.getReturnType();
+		if (returnType == Integer.class){
+			return Types.INTEGER;
+		}else if (returnType == String.class){
+			return Types.VARCHAR;
+		}else if (returnType == Boolean.class){
+			return Types.BOOLEAN;
+		}else if (returnType == DateTime.class){
+			return Types.DATE;
+		}else{
+			logger.warn("Return type not supported yet: " + returnType.getSimpleName());
+			throw new IllegalArgumentException("Return type not supported yet: " + returnType.getSimpleName());
+		}
+	}
+}
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/ObjectChangeMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/ObjectChangeMapper.java
index ec622d23ba..d2ee0f9877 100644
--- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/ObjectChangeMapper.java
+++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/ObjectChangeMapper.java
@@ -1,113 +1,117 @@
-/**
-* 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.io.common.mapping.out;
-
-import java.lang.reflect.Method;
-import java.sql.PreparedStatement;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.common.DbExportStateBase;
-import eu.etaxonomy.cdm.io.common.mapping.CdmAttributeMapperBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * Changes the object to be handled (usually the object to be mapped stays the same for all mappers of a mapping).
- * @author a.mueller
- * @since 12.05.2009
- */
-public class ObjectChangeMapper extends CdmAttributeMapperBase implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer> {
-	private static final Logger logger = LogManager.getLogger(ObjectChangeMapper.class);
-
-	private DbExportStateBase<?, IExportTransformer> state;  //for possible later use
-
-	private Class<? extends CdmBase> oldClass;
-	private Class<? extends CdmBase> newClass;
-	private String cdmAttribute;
-
-	private Method method;
-//	private Class<?>[] parameterTypes;
-
-	public static ObjectChangeMapper NewInstance(Class<? extends CdmBase>  oldClass, Class<? extends CdmBase> newClass, String cdmAttribute){
-		String methodName = "get" + cdmAttribute;
-		return new ObjectChangeMapper(oldClass, newClass, methodName, (Class<?>[])null);
-	}
-
-	protected ObjectChangeMapper(Class<? extends CdmBase>oldClazz,Class<? extends CdmBase>newClazz, String methodName, Class<?>... parameterTypes) {
-		try {
-//			this.parameterTypes = parameterTypes;
-			oldClass = oldClazz;
-			newClass = newClazz;
-			method = oldClazz.getDeclaredMethod(methodName, parameterTypes);
-			method.setAccessible(true);
-		} catch (SecurityException e) {
-			logger.error("SecurityException", e);
-		} catch (NoSuchMethodException e) {
-			logger.error("NoSuchMethodException", e);
-		}
-	}
-
-	@Override
-	public void initialize(PreparedStatement stmt, IndexCounter index, DbExportStateBase<?, IExportTransformer> state, String tableName) {
-		this.state = state;
-	}
-
-	@Override
-    public boolean invoke(CdmBase cdmBase) {
-		throw new RuntimeException("Invoke must not be called for " + this.getClass().getSimpleName() + ".  Return type is still incompatible. Use getNewObject instead.");
-	}
-
-	public CdmBase getNewObject(CdmBase oldCdmBase){
-		try {
-			if (oldCdmBase.isInstanceOf(oldClass)){
-				return  (CdmBase)method.invoke(oldCdmBase, (Object[])null);
-			}else if (oldCdmBase.isInstanceOf(newClass)){
-				return oldCdmBase;
-			}else{
-				logger.warn("ObjectChangeMapper "+this.toString()+"not applicable for CdmBase " + oldCdmBase.getClass());
-				return oldCdmBase;
-			}
-		} catch (Exception e) {
-			throw new RuntimeException(e);
-		}
-	}
-
-	@Override
-	public Set<String> getSourceAttributes() {
-		Set<String> result = new HashSet<>();
-		if (cdmAttribute != null){
-			result.add(cdmAttribute);
-		}
-		return result;
-	}
-
-	@Override
-	public Set<String> getDestinationAttributes() {
-		return new HashSet<>();
-	}
-
-	@Override
-	public List<String> getSourceAttributeList() {
-		ArrayList<String> result = new ArrayList<>();
-		if (cdmAttribute != null){
-			result.add(cdmAttribute);
-		}
-		return result;
-	}
-
-	@Override
-	public List<String> getDestinationAttributeList() {
-		return new ArrayList<>();
-	}
-}
+/**
+* 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.io.common.mapping.out;
+
+import java.lang.reflect.Method;
+import java.sql.PreparedStatement;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;
+import eu.etaxonomy.cdm.io.common.mapping.CdmAttributeMapperBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * Changes the object to be handled (usually the object to be mapped stays the same for all mappers of a mapping).
+ * @author a.mueller
+ * @since 12.05.2009
+ */
+public class ObjectChangeMapper
+        extends CdmAttributeMapperBase
+        implements IDbExportMapper<DbExportStateBase<?, IExportTransformer>, IExportTransformer> {
+
+    private static final Logger logger = LogManager.getLogger();
+
+	private DbExportStateBase<?, IExportTransformer> state;  //for possible later use
+
+	private Class<? extends CdmBase> oldClass;
+	private Class<? extends CdmBase> newClass;
+	private String cdmAttribute;
+
+	private Method method;
+//	private Class<?>[] parameterTypes;
+
+	public static ObjectChangeMapper NewInstance(Class<? extends CdmBase>  oldClass, Class<? extends CdmBase> newClass, String cdmAttribute){
+		String methodName = "get" + cdmAttribute;
+		return new ObjectChangeMapper(oldClass, newClass, methodName, (Class<?>[])null);
+	}
+
+	protected ObjectChangeMapper(Class<? extends CdmBase>oldClazz,Class<? extends CdmBase>newClazz, String methodName, Class<?>... parameterTypes) {
+		try {
+//			this.parameterTypes = parameterTypes;
+			oldClass = oldClazz;
+			newClass = newClazz;
+			method = oldClazz.getDeclaredMethod(methodName, parameterTypes);
+			method.setAccessible(true);
+		} catch (SecurityException e) {
+			logger.error("SecurityException", e);
+		} catch (NoSuchMethodException e) {
+			logger.error("NoSuchMethodException", e);
+		}
+	}
+
+	@Override
+	public void initialize(PreparedStatement stmt, IndexCounter index, DbExportStateBase<?, IExportTransformer> state, String tableName) {
+		this.state = state;
+	}
+
+	@Override
+    public boolean invoke(CdmBase cdmBase) {
+		throw new RuntimeException("Invoke must not be called for " + this.getClass().getSimpleName() + ".  Return type is still incompatible. Use getNewObject instead.");
+	}
+
+	public CdmBase getNewObject(CdmBase oldCdmBase){
+		try {
+			if (oldCdmBase.isInstanceOf(oldClass)){
+				return  (CdmBase)method.invoke(oldCdmBase, (Object[])null);
+			}else if (oldCdmBase.isInstanceOf(newClass)){
+				return oldCdmBase;
+			}else{
+				logger.warn("ObjectChangeMapper "+this.toString()+"not applicable for CdmBase " + oldCdmBase.getClass());
+				return oldCdmBase;
+			}
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	@Override
+	public Set<String> getSourceAttributes() {
+		Set<String> result = new HashSet<>();
+		if (cdmAttribute != null){
+			result.add(cdmAttribute);
+		}
+		return result;
+	}
+
+	@Override
+	public Set<String> getDestinationAttributes() {
+		return new HashSet<>();
+	}
+
+	@Override
+	public List<String> getSourceAttributeList() {
+		ArrayList<String> result = new ArrayList<>();
+		if (cdmAttribute != null){
+			result.add(cdmAttribute);
+		}
+		return result;
+	}
+
+	@Override
+	public List<String> getDestinationAttributeList() {
+		return new ArrayList<>();
+	}
+}
