diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/MultiDataSetArchiverOrphanFinderTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/MultiDataSetArchiverOrphanFinderTask.java
index 0b67e117d09af486a66fd15037b4249def08d126..62bf27811556cdff695ed8747a321e4be181ac32 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/MultiDataSetArchiverOrphanFinderTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/MultiDataSetArchiverOrphanFinderTask.java
@@ -21,6 +21,9 @@ import ch.systemsx.cisd.openbis.dss.generic.server.DataStoreServer;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.IMultiDataSetArchiverReadonlyQueryDAO;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.MultiDataSetArchiverContainerDTO;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.MultiDataSetArchiverDataSourceUtil;
+import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
+import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
 
 public class MultiDataSetArchiverOrphanFinderTask implements IMaintenanceTask
 {
@@ -49,64 +52,69 @@ public class MultiDataSetArchiverOrphanFinderTask implements IMaintenanceTask
     {
         operationLog.info(MultiDataSetArchiverOrphanFinderTask.class.getSimpleName() + " Started");
 
-        // 1.Database, obtain a list of the containers on the database.
-        operationLog.info("1.Database, obtain a list of the containers on the database.");
+        // 1.Directories
+        operationLog.info("1.Directories, obtain archiver directory.");
+        String destination = DataStoreServer.getConfigParameters().getProperties().getProperty("archiver.final-destination", null);
+        if (destination == null)
+        {
+            destination = DataStoreServer.getConfigParameters().getProperties().getProperty("archiver.destination", null);
+        }
+
+        if (destination == null)
+        {
+            operationLog.info("No destination directory found, this task can't execute.");
+            return;
+        }
+
+        // 2.Database
+        operationLog.info("2.1 Database, obtain a list of the multi dataset containers on the database.");
         IMultiDataSetArchiverReadonlyQueryDAO readonlyQuery = MultiDataSetArchiverDataSourceUtil.getReadonlyQueryDAO();
         List<MultiDataSetArchiverContainerDTO> containerDTOs = readonlyQuery.listContainers();
-        Set<String> containersOnDB = new HashSet<String>();
+        Set<String> multiDatasetsContainersOnDB = new HashSet<String>();
         for (MultiDataSetArchiverContainerDTO containerDTO : containerDTOs)
         {
-            containersOnDB.add(containerDTO.getPath());
+            multiDatasetsContainersOnDB.add(containerDTO.getPath());
         }
 
-        // 2.Directories, obtain a list of the files into the directory.
-        operationLog.info("2.Directories, obtain a list of the files into the directory.");
-        // String tempFolder = DataStoreServer.getConfigParameters().getProperties().getProperty("archiver.temp-folder", null);
-        String finalDestination = DataStoreServer.getConfigParameters().getProperties().getProperty("archiver.final-destination", null);
-        // String replicatedDestination = DataStoreServer.getConfigParameters().getProperties().getProperty("archiver.replicated-destination", null);
-        File[] containersOnDisk = new File(finalDestination).listFiles();
-
-        // 3.Verify if the files are on the database containers
-        operationLog.info("3.Verify if the files are on the database containers.");
-        List<File> notFound = new ArrayList<File>();
-        for (File file : containersOnDisk)
+        operationLog.info("2.2 Database, obtain a list of the archived datasets on the database.");
+        IEncapsulatedOpenBISService service = ServiceProvider.getOpenBISService();
+        List<SimpleDataSetInformationDTO> presentDTOs = service.listPhysicalDataSetsByArchivingStatus(null, Boolean.TRUE);
+        Set<String> presentInArchiveOnDB = new HashSet<String>();
+        for (SimpleDataSetInformationDTO presentDTO : presentDTOs)
         {
-            if (containersOnDB.contains(file.getName()))
-            {
-                operationLog.info("Found container: " + file.getName());
-            } else
-            {
-                notFound.add(file);
-                operationLog.info("Not Found file: " + file.getName());
-            }
+            presentInArchiveOnDB.add(presentDTO.getDataSetCode());
         }
 
-        // 4.Verify if the non found files follow the format needed to qualify as Multi DataSet Archiver containers.
-        operationLog.info("4.Verify if the non found files follow the format needed to qualify as Multi DataSet Archiver containers.");
-        List<File> notFoundFilesAndMDAFormat = new ArrayList<File>();
-        for (File file : notFound)
+        // 3.Verify if the files on destination are on multi dataset archiver containers or a normal archived dataset
+        operationLog.info("3.Verify if the files on destination are on multi dataset archiver containers or a normal archived dataset.");
+        File[] filesOnDisk = new File(destination).listFiles();
+        List<File> notFounds = new ArrayList<File>();
+        for (File file : filesOnDisk)
         {
-            String name = file.getName();
-            String[] nameParts = name.split("-");
-            if (nameParts.length == 4 && name.endsWith(".tar"))
+            if (multiDatasetsContainersOnDB.contains(file.getName()))
+            {
+                operationLog.info("Found multi dataset archiver container: " + file.getName());
+            } else if ((file.getName().toLowerCase().endsWith(".tar") ||
+                    file.getName().toLowerCase().endsWith(".zip"))
+                    && presentInArchiveOnDB.contains(file.getName().substring(0, file.getName().length() - 4)))
             {
-                notFoundFilesAndMDAFormat.add(file);
-                operationLog.info("Not Found file, MDA format: " + file.getName());
+                operationLog.info("Found archived dataset: " + file.getName());
             } else
             {
-                operationLog.info("Not Found file, not MDA format: " + file.getName());
+                notFounds.add(file);
+                operationLog.info("Not Found file: " + file.getName());
             }
         }
 
-        // 5.Send email with not found files with MDA format.
-        operationLog.info("Send email with not found files with MDA format.");
-        if (notFoundFilesAndMDAFormat.size() > 0)
+        // 4.Send email with not found files.
+        operationLog.info("4.Send email with not found files.");
+        if (notFounds.size() > 0)
         {
             String subject = "openBIS MultiDataSetArchiverOrphanFinderTask found files";
-            String content = "Found " + notFoundFilesAndMDAFormat.size() + " files by MultiDataSetArchiverOrphanFinderTask:\n";
-            for (File notFoundFileAndMDAFormat : notFoundFilesAndMDAFormat)
+            String content = "Found " + notFounds.size() + " files by MultiDataSetArchiverOrphanFinderTask:\n";
+            for (File notFound : notFounds)
             {
-                content += notFoundFileAndMDAFormat.getName() + "\t" + notFoundFileAndMDAFormat.length() + "\n";
+                content += notFound.getName() + "\t" + notFound.length() + "\n";
             }
             for (EMailAddress recipient : emailAddresses)
             {
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java
index d6fd57f93a13d9e2f46125057c17466e79c81f79..9fce18e0c34b6d7e9c9488677107af76b0dd40c3 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java
@@ -57,7 +57,7 @@ public class ResetArchivePendingTask implements IMaintenanceTask
         operationLog.info(ResetArchivePendingTask.class.getSimpleName() + " Started");
         // 1. Find datasets with DataSetArchivingStatus.ARCHIVE_PENDING
         IEncapsulatedOpenBISService service = ServiceProvider.getOpenBISService();
-        List<SimpleDataSetInformationDTO> inArchivePendings = service.listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus.ARCHIVE_PENDING);
+        List<SimpleDataSetInformationDTO> inArchivePendings = service.listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus.ARCHIVE_PENDING, null);
         if (inArchivePendings.isEmpty() == false)
         {
             operationLog.info("Found " + inArchivePendings.size() + " datasets in " + DataSetArchivingStatus.ARCHIVE_PENDING.name() + " status.");
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
index 48c4b4fbfdfa6db28f59e292e5f7e21ea5f5d4fe..ea2fb19f317ca8caf326ef0f9e5b888bd8d8292d 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
@@ -692,11 +692,11 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     }
 
     @Override
-    public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus archivingStatus)
+    public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus archivingStatus, Boolean presentInArchive)
             throws UserFailureException
     {
         List<SimpleDataSetInformationDTO> dataSets = service.listPhysicalDataSetsByArchivingStatus(session.getSessionToken(),
-                session.getDataStoreCode(), archivingStatus);
+                session.getDataStoreCode(), archivingStatus, presentInArchive);
         return injectDefaultShareIdIfMissing(dataSets);
     }
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java
index 28ea7a3d5f171d0c2a527f1fda924f4ed9c45da8..eb9aadde38907162abdd318fc58cc641b5e0b7b4 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java
@@ -292,7 +292,7 @@ public interface IEncapsulatedOpenBISService extends IEncapsulatedBasicOpenBISSe
      * Returns informations about physical data sets with certain archiving status
      */
     @ManagedAuthentication
