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 1b0d7bd0fc04de342c1943981471e9fd40645582..31805fceb126b65c9642606ade50587bb64956b3 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
@@ -1,7 +1,7 @@
 package ch.systemsx.cisd.etlserver.plugins;
 
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
@@ -58,37 +58,38 @@ public class ResetArchivePendingTask implements IMaintenanceTask
         // 1. Find datasets with DataSetArchivingStatus.ARCHIVE_PENDING
         IEncapsulatedOpenBISService service = ServiceProvider.getOpenBISService();
         List<SimpleDataSetInformationDTO> inArchivePendings = service.listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus.ARCHIVE_PENDING);
-        operationLog.info("Found " + inArchivePendings.size() + " datasets in " + DataSetArchivingStatus.ARCHIVE_PENDING.name() + " status.");
-
-        // 2. Filter out datasets that are not on the command queue
-        IDataSetCommandExecutorProvider commandExecutorProvider =
-                (IDataSetCommandExecutorProvider) ServiceProvider
-                        .getApplicationContext()
-                        .getBean(COMMAND_EXECUTOR_BEAN);
-        IDataSetCommandExecutor commandExecutor = commandExecutorProvider.getDefaultExecutor();
-
-        Set<String> inQueue = commandExecutor.getDataSetCodesFromCommandQueue();
-        operationLog.info("Found " + inQueue.size() + " datasets in the command queue.");
-
-        List<SimpleDataSetInformationDTO> dataSetsToUpdate = new ArrayList<SimpleDataSetInformationDTO>();
-        for (SimpleDataSetInformationDTO inArchivePending : inArchivePendings)
+        if (inArchivePendings.isEmpty() == false)
         {
-            if (inQueue.contains(inArchivePending.getDataSetCode()) == false 
-                    && inArchivePending.isPresentInArchive() == false)
+            operationLog.info("Found " + inArchivePendings.size() + " datasets in " + DataSetArchivingStatus.ARCHIVE_PENDING.name() + " status.");
+            
+            // 2. Filter out datasets that are not on the command queue
+            IDataSetCommandExecutorProvider commandExecutorProvider =
+                    (IDataSetCommandExecutorProvider) ServiceProvider
+                    .getApplicationContext()
+                    .getBean(COMMAND_EXECUTOR_BEAN);
+            Set<String> inQueue = new HashSet<>();
+            List<IDataSetCommandExecutor> executors = commandExecutorProvider.getAllExecutors();
+            for (IDataSetCommandExecutor executor : executors)
             {
-                dataSetsToUpdate.add(inArchivePending);
-                operationLog.info(inArchivePending.getDataSetCode() + " not found in command queue, scheduled to update.");
+                inQueue.addAll(executor.getDataSetCodesFromCommandQueue());
             }
-        }
-
-        // 3. Update datasets status to AVAILABLE
-        operationLog.info("Going to update " + dataSetsToUpdate.size() + " datasets.");
-        for (SimpleDataSetInformationDTO dataSetToUpdate : dataSetsToUpdate)
-        {
-            DataSetCodesWithStatus codesWithStatus = new DataSetCodesWithStatus(
-                    Arrays.asList(dataSetToUpdate.getDataSetCode()),
-                    DataSetArchivingStatus.AVAILABLE,
-                    dataSetToUpdate.isPresentInArchive());
+            operationLog.info("Found " + inQueue.size() + " datasets in the command queue.");
+            
+            List<String> dataSetsToUpdate = new ArrayList<>();
+            for (SimpleDataSetInformationDTO inArchivePending : inArchivePendings)
+            {
+                if (inQueue.contains(inArchivePending.getDataSetCode()) == false 
+                        && inArchivePending.isPresentInArchive() == false)
+                {
+                    dataSetsToUpdate.add(inArchivePending.getDataSetCode());
+                    operationLog.info(inArchivePending.getDataSetCode() + " not found in command queue, scheduled to update.");
+                }
+            }
+            
+            // 3. Update datasets status to AVAILABLE
+            operationLog.info("Going to update " + dataSetsToUpdate.size() + " datasets.");
+            DataSetCodesWithStatus codesWithStatus = new DataSetCodesWithStatus(dataSetsToUpdate,
+                    DataSetArchivingStatus.AVAILABLE, false);
             QueueingDataSetStatusUpdaterService.update(codesWithStatus);
         }
         operationLog.info(ResetArchivePendingTask.class.getSimpleName() + " Finished");
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java
index 86e85312730c5ac59a5f6966caf799a30b6965cb..909d8839cddf43124522bd070e225b8d4388a11a 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java
@@ -18,7 +18,6 @@ package ch.systemsx.cisd.openbis.dss.generic.server;
 
 import java.io.File;
 import java.io.FilenameFilter;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -194,6 +193,7 @@ class DataSetCommandExecutor implements IDataSetCommandExecutor
             operationLog.debug("Scheduling " + command);
         }
         commandQueue.add(command);
+        operationLog.info("Scheduled: " + command.getDescription());
     }
 
     private IShareIdManager getShareIdManager()
@@ -221,6 +221,7 @@ class DataSetCommandExecutor implements IDataSetCommandExecutor
         for (IDataSetCommand command : commandQueue)
         {
             dataSetCodes.addAll(command.getDataSetCodes());
+            operationLog.info("Gather data set codes from command [" + command.getDescription() + "]");
         }
         return dataSetCodes;
     }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorProvider.java
index 3be969f55ce82f9d68607c690d32913f603ec7f6..5902cd2bbc108432f443370ccbbfc4021d97b30f 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorProvider.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorProvider.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.dss.generic.server;
 
 import java.io.File;
+import java.util.List;
 
 import ch.systemsx.cisd.openbis.dss.generic.shared.IProcessingPluginTask;
 
@@ -30,6 +31,8 @@ public interface IDataSetCommandExecutorProvider
     public void init(File storeRoot);
 
     public IDataSetCommandExecutor getDefaultExecutor();
-
+    
+    public List<IDataSetCommandExecutor> getAllExecutors();
+    
     public IDataSetCommandExecutor getExecutor(IProcessingPluginTask processingTask, String processingTaskKey);
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/KeyBasedDataSetCommandExecutorProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/KeyBasedDataSetCommandExecutorProvider.java
index 6373eba288ba895f34df23a6ad58ea68cb7a607d..57526e420dc4bfde63c4ae9c76e31920e56c4183 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/KeyBasedDataSetCommandExecutorProvider.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/KeyBasedDataSetCommandExecutorProvider.java
@@ -159,6 +159,13 @@ public class KeyBasedDataSetCommandExecutorProvider implements IDataSetCommandEx
         }
         return defaultExecutor;
     }
+    
+
+    @Override
+    public List<IDataSetCommandExecutor> getAllExecutors()
+    {
+        return new ArrayList<>(executorsByName.values());
+    }
 
     @Override
     public IDataSetCommandExecutor getExecutor(IProcessingPluginTask processingTask, String processingTaskKey)