diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java
index fcf6723937a836a0010f750ad69794db1660bc4a..7effe7f8cea59fead1b6d94f80cae8c4a0bd7961 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java
@@ -33,6 +33,7 @@ import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.AbstractArch
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.RsyncArchiveCopierFactory;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.RsyncArchiver;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.SshCommandExecutorFactory;
+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.MultiDatasetArchiverDBTransaction;
 import ch.systemsx.cisd.openbis.dss.generic.shared.ArchiverTaskContext;
@@ -90,15 +91,21 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
     @Override
     protected DatasetProcessingStatuses doArchive(List<DatasetDescription> dataSets, ArchiverTaskContext context)
     {
-        verifyDataSetsSize(dataSets);
 
         DatasetProcessingStatuses result = new DatasetProcessingStatuses();
-        MultiDatasetArchiverDBTransaction transaction = new MultiDatasetArchiverDBTransaction();
 
-        filterAlreadyPresentInArchive(dataSets, result, transaction);
+        filterAlreadyPresentInArchive(dataSets, result);
+
+        if (dataSets.isEmpty())
+        {
+            return result;
+        }
 
+        MultiDatasetArchiverDBTransaction transaction = new MultiDatasetArchiverDBTransaction();
         try
         {
+            verifyDataSetsSize(dataSets);
+
             result = doArchive(dataSets, transaction, context);
 
             transaction.commit();
@@ -119,14 +126,15 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
         return result;
     }
 
-    private void filterAlreadyPresentInArchive(List<DatasetDescription> dataSets, DatasetProcessingStatuses result,
-            MultiDatasetArchiverDBTransaction transaction)
+    private void filterAlreadyPresentInArchive(List<DatasetDescription> dataSets, DatasetProcessingStatuses result)
     {
+        IMultiDataSetArchiverReadonlyQueryDAO query = MultiDatasetArchiverDBTransaction.getReadonlyQuery();
+
         Iterator<DatasetDescription> it = dataSets.iterator();
         while (it.hasNext())
         {
             DatasetDescription dataSet = it.next();
-            if (transaction.getDataSetByCode(dataSet.getDataSetCode()) != null)
+            if (query.getDataSetForCode(dataSet.getDataSetCode()) != null)
             {
                 result.addResult(dataSet.getDataSetCode(), Status.OK, Operation.ARCHIVE);
                 it.remove();
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java
index 9183ad560685b721086e88af48e9368f786ab050..06e3b78b5948c3f5dfbeac3f56bfad29b3d2409b 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java
@@ -40,6 +40,11 @@ public class MultiDatasetArchiverDBTransaction
         this.transaction = getTransactionalQuery();
     }
 
+    public static IMultiDataSetArchiverReadonlyQueryDAO getReadonlyQuery()
+    {
+        return QueryTool.getQuery(dataSource, IMultiDataSetArchiverReadonlyQueryDAO.class);
+    }
+
     private static IMultiDataSetArchiverQueryDAO getTransactionalQuery()
     {
         return QueryTool.getQuery(dataSource, IMultiDataSetArchiverQueryDAO.class);
@@ -65,14 +70,6 @@ public class MultiDatasetArchiverDBTransaction
         return container;
     }
 
-    /**
-     * Returns null if no data set found
-     */
-    public MultiDataSetArchiverDataSetDTO getDataSetByCode(String dataSetCode)
-    {
-        return transaction.getDataSetForCode(dataSetCode);
-    }
-
     public MultiDataSetArchiverDataSetDTO insertDataset(DatasetDescription dataSet,
             MultiDataSetArchiverContainerDTO container)
     {