-    public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus archivingStatus)
+    public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus archivingStatus, Boolean presentInArchive)
             throws UserFailureException;
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java
index 3be2a21633a0b82fee05e5a40e6ae5049ade0c50..61e8f1abf38018cea1bf4eab3c350ca85851df4b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java
@@ -605,7 +605,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
     public Experiment tryGetExperiment(String sessionToken,
             @AuthorizationGuard(guardClass = ExistingSpaceIdentifierPredicate.class) ExperimentIdentifier experimentIdentifier)
-                    throws UserFailureException
+            throws UserFailureException
     {
         assert sessionToken != null : "Unspecified session token.";
         assert experimentIdentifier != null : "Unspecified experiment identifier.";
@@ -650,7 +650,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @ReturnValueFilter(validatorClass = SampleValidator.class)
     public List<Sample> listSamples(final String sessionToken,
             @AuthorizationGuard(guardClass = ListSampleCriteriaPredicate.class)
-    final ListSampleCriteria criteria)
+            final ListSampleCriteria criteria)
     {
         final Session session = getSession(sessionToken);
         final ISampleLister sampleLister = businessObjectFactory.createSampleLister(session);
@@ -661,7 +661,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public Sample tryGetSampleWithExperiment(final String sessionToken,
             @AuthorizationGuard(guardClass = ExistingSampleOwnerIdentifierPredicate.class)
-    final SampleIdentifier sampleIdentifier) throws UserFailureException
+            final SampleIdentifier sampleIdentifier) throws UserFailureException
     {
         assert sessionToken != null : "Unspecified session token.";
         assert sampleIdentifier != null : "Unspecified sample identifier.";
@@ -860,7 +860,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
     public List<AbstractExternalData> listDataSetsByExperimentID(final String sessionToken,
             @AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class)
-    final TechId experimentID) throws UserFailureException
+            final TechId experimentID) throws UserFailureException
     {
         Session session = getSession(sessionToken);
         IDatasetLister datasetLister = createDatasetLister(session);
@@ -874,7 +874,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
     public List<AbstractExternalData> listDataSetsBySampleID(final String sessionToken,
             @AuthorizationGuard(guardClass = SampleTechIdPredicate.class)
-    final TechId sampleId, final boolean showOnlyDirectlyConnected)
+            final TechId sampleId, final boolean showOnlyDirectlyConnected)
             throws UserFailureException
     {
         final Session session = getSession(sessionToken);
@@ -935,7 +935,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
     public IEntityProperty[] tryGetPropertiesOfTopSample(final String sessionToken,
             @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class)
-    final SampleIdentifier sampleIdentifier) throws UserFailureException
+            final SampleIdentifier sampleIdentifier) throws UserFailureException
     {
         assert sessionToken != null : "Unspecified session token.";
         assert sampleIdentifier != null : "Unspecified sample identifier.";
@@ -1020,7 +1020,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public void registerSamples(final String sessionToken,
             @AuthorizationGuard(guardClass = NewSamplesWithTypePredicate.class)
-    final List<NewSamplesWithTypes> newSamplesWithType, String userIDOrNull)
+            final List<NewSamplesWithTypes> newSamplesWithType, String userIDOrNull)
             throws UserFailureException
     {
         assert sessionToken != null : "Unspecified session token.";
@@ -1037,7 +1037,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public long registerSample(final String sessionToken,
             @AuthorizationGuard(guardClass = NewSamplePredicate.class)
-    final NewSample newSample, String userIDOrNull) throws UserFailureException
+            final NewSample newSample, String userIDOrNull) throws UserFailureException
     {
         assert sessionToken != null : "Unspecified session token.";
         assert newSample != null : "Unspecified new sample.";
@@ -1071,7 +1071,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public void registerDataSet(final String sessionToken,
             @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class)
-    final SampleIdentifier sampleIdentifier, final NewExternalData externalData)
+            final SampleIdentifier sampleIdentifier, final NewExternalData externalData)
             throws UserFailureException
     {
         assert sessionToken != null : "Unspecified session token.";
@@ -1085,7 +1085,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public void registerDataSet(final String sessionToken,
             @AuthorizationGuard(guardClass = SpaceIdentifierPredicate.class)
-    final ExperimentIdentifier experimentIdentifier, final NewExternalData externalData)
+            final ExperimentIdentifier experimentIdentifier, final NewExternalData externalData)
             throws UserFailureException
     {
         assert sessionToken != null : "Unspecified session token.";
@@ -1099,7 +1099,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public void addPropertiesToDataSet(String sessionToken, List<NewProperty> properties,
             String dataSetCode, @AuthorizationGuard(guardClass = SpaceIdentifierPredicate.class)
-    final SpaceIdentifier identifier) throws UserFailureException
+            final SpaceIdentifier identifier) throws UserFailureException
     {
         assert sessionToken != null : "Unspecified session token.";
         final Session session = getSession(sessionToken);
@@ -1334,7 +1334,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
     public List<Sample> listSamplesByCriteria(final String sessionToken,
             @AuthorizationGuard(guardClass = ListSamplesByPropertyPredicate.class)
-    final ListSamplesByPropertyCriteria criteria) throws UserFailureException
+            final ListSamplesByPropertyCriteria criteria) throws UserFailureException
     {
         assert sessionToken != null : "Unspecified session token.";
         assert criteria != null : "Unspecified criteria.";
@@ -1410,13 +1410,13 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @Override
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(String sessionToken, String dataStoreCode,
-            DataSetArchivingStatus archivingStatus)
+            DataSetArchivingStatus archivingStatus, Boolean presentInArchive)
     {
         final Session session = getSession(sessionToken);
         final DataStorePE dataStore = loadDataStore(session, dataStoreCode);
         final IDatasetLister datasetLister = businessObjectFactory.createDatasetLister(session);
         final List<AbstractExternalData> dataSets =
-                datasetLister.listByArchivingStatus(dataStore.getId(), archivingStatus,
+                datasetLister.listByArchivingStatus(dataStore.getId(), archivingStatus, presentInArchive,
                         DATASET_FETCH_OPTIONS_FILE_DATASETS);
         return SimpleDataSetHelper.filterAndTranslate(dataSets);
     }
@@ -1600,7 +1600,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public Sample registerSampleAndDataSet(final String sessionToken,
             @AuthorizationGuard(guardClass = NewSamplePredicate.class)
-    final NewSample newSample, final NewExternalData externalData, String userIdOrNull)
+            final NewSample newSample, final NewExternalData externalData, String userIdOrNull)
             throws UserFailureException
     {
         assert sessionToken != null : "Unspecified session token.";
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java
index 7971e8826149110c7fd926935be41db5d793ac0d..b6185a3fe850265e5f7babb061ae5b2af79da24d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java
@@ -420,9 +420,9 @@ public class ServiceForDataStoreServerLogger extends AbstractServerLogger implem
 
     @Override
     public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(String sessionToken, String dataStoreCode,
-            DataSetArchivingStatus archivingStatus) throws UserFailureException
+            DataSetArchivingStatus archivingStatus, Boolean presentInArchive) throws UserFailureException
     {
-        logAccess(sessionToken, "listPhysicalDataSetsByArchivingStatus", "DATA_STORE(%s) STATUS(%s)", dataStoreCode, archivingStatus);
+        logAccess(sessionToken, "listPhysicalDataSetsByArchivingStatus", "DATA_STORE(%s) STATUS(%s) PRESENT(%s)", dataStoreCode, archivingStatus, presentInArchive);
         return null;
     }
     
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
index f6d89c414a4443f42da33d9289b082f88c89c0dd..e2749b5f011bd9c2075b630413c69e3bdf2429a6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
@@ -532,12 +532,23 @@ public class DatasetLister extends AbstractLister implements IDatasetLister
     }
 
     @Override
