diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp
index dc5b54876ca77b258b789e7426553592b9dc3107..d7a4f9064530ba1b9efc394fd76d0633b7bdc1e7 100644
--- a/catalogue/CatalogueTest.cpp
+++ b/catalogue/CatalogueTest.cpp
@@ -7506,8 +7506,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
     const std::string vid = copyNb == 1 ? vid1 : vid2;
     const uint64_t startFseq = 1;
     const uint64_t maxNbFiles = nbArchiveFiles;
-    auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles);
-    auto m = archiveFileListToMap(archiveFiles);
+    const auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles);
+    const auto m = archiveFileListToMap(archiveFiles);
     ASSERT_EQ(nbArchiveFiles, m.size());
 
     for(uint64_t i = 1; i <= nbArchiveFiles; i++) {
@@ -7572,9 +7572,9 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
     const std::string vid = copyNb == 1 ? vid1 : vid2;
     const uint64_t startFseq = 1;
     const uint64_t maxNbFiles = nbArchiveFiles / 2;
-    auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles);
-    auto m = archiveFileListToMap(archiveFiles);
-    ASSERT_EQ(nbArchiveFiles, m.size());
+    const auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles);
+    const auto m = archiveFileListToMap(archiveFiles);
+    ASSERT_EQ(nbArchiveFiles / 2, m.size());
 
     for(uint64_t i = 1; i <= nbArchiveFiles / 2; i++) {
       std::ostringstream diskFileId;
@@ -7636,11 +7636,11 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
 
   for(uint64_t copyNb = 1; copyNb <= 2; copyNb++) {
     const std::string vid = copyNb == 1 ? vid1 : vid2;
-    const uint64_t startFseq = 1;
+    const uint64_t startFseq = nbArchiveFiles / 2 + 1;
     const uint64_t maxNbFiles = nbArchiveFiles / 2;
-    auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles);
-    auto m = archiveFileListToMap(archiveFiles);
-    ASSERT_EQ(nbArchiveFiles, m.size());
+    const auto archiveFiles = m_catalogue->getFilesForRepack(vid, startFseq, maxNbFiles);
+    const auto m = archiveFileListToMap(archiveFiles);
+    ASSERT_EQ(nbArchiveFiles / 2, m.size());
 
     for(uint64_t i = nbArchiveFiles / 2 + 1; i <= nbArchiveFiles; i++) {
       std::ostringstream diskFileId;
diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp
index f6cf6970715213b5de86180e0de2a9fbce16d9e1..f41f5ba84ac3f40a4ca17be5456d496824430007 100644
--- a/catalogue/RdbmsCatalogue.cpp
+++ b/catalogue/RdbmsCatalogue.cpp
@@ -4060,12 +4060,14 @@ std::list<common::dataStructures::ArchiveFile> RdbmsCatalogue::getFilesForRepack
       "INNER JOIN TAPE ON "
         "TAPE_FILE.VID = TAPE.VID "
        "WHERE "
-         "TAPE_FILE.VID = :VID "
+         "TAPE_FILE.VID = :VID AND "
+         "TAPE_FILE.FSEQ >= :START_FSEQ "
        "ORDER BY FSEQ";
 
     auto conn = m_connPool.getConn();
     auto stmt = conn.createStmt(sql);
     stmt.bindString(":VID", vid);
+    stmt.bindUint64(":START_FSEQ", startFSeq);
     auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF);
 
     std::list<common::dataStructures::ArchiveFile> archiveFiles;
@@ -4099,6 +4101,8 @@ std::list<common::dataStructures::ArchiveFile> RdbmsCatalogue::getFilesForRepack
       archiveFile.tapeFiles[rset.columnUint64("COPY_NB")] = tapeFile;
 
       archiveFiles.push_back(archiveFile);
+
+      if(maxNbFiles == archiveFiles.size()) break;
     }
     return archiveFiles;
   } catch(exception::UserError &) {