diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/AbstractStorageProcessor.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/AbstractStorageProcessor.java
index 3dfc4eb1f4cecca3323d3300fa9aa68958d07a26..66eabd258147c73c871985ce4ee05c729daf0052 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/AbstractStorageProcessor.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/AbstractStorageProcessor.java
@@ -31,16 +31,29 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.StorageFormat;
  */
 public abstract class AbstractStorageProcessor implements IStorageProcessorTransactional
 {
+    /**
+     * Optional property, true by default. If set to false then the dataset whcih cannot be
+     * registered will be left in the incoming folder and will be mentioned in the .faulty_paths
+     * file.
+     */
+    private final static String MOVE_UNREGISTERED_DATASETS_TO_ERROR_DIR_PROPERTY =
+            "move-unregistered-datasets-to-error-dir";
+
     private static final String[] ZIP_FILE_EXTENSIONS =
         { "zip" };
 
     protected final Properties properties;
 
+    private final boolean moveUnregisteredDatasetsToErrorDir;
+
     private File storeRootDir;
 
     protected AbstractStorageProcessor(final Properties properties)
     {
         this.properties = properties;
+        this.moveUnregisteredDatasetsToErrorDir =
+                PropertyUtils.getBoolean(properties,
+                        MOVE_UNREGISTERED_DATASETS_TO_ERROR_DIR_PROPERTY, true);
     }
 
     protected final String getMandatoryProperty(final String propertyKey)
@@ -96,6 +109,7 @@ public abstract class AbstractStorageProcessor implements IStorageProcessorTrans
 
     public UnstoreDataAction getDefaultUnstoreDataAction(Throwable exception)
     {
-        return UnstoreDataAction.LEAVE_UNTOUCHED;
+        return moveUnregisteredDatasetsToErrorDir ? UnstoreDataAction.MOVE_TO_ERROR
+                : UnstoreDataAction.LEAVE_UNTOUCHED;
     }
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/BDSStorageProcessor.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/BDSStorageProcessor.java
index d9fe21f7e2c6a49566accbd7b64b48694f585f76..2a0236e64f68f12080215d3fe20b6f8541d37ffc 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/BDSStorageProcessor.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/BDSStorageProcessor.java
@@ -455,7 +455,7 @@ public final class BDSStorageProcessor extends AbstractStorageProcessor
         protected UnstoreDataAction executeRollback(Throwable ex)
         {
             unstoreData();
-            return UnstoreDataAction.MOVE_TO_ERROR;
+            return getDefaultUnstoreDataAction(ex);
         }
 
         @Override
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultStorageProcessor.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultStorageProcessor.java
index de5ee0439d27a57f7df932282c8793073cde68d9..053e07aee3debb8ea93d031766dccc7640252027 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultStorageProcessor.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultStorageProcessor.java
@@ -107,7 +107,7 @@ public class DefaultStorageProcessor extends AbstractStorageProcessor
             // directory structure will persist. Right now, we consider this is fine as these empty
             // directories will not disturb the running application.
             FileRenamer.renameAndLog(targetFile, incomingDataSetDirectory);
-            return UnstoreDataAction.MOVE_TO_ERROR;
+            return getDefaultUnstoreDataAction(ex);
         }
 
         /**
@@ -144,10 +144,4 @@ public class DefaultStorageProcessor extends AbstractStorageProcessor
         }
         return Status.OK;
     }
-
-    @Override
-    public UnstoreDataAction getDefaultUnstoreDataAction(Throwable exception)
-    {
-        return UnstoreDataAction.MOVE_TO_ERROR;
-    }
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/hdf5/Hdf5StorageProcessor.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/hdf5/Hdf5StorageProcessor.java
index 74b44e7906ecd0f378a21bcc08d0c4018a16f05a..8d0a9611304606fed418291a13d9a1b4f2656967 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/hdf5/Hdf5StorageProcessor.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/hdf5/Hdf5StorageProcessor.java
@@ -91,7 +91,7 @@ public class Hdf5StorageProcessor extends AbstractStorageProcessor
 
                     fileBeingProcessed = null;
 
-                    return UnstoreDataAction.MOVE_TO_ERROR;
+                    return getDefaultUnstoreDataAction(exception);
                 }
 
                 public void commit()
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java
index 8b26bb1e90dffda3f378b2f8e3da61ca9edafc49..3957ca09d83dfb6fad1fad446ebf8a3a2fbcab89 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java
@@ -97,9 +97,10 @@ public interface IDataSetRegistrationTransaction
      * Create a new space to register with the openBIS AS.
      * 
      * @param spaceCode the code of the space
-     * @param spaceAdminUserId the user id of the person, who will receive space admin priviliges.
+     * @param spaceAdminUserIdOrNull the user id of the person, who will receive space admin
+     *            priviliges.
      */