-    public List<AbstractExternalData> listByArchivingStatus(long dataStoreID, DataSetArchivingStatus archivingStatus,
+    public List<AbstractExternalData> listByArchivingStatus(long dataStoreID, DataSetArchivingStatus archivingStatus, Boolean presentInArchive,
             EnumSet<DataSetFetchOption> datasetFetchOptions)
     {
         checkFetchOptions(datasetFetchOptions);
 
-        List<DatasetRecord> dataSets = query.getDatasetsByDataStoreIdWithArchivingStatus(dataStoreID, archivingStatus.name());
+        List<DatasetRecord> dataSets = null;
+
+        if (archivingStatus != null && presentInArchive != null)
+        {
+            dataSets = query.getDatasetsByDataStoreIdWithArchivingStatusAndPressentInArchive(dataStoreID, archivingStatus.name(), presentInArchive);
+        } else if (archivingStatus == null)
+        {
+            dataSets = query.getDatasetsByDataStoreIdWithPressentInArchive(dataStoreID, presentInArchive);
+        } else if (presentInArchive == null)
+        {
+            dataSets = query.getDatasetsByDataStoreIdWithArchivingStatus(dataStoreID, archivingStatus.name());
+        }
 
         return orderByCode(enrichDatasets(dataSets, datasetFetchOptions));
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
index 64ef8d8962294db04293384ae03a4f237261ee27..28b14a6887839eeb192f78c02bbddd48e0f2bfac 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
@@ -142,7 +142,7 @@ public interface IDatasetLister
     /**
      * Lists physical datasets by archiving status of the specified data store.
      */
-    List<AbstractExternalData> listByArchivingStatus(long dataStoreID, DataSetArchivingStatus archivingStatus,
+    List<AbstractExternalData> listByArchivingStatus(long dataStoreID, DataSetArchivingStatus archivingStatus, Boolean presentInArchive,
             EnumSet<DataSetFetchOption> datasetFetchOptions);
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
index b60c471bea37efa7c95b6d5531e707aa1a8d0875..b9a8e953c9122ce8de1289a560db1c2b71ad2c81 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
@@ -270,9 +270,15 @@ public interface IDatasetListingQuery extends BaseQuery, IPropertyListingQuery
             + " where data.dast_id = ?{1} and size is null and data.code > ?{3}"
             + " order by data.code limit ?{2}", fetchSize = FETCH_SIZE)
     public List<DatasetRecord> getDatasetsByDataStoreIdWithUnknownSize(long dataStoreID, int limit, String dataSetCodeLowerLimit);
-
+    
     @Select(sql = SELECT_ALL_EXTERNAL_DATAS + " where data.dast_id = ?{1} and external_data.status = ?{2}", fetchSize = FETCH_SIZE)
     public List<DatasetRecord> getDatasetsByDataStoreIdWithArchivingStatus(long dataStoreID, String archivingStatus);
+    
+    @Select(sql = SELECT_ALL_EXTERNAL_DATAS + " where data.dast_id = ?{1} and external_data.present_in_archive = ?{2}", fetchSize = FETCH_SIZE)
+    public List<DatasetRecord> getDatasetsByDataStoreIdWithPressentInArchive(long dataStoreID, Boolean presentInArchive);
+    
+    @Select(sql = SELECT_ALL_EXTERNAL_DATAS + " where data.dast_id = ?{1} and external_data.status = ?{2} and external_data.present_in_archive = ?{3}", fetchSize = FETCH_SIZE)
+    public List<DatasetRecord> getDatasetsByDataStoreIdWithArchivingStatusAndPressentInArchive(long dataStoreID, String archivingStatus, Boolean presentInArchive);
 
     // NOTE: we list ALL data sets (even those in trash) using data_all table here
     @Select(sql = "SELECT code, share_id FROM data_all LEFT OUTER JOIN external_data "
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java
index 31a7f890d5343fe23e851db75ba9c72a4d0a33f1..0f34c083d3a912a8d2a051108fa0a1cfea79f089 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java
@@ -256,8 +256,7 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider
      * Registers/updates various entities in one transaction.
      */
     @Transactional
-    @DatabaseCreateOrDeleteModification(value =
-    { ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET })
+    @DatabaseCreateOrDeleteModification(value = { ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET })
     public void registerEntities(String sessionToken, EntityCollectionForCreationOrUpdate collection)
             throws UserFailureException;
 
@@ -431,8 +430,8 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider
      */
     @Transactional(readOnly = true)
     public List<SimpleDataSetInformationDTO> listPhysicalDataSetsByArchivingStatus(String sessionToken, String dataStoreCode,
-            DataSetArchivingStatus archivingStatus);
-    
+            DataSetArchivingStatus archivingStatus, Boolean presentInArchive);
+
     /**
      * Lists the <var>limit</var> oldest physical data sets younger than <var>youngerThan</var> belonging to specified data store.
      * <p>
@@ -618,8 +617,7 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider
      * @throws UserFailureException if given data set code could not be found in the persistence layer.
      */
     @Transactional
-    @DatabaseCreateOrDeleteModification(value =
-    { ObjectKind.SAMPLE, ObjectKind.DATA_SET })
+    @DatabaseCreateOrDeleteModification(value = { ObjectKind.SAMPLE, ObjectKind.DATA_SET })
     public Sample registerSampleAndDataSet(final String sessionToken, final NewSample newSample,
             final NewExternalData externalData, String userIdOrNull) throws UserFailureException;
 
@@ -647,10 +645,8 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider
      */
     @Transactional
     @Conversational(progress = Progress.MANUAL)
-    @DatabaseUpdateModification(value =
-    { ObjectKind.SAMPLE, ObjectKind.EXPERIMENT, ObjectKind.DATA_SET })
-    @DatabaseCreateOrDeleteModification(value =
-    { ObjectKind.SPACE, ObjectKind.PROJECT, ObjectKind.SAMPLE, ObjectKind.EXPERIMENT,
+    @DatabaseUpdateModification(value = { ObjectKind.SAMPLE, ObjectKind.EXPERIMENT, ObjectKind.DATA_SET })
+    @DatabaseCreateOrDeleteModification(value = { ObjectKind.SPACE, ObjectKind.PROJECT, ObjectKind.SAMPLE, ObjectKind.EXPERIMENT,
             ObjectKind.DATA_SET })
     public AtomicEntityOperationResult performEntityOperations(String sessionToken,
             AtomicEntityOperationDetails operationDetails);
@@ -702,10 +698,8 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider
      * permanently deletes a list of data sets.
      */
     @Transactional
-    @DatabaseUpdateModification(value =
-    { ObjectKind.SAMPLE, ObjectKind.EXPERIMENT })
-    @DatabaseCreateOrDeleteModification(value =
-    { ObjectKind.DATA_SET })
+    @DatabaseUpdateModification(value = { ObjectKind.SAMPLE, ObjectKind.EXPERIMENT })
+    @DatabaseCreateOrDeleteModification(value = { ObjectKind.DATA_SET })
     public void removeDataSetsPermanently(String sessionToken, List<String> dataSetCodes,
             String reason);
 
@@ -713,8 +707,7 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider
      * updates a data set.
      */
     @Transactional
-    @DatabaseUpdateModification(value =
-    { ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET })
+    @DatabaseUpdateModification(value = { ObjectKind.EXPERIMENT, ObjectKind.SAMPLE, ObjectKind.DATA_SET })
     public void updateDataSet(String sessionToken, DataSetUpdatesDTO dataSetUpdates);
 
     /**