diff --git a/scheduler/MockSchedulerDatabase.cpp b/scheduler/MockSchedulerDatabase.cpp
index 2b60ea6b7a73c8e4b75fa77c2897d81060cebb85..3c371a5532271b48216199bc7f0fcf8c9d978054 100644
--- a/scheduler/MockSchedulerDatabase.cpp
+++ b/scheduler/MockSchedulerDatabase.cpp
@@ -20,6 +20,7 @@
 #include "nameserver/NameServer.hpp"
 #include "scheduler/AdminHost.hpp"
 #include "scheduler/AdminUser.hpp"
+#include "scheduler/ArchiveToDirRequest.hpp"
 #include "scheduler/ArchiveToFileRequest.hpp"
 #include "scheduler/ArchiveToTapeCopyRequest.hpp"
 #include "scheduler/ArchivalRoute.hpp"
@@ -188,7 +189,10 @@ cta::MockSchedulerDatabase::~MockSchedulerDatabase() throw() {
 // queue
 //------------------------------------------------------------------------------
 void cta::MockSchedulerDatabase::queue(const ArchiveToDirRequest &rqst) {
-  throw exception::Exception(std::string(__FUNCTION__) + " not implemented");
+  for(auto itor = rqst.getArchiveToFileRequests().cbegin();
+    itor != rqst.getArchiveToFileRequests().cend(); itor++) {
+    queue(*itor);
+  }
 }
 
 //------------------------------------------------------------------------------
diff --git a/scheduler/Scheduler.cpp b/scheduler/Scheduler.cpp
index a7a556738e38a6fa66f0cd1cd85c420e7c1f5c0d..d80efea83becfe37b4a3271dff007c6a2557a57f 100644
--- a/scheduler/Scheduler.cpp
+++ b/scheduler/Scheduler.cpp
@@ -443,6 +443,7 @@ void cta::Scheduler::queueArchiveRequest(
   const SecurityIdentity &requester,
   const std::list<std::string> &remoteFiles,
   const std::string &archiveFileOrDir) {
+
   const bool archiveToDir = m_ns.dirExists(requester, archiveFileOrDir);
   if(archiveToDir) {
     const std::string &archiveDir = archiveFileOrDir;
@@ -479,17 +480,29 @@ void cta::Scheduler::queueArchiveToDirRequest(
   const std::list<std::string> &remoteFiles,
   const std::string &archiveDir) {
 
+  const uint64_t priority = 0; // TO BE DONE
+
   const auto storageClassName = m_ns.getDirStorageClass(requester, archiveDir);
   const auto storageClass = m_db.getStorageClass(storageClassName);
   assertStorageClassHasAtLeastOneCopy(storageClass);
 
   const bool archiveDirEndsWithASlash = Utils::endsWith(archiveDir, '/');
+  std::list<ArchiveToFileRequest> archiveToFileRequests;
   for(auto itor = remoteFiles.cbegin(); itor != remoteFiles.cend(); itor++) {
     const auto remoteFile = *itor;
     const auto remoteFileName = Utils::getEnclosedName(remoteFile);
     const std::string archiveFile = archiveDirEndsWithASlash ?
       archiveDir + remoteFileName : archiveDir + '/' + remoteFileName;
-    queueArchiveToFileRequest(requester, remoteFile, archiveFile);
+    archiveToFileRequests.push_back(createArchiveToFileRequest(requester,
+      remoteFile, archiveFile, priority));
+  }
+
+  m_db.queue(ArchiveToDirRequest(archiveDir, archiveToFileRequests, priority,
+    requester));
+
+  for(auto itor = archiveToFileRequests.cbegin(); itor !=
+    archiveToFileRequests.cend(); itor++) {
+    m_ns.createFile(requester, itor->getArchiveFile(), 0666);
   }
 }
 
@@ -514,7 +527,10 @@ void cta::Scheduler::queueArchiveToFileRequest(
   const std::string &remoteFile,
   const std::string &archiveFile) {
 
-  m_db.queue(createArchiveToFileRequest(requester, remoteFile, archiveFile));
+  const uint64_t priority = 0; // TO BE DONE
+
+  m_db.queue(createArchiveToFileRequest(requester, remoteFile, archiveFile,
+    priority));
 
   m_ns.createFile(requester, archiveFile, 0666);
 }
@@ -525,7 +541,8 @@ void cta::Scheduler::queueArchiveToFileRequest(
 cta::ArchiveToFileRequest cta::Scheduler::createArchiveToFileRequest(
   const SecurityIdentity &requester,
   const std::string &remoteFile,
-  const std::string &archiveFile) const {
+  const std::string &archiveFile,
+  const uint64_t priority) const {
 
   const std::string enclosingPath = Utils::getEnclosingPath(archiveFile);
   const std::string storageClassName = m_ns.getDirStorageClass(requester,
@@ -534,7 +551,6 @@ cta::ArchiveToFileRequest cta::Scheduler::createArchiveToFileRequest(
   assertStorageClassHasAtLeastOneCopy(storageClass);
   const auto routes = m_db.getArchivalRoutes(storageClassName);
   const auto copyNbToPoolMap = createCopyNbToPoolMap(routes);
-  const uint64_t priority = 0;
 
   return ArchiveToFileRequest(
     remoteFile,
diff --git a/scheduler/Scheduler.hpp b/scheduler/Scheduler.hpp
index 858443b7ff0427c564732f8b539745b4b74f4724..d419d8f2b73330db7da5a0dd7228ce1243289e74 100644
--- a/scheduler/Scheduler.hpp
+++ b/scheduler/Scheduler.hpp
@@ -636,11 +636,13 @@ private:
    * @param remoteFile The URL of the remote file.
    * @param archiveFile The full path of the destination file within the
    * archive namespace.
+   * @param priority The priority of the request.
    */
   ArchiveToFileRequest createArchiveToFileRequest(
     const SecurityIdentity &requester,
     const std::string &remoteFile,
-    const std::string &archiveFile) const;
+    const std::string &archiveFile,
+    const uint64_t priority) const;
 
   /**
    * Returns the map from tape copy number to tape pool name for the specified