-    ISpace createNewSpace(String spaceCode, String spaceAdminUserId);
+    ISpace createNewSpace(String spaceCode, String spaceAdminUserIdOrNull);
 
     /**
      * Get a space from the openBIS AS. Returns null if the space does not exist.
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IProject.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IProject.java
index 25182fa9fd1a3edc1a3991a3bb21c288c6d22e71..ad0f27f5a873b6207987dff5c0e8b2c32f4a2669 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IProject.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IProject.java
@@ -26,8 +26,4 @@ public interface IProject extends IProjectImmutable
      */
     void setDescription(String description);
 
-    /**
-     * Set the project leader id.
-     */
-    void setProjectLeaderId(String leaderId);
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IProjectImmutable.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IProjectImmutable.java
index 0f04beefadcfafcddec324c07763feaefafd9df6..b040b9fe62ce9d1b7939226b72c97103bfdb2f01 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IProjectImmutable.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IProjectImmutable.java
@@ -16,7 +16,6 @@
 
 package ch.systemsx.cisd.etlserver.registrator.api.v1;
 
-
 /**
  * @author Kaloyan Enimanev
  */
@@ -33,12 +32,6 @@ public interface IProjectImmutable
      */
     String getDescription();
 
-    /**
-     * Return the project leader id. May be null.
-     */
-    String getProjectLeaderId();
-
-
     /**
      * Return true if the project exists in the database.
      */
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
index 07379a46185863f32a87cb5ede6add470a3b372d..c9307ee10b83541a2479aaf08acc601cf80c844c 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
@@ -232,9 +232,9 @@ abstract class AbstractTransactionState<T extends DataSetInformation>
             return experiment;
         }
 
-        public ISpace createNewSpace(String spaceCode, String spaceAdminUserId)
+        public ISpace createNewSpace(String spaceCode, String spaceAdminUserIdOrNull)
         {
-            Space space = new Space(spaceCode, spaceAdminUserId);
+            Space space = new Space(spaceCode, spaceAdminUserIdOrNull);
             spacesToBeRegistered.add(space);
             return space;
         }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java
index c3740dc01c22f319bd3fea25825aa017fde80a92..598f65617345af089629328f6071e3ec5ce53789 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java
@@ -135,8 +135,7 @@ public class ConversionUtils
 
     public static NewProject convertToNewProject(Project apiProject)
     {
-        return new NewProject(apiProject.getProjectIdentifier(), apiProject.getDescription(),
-                apiProject.getProjectLeaderId());
+        return new NewProject(apiProject.getProjectIdentifier(), apiProject.getDescription());
     }
 
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java
index b8eac75a46ef5405675703f23216b2a22855aece..abdc8cd91d7e345f6876a4590fc6dff25b683930 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java
@@ -245,9 +245,9 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem
         return (null == projectOrNull) ? null : new ProjectImmutable(projectOrNull);
     }
 
-    public ISpace createNewSpace(String spaceCode, String spaceAdminUserId)
+    public ISpace createNewSpace(String spaceCode, String spaceAdminUserIdOrNull)
     {
-        return getStateAsLiveState().createNewSpace(spaceCode, spaceAdminUserId);
+        return getStateAsLiveState().createNewSpace(spaceCode, spaceAdminUserIdOrNull);
     }
 
     public ISpaceImmutable getSpace(String spaceCode)
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Project.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Project.java
index 7e7b644108e7783b94876a4cc3c44724b31b58d1..f115a3cb0dd2ad11f64620234bc26d99f39dadeb 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Project.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Project.java
@@ -17,7 +17,6 @@
 package ch.systemsx.cisd.etlserver.registrator.api.v1.impl;
 
 import ch.systemsx.cisd.etlserver.registrator.api.v1.IProject;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
 
 /**
  * @author Kaloyan Enimanev
@@ -35,15 +34,4 @@ class Project extends ProjectImmutable implements IProject
         getProject().setDescription(description);
     }
 
-    public void setProjectLeaderId(String leaderId)
-    {
-        Person projectLeader = getProject().getProjectLeader();
-        if (projectLeader == null)
-        {
-            projectLeader = new Person();
-            getProject().setProjectLeader(projectLeader);
-        }
-        projectLeader.setUserId(leaderId);
-    }
-
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ProjectImmutable.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ProjectImmutable.java
index 678e9fa3f83d5b81c895cea0be202b341d192acf..aa5636bb14e13935f54364e5ccf76f2b22659c14 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ProjectImmutable.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ProjectImmutable.java
@@ -71,9 +71,4 @@ class ProjectImmutable implements IProjectImmutable
         return project.getDescription();
     }
 
-    public String getProjectLeaderId()
-    {
-        return (project.getProjectLeader() != null) ? project.getProjectLeader().getUserId() : null;
-    }
-
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Space.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Space.java
index b638716340f9c0aa2b9b895013785058f8a41df4..0cc12623580d75d1cd824c21ef985024cd8bc716 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Space.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Space.java
@@ -24,12 +24,12 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
  */
 class Space extends SpaceImmutable implements ISpace
 {
-    public Space(String code, String spaceAdminUserId)
+    public Space(String code, String spaceAdminUserIdOrNull)
     {
         super(new ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space(), false);
         getSpace().setCode(code);
         getSpace().setRegistrator(new Person());
-        getSpace().getRegistrator().setUserId(spaceAdminUserId);
+        getSpace().getRegistrator().setUserId(spaceAdminUserIdOrNull);
     }
 
     public void setDescription(String description)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
index a73a2429044276dde0ef363f1415507f10249c1a..4257a2a156a15475aea472c84eaadbbe823efac7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
@@ -698,7 +698,7 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         final IExternalDataBO externalDataBO = businessObjectFactory.createExternalDataBO(session);
         externalDataBO.updateStatuses(dataSetCodes, newStatus, presentInArchive);
     }
-    
+
     public boolean compareAndSetDataSetStatus(String sessionToken, String dataSetCode,
             DataSetArchivingStatus oldStatus, DataSetArchivingStatus newStatus,
             boolean newPresentInArchive) throws UserFailureException
@@ -709,7 +709,6 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         externalDataBO.loadByCode(dataSetCode);
         return externalDataBO.compareAndSetDataSetStatus(oldStatus, newStatus, newPresentInArchive);
     }
-    
 
     public ExternalData tryGetDataSet(String sessionToken, String dataSetCode)
             throws UserFailureException
@@ -797,11 +796,13 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         return datasetLister.listByArchiverCriteria(dataStoreCode, criteria);
     }
 
-    public List<ExternalData> listDataSets(String sessionToken, String dataStoreCode, TrackingDataSetCriteria criteria)
+    public List<ExternalData> listDataSets(String sessionToken, String dataStoreCode,
+            TrackingDataSetCriteria criteria)
     {
         Session session = getSession(sessionToken);
         getDAOFactory().getHomeDatabaseInstance();
-        DataStorePE dataStore = getDAOFactory().getDataStoreDAO().tryToFindDataStoreByCode(dataStoreCode);
+        DataStorePE dataStore =
+                getDAOFactory().getDataStoreDAO().tryToFindDataStoreByCode(dataStoreCode);
         if (dataStore == null)
         {
             throw new UserFailureException("Unknown data store: " + dataStoreCode);
@@ -818,7 +819,7 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         }
         return result;
     }
-    
+
     private List<ExternalDataPE> loadDataSets(String sessionToken, String dataStoreCode)
     {
         Session session = getSession(sessionToken);
@@ -1047,8 +1048,7 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
 
         List<Project> projectsCreated = createProjects(sessionToken, operationDetails);
 
-        List<Experiment> experimentsCreated =
-                createExperiments(sessionToken, operationDetails);
+        List<Experiment> experimentsCreated = createExperiments(sessionToken, operationDetails);
 
         List<Sample> samplesCreated = createSamples(sessionToken, operationDetails);
 
@@ -1057,8 +1057,7 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         List<ExternalData> dataSetsCreated = createDataSets(sessionToken, operationDetails);
 
         return new AtomicEntityOperationResult(spacesCreated, projectsCreated, experimentsCreated,
-                samplesUpdated, samplesCreated,
-                dataSetsCreated);
+                samplesUpdated, samplesCreated, dataSetsCreated);
     }
 
     private List<Space> createSpaces(String sessionToken,
@@ -1085,14 +1084,17 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         groupBO.define(newSpace.getCode(), newSpace.getDescription());
         if (registratorUserIdOrNull != null)
         {
-            groupBO.getGroup().setRegistrator(getOrCreatePerson(sessionToken, registratorUserIdOrNull));
+            groupBO.getGroup().setRegistrator(
+                    getOrCreatePerson(sessionToken, registratorUserIdOrNull));
         }
         groupBO.save();
-        
+
         // create ADMIN role assignemnt
         SpacePE space = groupBO.getGroup();
-        if (newSpace.getSpaceAdminUserId() != null) {
-            IRoleAssignmentTable roleTable = businessObjectFactory.createRoleAssignmentTable(session);
+        if (newSpace.getSpaceAdminUserId() != null)
+        {
+            IRoleAssignmentTable roleTable =
+                    businessObjectFactory.createRoleAssignmentTable(session);
             NewRoleAssignment assignment = new NewRoleAssignment();
             SpaceIdentifier spaceIdentifier = new SpaceIdentifier(space.getCode());
             assignment.setSpaceIdentifier(spaceIdentifier);
@@ -1104,7 +1106,6 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         }
         return space;
 
-        
     }
 
     private List<Project> createProjects(String sessionToken,
@@ -1129,8 +1130,7 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         IProjectBO projectBO = businessObjectFactory.createProjectBO(session);
         ProjectIdentifier identifier =
                 new ProjectIdentifierFactory(newProject.getIdentifier()).createIdentifier();
-        projectBO.define(identifier, newProject.getDescription(),
-                newProject.getLeaderId());
+        projectBO.define(identifier, newProject.getDescription(), null);
         if (registratorUserIdOrNull != null)
         {
             projectBO.getProject().setRegistrator(
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IProjectBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IProjectBO.java
index 79e7b86fe5048f190bc5ff8b35eef09c0fe12bcf..6865ae9197ade3074575fff8cd16c9e1ccb37a02 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IProjectBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IProjectBO.java
@@ -40,7 +40,7 @@ public interface IProjectBO extends IEntityBusinessObject
      *             is unspecified and home group is undefined.
      */
     public void define(final ProjectIdentifier projectIdentifier, String description,
-            String leaderId) throws UserFailureException;
+            String leaderIdOrNull) throws UserFailureException;
 
     /**
      * Returns the loaded project.
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java
index 5b765bf8983f35c7532257e021499704ab7c5933..4c484f4d6d864e69002c651f54e8e37fc9865c5a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java
@@ -71,7 +71,7 @@ public final class ProjectBO extends AbstractBusinessObject implements IProjectB
     }
 
     private ProjectPE createProject(final ProjectIdentifier projectIdentifier, String description,
-            String leaderId)
+            String leaderIdOrNull)
     {
         final ProjectPE result = new ProjectPE();
         final SpacePE group =
@@ -80,9 +80,9 @@ public final class ProjectBO extends AbstractBusinessObject implements IProjectB
         result.setRegistrator(findRegistrator());
         result.setCode(projectIdentifier.getProjectCode());
         result.setDescription(description);
-        if (leaderId != null)
+        if (leaderIdOrNull != null)
         {
-            PersonPE leader = getPersonDAO().tryFindPersonByUserId(leaderId);
+            PersonPE leader = getPersonDAO().tryFindPersonByUserId(leaderIdOrNull);
             if (leader == null)
             {
                 throw new UserFailureException("Person '%s' not found in the database.");
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewProject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewProject.java
index 4ff852ed47afcd4c18f5a01f4a3910c782b43944..fa78cadbd155f93735b32c7626308d7ac84b6f42 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewProject.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewProject.java
@@ -30,13 +30,10 @@ public class NewProject implements Serializable
 
     private final String description;
 
-    private final String leaderId;
-
-    public NewProject(String identifier, String description, String leaderId)
+    public NewProject(String identifier, String description)
     {
         this.identifier = identifier;
         this.description = description;
-        this.leaderId = leaderId;
     }
 
     public String getIdentifier()
@@ -49,11 +46,6 @@ public class NewProject implements Serializable
         return description;
     }
 
-    public String getLeaderId()
-    {
-        return leaderId;
-    }
-
     @Override
     public String toString()
     {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java
index dca2365b3a7d6dae1eec96af98401bf5a8196f9c..f2a31cf8099ff0d6a04696d818a2965d5e310ecd 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java
@@ -40,8 +40,8 @@ public class AtomicEntityOperationDetailsTest extends AssertJUnit
         spaceRegistrations.add(new NewSpace("SPACE2", "description", "adminUser2"));
 
         ArrayList<NewProject> projectRegistrations = new ArrayList<NewProject>();
-        projectRegistrations.add(new NewProject("/SPACE/P1", "description", "leaderId1"));
-        projectRegistrations.add(new NewProject("/SPACE/P2", "description", "leaderId2"));
+        projectRegistrations.add(new NewProject("/SPACE/P1", "description"));
+        projectRegistrations.add(new NewProject("/SPACE/P2", "description"));
 
         ArrayList<NewExperiment> experimentRegistrations = new ArrayList<NewExperiment>();
         experimentRegistrations.add(new NewExperiment("/SPACE/PROJECT/EXP-ID1", "EXP-TYPE"));
@@ -64,8 +64,8 @@ public class AtomicEntityOperationDetailsTest extends AssertJUnit
 
         AtomicEntityOperationDetails details =
                 new AtomicEntityOperationDetails(null, spaceRegistrations, projectRegistrations,
-                        experimentRegistrations, sampleUpdates,
-                        sampleRegistrations, dataSetRegistrations);
+                        experimentRegistrations, sampleUpdates, sampleRegistrations,
+                        dataSetRegistrations);
 
         assertEquals(
                 "AtomicEntityOperationDetails[userIdOrNull=<null>"
diff --git a/screening/dist/etc/service.properties b/screening/dist/etc/service.properties
index 4b6e6d29623c0107491a0d201d66ce6e39fc8560..be3a27e046689a3b53835e40df77f2f464435aea 100644
--- a/screening/dist/etc/service.properties
+++ b/screening/dist/etc/service.properties
@@ -234,16 +234,20 @@ merged-channels-images.storage-processor.channel-codes = GFP, DAPI
 # Number and order of entries must be consistent with 'channel-codes'.
 merged-channels-images.storage-processor.channel-labels = Gfp, Dapi
 
-# Optional, true by default. 
+# Optional boolean property, true by default. 
 # Set to false to allow datasets in one experiment to use different channels.
 # In this case 'channel-codes' and 'channel-labels' become optional and are used only to determine the label for each channel code.
 # It should be set to 'false' for overlay image datasets. 
 #merged-channels-images.storage-processor.define-channels-per-experiment = false
 
-# Optional boolean property.
+# Optional boolean property, true by default. 
 # If true an email is sent if some images for the uploaded plate are missing. 
-# True by default.
 #merged-channels-images.storage-processor.notify-if-incomplete = false
+
+# Optional boolean property, true by default. 
+# If set to false then the dataset whcih cannot be registered will be left in the incoming folder 
+# and will be mentioned in the .faulty_paths file
+#merged-channels-images.storage-processor.move-unregistered-datasets-to-error-dir = false
     
 # This is an optional boolean property which defines if all image datasets in one experiment have the same
 # channels or if each imported dataset can have different channels. By default true if not specified.
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java
index 61124ba7b4cb8d278f934aeccea9ed5bea9a01a6..299adf9efaecaa9f9aad5a68202bd34cce3d0990 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java
@@ -96,6 +96,9 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.Color
  * <li>extract-single-image-channels - optional comma separated list of color components. Available
  * values: RED, GREEN or BLUE. If specified then the channels are extracted from the color
  * components and override 'file-extractor' results.
+ * <li>move-unregistered-datasets-to-error-dir - Optional property, true by default. If set to false
+ * then the dataset whcih cannot be registered will be left in the incoming folder and will be
+ * mentioned in the .faulty_paths file.
  * </p>
  * <p>
  * Subclasses of this storage processor can be used in the context of
@@ -317,7 +320,7 @@ abstract class AbstractImageStorageProcessor extends AbstractStorageProcessor im
             {
                 rollbackDatabaseChanges();
             }
-            return UnstoreDataAction.MOVE_TO_ERROR;
+            return getDefaultUnstoreDataAction(exception);
         }
 
         private void rollbackDatabaseChanges()