diff --git a/libs/middletier/ArchiveRoute.cpp b/libs/middletier/ArchiveRoute.cpp
index 0079ca603e10ef28bfa09fd682fb08554360c1dc..108811f447b469cc70d1dd85b0f1dbfa637ad6fb 100644
--- a/libs/middletier/ArchiveRoute.cpp
+++ b/libs/middletier/ArchiveRoute.cpp
@@ -13,7 +13,7 @@ cta::ArchiveRoute::ArchiveRoute():
 //------------------------------------------------------------------------------
 cta::ArchiveRoute::ArchiveRoute(
   const std::string &storageClassName,
-  const uint8_t copyNb,
+  const uint16_t copyNb,
   const std::string &tapePoolName,
   const UserIdentity &creator,
   const time_t creationTime,
@@ -36,7 +36,7 @@ const std::string &cta::ArchiveRoute::getStorageClassName() const throw() {
 //------------------------------------------------------------------------------
 // getCopyNb
 //------------------------------------------------------------------------------
-uint8_t cta::ArchiveRoute::getCopyNb() const throw() {
+uint16_t cta::ArchiveRoute::getCopyNb() const throw() {
   return m_copyNb;
 }
 
diff --git a/libs/middletier/ArchiveRoute.hpp b/libs/middletier/ArchiveRoute.hpp
index 7cac25af331e8697e14a5fb49f2fb5eac139d6bc..09258f902331731e5ec28eee86c2256fb1e73517 100644
--- a/libs/middletier/ArchiveRoute.hpp
+++ b/libs/middletier/ArchiveRoute.hpp
@@ -31,7 +31,7 @@ public:
    */
   ArchiveRoute(
     const std::string &storageClassName,
-    const uint8_t copyNb,
+    const uint16_t copyNb,
     const std::string &tapePoolName,
     const UserIdentity &creator,
     const time_t creationTime,
@@ -51,7 +51,7 @@ public:
    *
    * @return The tape copy number.
    */
-  uint8_t getCopyNb() const throw();
+  uint16_t getCopyNb() const throw();
 
   /**
    * Returns the name of the destination tape pool.
diff --git a/libs/middletier/ArchiveRouteId.cpp b/libs/middletier/ArchiveRouteId.cpp
index 02aaea87be1f5d1ef8281b221cc2d47d381f80b6..0741b9427fbbc271bb3b3a9cb54c35abe924f083 100644
--- a/libs/middletier/ArchiveRouteId.cpp
+++ b/libs/middletier/ArchiveRouteId.cpp
@@ -12,7 +12,7 @@ cta::ArchiveRouteId::ArchiveRouteId():
 //------------------------------------------------------------------------------
 cta::ArchiveRouteId::ArchiveRouteId(
   const std::string &storageClassName,
-  const uint8_t copyNb):
+  const uint16_t copyNb):
   m_storageClassName(storageClassName),
   m_copyNb(copyNb) {
 }
@@ -38,6 +38,6 @@ const std::string &cta::ArchiveRouteId::getStorageClassName() const throw() {
 //------------------------------------------------------------------------------
 // getCopyNb
 //------------------------------------------------------------------------------
-uint8_t cta::ArchiveRouteId::getCopyNb() const throw() {
+uint16_t cta::ArchiveRouteId::getCopyNb() const throw() {
   return m_copyNb;
 }
diff --git a/libs/middletier/ArchiveRouteId.hpp b/libs/middletier/ArchiveRouteId.hpp
index a8988e48a1297f2027dc0112d866bac9a549b892..82042c3d5fe026121de15999101941e1b5993a53 100644
--- a/libs/middletier/ArchiveRouteId.hpp
+++ b/libs/middletier/ArchiveRouteId.hpp
@@ -25,7 +25,7 @@ public:
    */
   ArchiveRouteId(
     const std::string &storageClassName,
-    const uint8_t copyNb);
+    const uint16_t copyNb);
 
   /**
    * Less than operator.
@@ -48,7 +48,7 @@ public:
    *
    * @return The tape copy number.
    */
-  uint8_t getCopyNb() const throw();
+  uint16_t getCopyNb() const throw();
 
 private:
 
@@ -60,7 +60,7 @@ private:
   /**
    * The tape copy number.
    */
-  uint8_t m_copyNb;
+  uint16_t m_copyNb;
 
 }; // class ArchiveRouteId
 
diff --git a/libs/middletier/FileSystemStorageClasses.cpp b/libs/middletier/FileSystemStorageClasses.cpp
index 6b10a629bb2ea75914e13783343f96a20a64cdc4..52641487e7afe4f00233f690141430884b5cdc05 100644
--- a/libs/middletier/FileSystemStorageClasses.cpp
+++ b/libs/middletier/FileSystemStorageClasses.cpp
@@ -8,7 +8,7 @@
 //------------------------------------------------------------------------------
 void cta::FileSystemStorageClasses::createStorageClass(
   const std::string &name,
-  const uint8_t nbCopies,
+  const uint16_t nbCopies,
   const UserIdentity &creator,
   const std::string &comment) {
   try {
diff --git a/libs/middletier/FileSystemStorageClasses.hpp b/libs/middletier/FileSystemStorageClasses.hpp
index 461dcd7e0ee83a31133091fb9c698f40f55a04f4..c13a1eccb578e6829b13bb35d0b0e0f66acc327f 100644
--- a/libs/middletier/FileSystemStorageClasses.hpp
+++ b/libs/middletier/FileSystemStorageClasses.hpp
@@ -26,7 +26,7 @@ public:
    */
   void createStorageClass(
     const std::string &name,
-    const uint8_t nbCopies,
+    const uint16_t nbCopies,
     const UserIdentity &creator,
     const std::string &comment);
 
diff --git a/libs/middletier/MiddleTierAdmin.hpp b/libs/middletier/MiddleTierAdmin.hpp
index 962d0426fcebfa4554d4495559169382f08024cd..7dd7184e1f30f47b9255e8a63a140ea70186fa9b 100644
--- a/libs/middletier/MiddleTierAdmin.hpp
+++ b/libs/middletier/MiddleTierAdmin.hpp
@@ -109,7 +109,7 @@ public:
   virtual void createStorageClass(
     const SecurityIdentity &requester,
     const std::string &name,
-    const uint8_t nbCopies,
+    const uint16_t nbCopies,
     const std::string &comment) = 0;
 
   /**
@@ -186,7 +186,7 @@ public:
   virtual void createArchiveRoute(
     const SecurityIdentity &requester,
     const std::string &storageClassName,
-    const uint8_t copyNb,
+    const uint16_t copyNb,
     const std::string &tapePoolName,
     const std::string &comment) = 0;
 
@@ -202,7 +202,7 @@ public:
   virtual void deleteArchiveRoute(
     const SecurityIdentity &requester,
     const std::string &storageClassName,
-    const uint8_t copyNb) = 0;
+    const uint16_t copyNb) = 0;
 
   /**
    * Gets the current list of archive routes.
diff --git a/libs/middletier/MockArchiveRouteTable.cpp b/libs/middletier/MockArchiveRouteTable.cpp
index b0543efc63c1d7ca582fc7c4da11536ed4e38cf8..d4344f1062ff2ac878254373754bc064087ebe31 100644
--- a/libs/middletier/MockArchiveRouteTable.cpp
+++ b/libs/middletier/MockArchiveRouteTable.cpp
@@ -8,7 +8,7 @@
 //------------------------------------------------------------------------------
 void cta::MockArchiveRouteTable::createArchiveRoute(
   const std::string &storageClassName,
-  const uint8_t copyNb,
+  const uint16_t copyNb,
   const std::string &tapePoolName,
   const UserIdentity &creator,
   const std::string &comment) {
@@ -45,7 +45,7 @@ void cta::MockArchiveRouteTable::checkArchiveRouteDoesNotAlreadyExists(
 //------------------------------------------------------------------------------
 void cta::MockArchiveRouteTable::deleteArchiveRoute(
   const std::string &storageClassName,
-  const uint8_t copyNb) {
+  const uint16_t copyNb) {
   const ArchiveRouteId routeId(storageClassName, copyNb);
   std::map<ArchiveRouteId, ArchiveRoute>::iterator itor =
     m_archiveRoutes.find(routeId);
@@ -77,7 +77,7 @@ std::list<cta::ArchiveRoute> cta::MockArchiveRouteTable::
 //------------------------------------------------------------------------------
 const cta::ArchiveRoute &cta::MockArchiveRouteTable::getArchiveRoute(
   const std::string &storageClassName,
-  const uint8_t copyNb) const {
+  const uint16_t copyNb) const {
   const ArchiveRouteId routeId(storageClassName, copyNb);
   std::map<ArchiveRouteId, ArchiveRoute>::const_iterator itor =
     m_archiveRoutes.find(routeId);
@@ -94,7 +94,7 @@ const cta::ArchiveRoute &cta::MockArchiveRouteTable::getArchiveRoute(
 // checkArchiveRouteExists
 //------------------------------------------------------------------------------
 void cta::MockArchiveRouteTable::checkArchiveRouteExists(
-  const std::string &storageClassName, const uint8_t copyNb) const {
+  const std::string &storageClassName, const uint16_t copyNb) const {
 }
 
 //------------------------------------------------------------------------------
diff --git a/libs/middletier/MockArchiveRouteTable.hpp b/libs/middletier/MockArchiveRouteTable.hpp
index f863a82087d95a191fd5d404fd5db94cef0c9bc2..2e9a996135dd2e916dcab2b4119719b3c0c92e41 100644
--- a/libs/middletier/MockArchiveRouteTable.hpp
+++ b/libs/middletier/MockArchiveRouteTable.hpp
@@ -28,7 +28,7 @@ public:
    */
   void createArchiveRoute(
     const std::string &storageClassName,
-    const uint8_t copyNb,
+    const uint16_t copyNb,
     const std::string &tapePoolName,
     const UserIdentity &creator,
     const std::string &comment);
@@ -42,7 +42,7 @@ public:
    */
   void deleteArchiveRoute(
     const std::string &storageClassName,
-    const uint8_t copyNb);
+    const uint16_t copyNb);
 
   /**
    * Gets the current list of archive routes.
@@ -61,7 +61,7 @@ public:
    */
   const ArchiveRoute &getArchiveRoute(
     const std::string &storageClassName,
-    const uint8_t copyNb) const;
+    const uint16_t copyNb) const;
 
   /**
    * Throws an exception if the specified archive route does not exist.
@@ -71,7 +71,7 @@ public:
    * @param copyNb The tape copy number.
    */
   void checkArchiveRouteExists(const std::string &storageClassName,
-    const uint8_t copyNb) const;
+    const uint16_t copyNb) const;
 
   /**
    * Returns true if the specified tape pool is in one of the current archive
diff --git a/libs/middletier/MockMiddleTierAdmin.cpp b/libs/middletier/MockMiddleTierAdmin.cpp
index 39d8c1c7a16b9f7e32dd70695cc2699573a8ea9f..eec5cbbcfc5cee013f396fbc133be8ed56c1bf9e 100644
--- a/libs/middletier/MockMiddleTierAdmin.cpp
+++ b/libs/middletier/MockMiddleTierAdmin.cpp
@@ -77,7 +77,7 @@ std::list<cta::AdminHost> cta::MockMiddleTierAdmin::getAdminHosts(
 //------------------------------------------------------------------------------
 void cta::MockMiddleTierAdmin::createStorageClass(
   const SecurityIdentity &requester, const std::string &name,
-  const uint8_t nbCopies, const std::string &comment) {
+  const uint16_t nbCopies, const std::string &comment) {
   m_db.storageClasses.createStorageClass(name, nbCopies, requester.user,
     comment);
 }
@@ -159,7 +159,7 @@ std::list<cta::TapePool> cta::MockMiddleTierAdmin::getTapePools(
 void cta::MockMiddleTierAdmin::createArchiveRoute(
   const SecurityIdentity &requester,
   const std::string &storageClassName,
-  const uint8_t copyNb,
+  const uint16_t copyNb,
   const std::string &tapePoolName,
   const std::string &comment) {
   return m_db.archiveRoutes.createArchiveRoute(
@@ -176,7 +176,7 @@ void cta::MockMiddleTierAdmin::createArchiveRoute(
 void cta::MockMiddleTierAdmin::deleteArchiveRoute(
   const SecurityIdentity &requester,
   const std::string &storageClassName,
-  const uint8_t copyNb) {
+  const uint16_t copyNb) {
   return m_db.archiveRoutes.deleteArchiveRoute(storageClassName, copyNb);
 }
 
diff --git a/libs/middletier/MockMiddleTierAdmin.hpp b/libs/middletier/MockMiddleTierAdmin.hpp
index aaad2c57e97ff5205211a91c1025405ca1b9aced..25357dcd7367bbac5ca3736540ee17f2c242b60e 100644
--- a/libs/middletier/MockMiddleTierAdmin.hpp
+++ b/libs/middletier/MockMiddleTierAdmin.hpp
@@ -100,7 +100,7 @@ public:
   void createStorageClass(
     const SecurityIdentity &requester,
     const std::string &name,
-    const uint8_t nbCopies,
+    const uint16_t nbCopies,
     const std::string &comment);
 
   /**
@@ -177,7 +177,7 @@ public:
   void createArchiveRoute(
     const SecurityIdentity &requester,
     const std::string &storageClassName,
-    const uint8_t copyNb,
+    const uint16_t copyNb,
     const std::string &tapePoolName,
     const std::string &comment);
 
@@ -193,7 +193,7 @@ public:
   void deleteArchiveRoute(
     const SecurityIdentity &requester,
     const std::string &storageClassName,
-    const uint8_t copyNb);
+    const uint16_t copyNb);
 
   /**
    * Gets the current list of archive routes.
diff --git a/libs/middletier/MockMiddleTierAdminTest.cpp b/libs/middletier/MockMiddleTierAdminTest.cpp
index dca72fc7d8f529e72df89d4c0c41aea2ed58bc5c..ff60b4547728dd55fec7d110e80fbc2be94743f1 100644
--- a/libs/middletier/MockMiddleTierAdminTest.cpp
+++ b/libs/middletier/MockMiddleTierAdminTest.cpp
@@ -29,7 +29,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, createStorageClass_new) {
   }
 
   const std::string name = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, name, nbCopies,
     comment));
@@ -61,7 +61,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest,
   }
 
   const std::string name = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, name, nbCopies, comment));
 
@@ -128,7 +128,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, deleteStorageClass_existing) {
   }
 
   const std::string name = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, name, nbCopies, comment));
 
@@ -167,7 +167,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest,
   }
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName, nbCopies,
     comment));
@@ -226,7 +226,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, deleteStorageClass_in_use_by_route) {
   }
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName, nbCopies,
     comment));
@@ -258,7 +258,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, deleteStorageClass_in_use_by_route) {
     ASSERT_EQ(tapePoolName, tapePool.getName());
   }
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, comment));
 
@@ -345,7 +345,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, deleteTapePool_in_use) {
   const std::string storageClassName = "TestStorageClass";
   const std::string comment = "Comment";
   {
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
       nbCopies, comment));
   }
@@ -356,7 +356,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, deleteTapePool_in_use) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, comment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, comment));
 
@@ -403,7 +403,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, createArchiveRoute_new) {
   const std::string storageClassName = "TestStorageClass";
   const std::string comment = "Comment";
   {
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
       nbCopies, comment));
   }
@@ -414,7 +414,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, createArchiveRoute_new) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, comment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, comment));
 
@@ -448,7 +448,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest,
   const std::string storageClassName = "TestStorageClass";
   const std::string comment = "Comment";
   {
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
       nbCopies, comment));
   }
@@ -459,7 +459,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest,
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, comment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, comment));
 
@@ -495,7 +495,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, deleteArchiveRoute_existing) {
   const std::string storageClassName = "TestStorageClass";
   const std::string comment = "Comment";
   {
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
       nbCopies, comment));
   }
@@ -506,7 +506,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, deleteArchiveRoute_existing) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, comment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, comment));
 
@@ -548,7 +548,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, deleteArchiveRoute_non_existing) {
   const std::string storageClassName = "TestStorageClass";
   const std::string comment = "Comment";
   {
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
       nbCopies, comment));
   }
@@ -559,7 +559,7 @@ TEST_F(cta_client_MockMiddleTierAdminTest, deleteArchiveRoute_non_existing) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, comment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_THROW(adminApi.deleteArchiveRoute(requester, tapePoolName, copyNb),
     std::exception);
 }
diff --git a/libs/middletier/MockMiddleTierUser.cpp b/libs/middletier/MockMiddleTierUser.cpp
index ec8f4669327d69255189389f3a11ed85f11b6268..5358a8b489a1168c8fa9b91effa0b02f1d5c6c96 100644
--- a/libs/middletier/MockMiddleTierUser.cpp
+++ b/libs/middletier/MockMiddleTierUser.cpp
@@ -287,7 +287,7 @@ void cta::MockMiddleTierUser::archiveToDirectory(
     const std::string &dstFileName = *dstItor;
     const std::string dstPath = dstDir + dstFileName;
 
-    for(uint8_t copyNb = 1; copyNb <= storageClass.getNbCopies(); copyNb++) {
+    for(uint16_t copyNb = 1; copyNb <= storageClass.getNbCopies(); copyNb++) {
       const ArchiveRoute &route = m_db.archiveRoutes.getArchiveRoute(
         inheritedStorageClassName, copyNb);
       m_db.archivalJobs.createArchivalJob(requester, route.getTapePoolName(),
@@ -323,7 +323,7 @@ void cta::MockMiddleTierUser::checkDirNodeDoesNotContainFiles(
 //------------------------------------------------------------------------------
 void cta::MockMiddleTierUser::checkStorageClassIsFullyRouted(
   const StorageClass &storageClass) const {
-  for(uint8_t copyNb = 1; copyNb <= storageClass.getNbCopies(); copyNb++) {
+  for(uint16_t copyNb = 1; copyNb <= storageClass.getNbCopies(); copyNb++) {
     m_db.archiveRoutes.checkArchiveRouteExists(storageClass.getName(),
       copyNb);
   }
@@ -374,7 +374,7 @@ void cta::MockMiddleTierUser::archiveToFile(
   checkStorageClassIsFullyRouted(storageClass);
 
   const std::string &srcUrl = srcUrls.front();
-  for(uint8_t copyNb = 1; copyNb <= storageClass.getNbCopies(); copyNb++) {
+  for(uint16_t copyNb = 1; copyNb <= storageClass.getNbCopies(); copyNb++) {
     const ArchiveRoute &route = m_db.archiveRoutes.getArchiveRoute(
       inheritedStorageClassName, copyNb);
     m_db.archivalJobs.createArchivalJob(requester, route.getTapePoolName(),
diff --git a/libs/middletier/MockMiddleTierUserTest.cpp b/libs/middletier/MockMiddleTierUserTest.cpp
index 06bf25b2d7b31a36860348fb53976aaa4eef5d70..2868279109f1634ffda8ba03e008e500f6aa519e 100644
--- a/libs/middletier/MockMiddleTierUserTest.cpp
+++ b/libs/middletier/MockMiddleTierUserTest.cpp
@@ -169,7 +169,7 @@ TEST_F(cta_client_MockMiddleTierUserTest,
   {
     MockMiddleTierAdmin adminApi(db);
     const std::string name = "TestStorageClass";
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     const std::string comment = "Comment";
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, name, nbCopies, comment));
   }
@@ -401,7 +401,7 @@ TEST_F(cta_client_MockMiddleTierUserTest, setDirectoryStorageClass_top_level) {
   }
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
     const std::string comment = "Comment";
   {
     MockMiddleTierAdmin adminApi(db);
@@ -449,7 +449,7 @@ TEST_F(cta_client_MockMiddleTierUserTest,
   }
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   MockMiddleTierAdmin adminApi(db);
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
@@ -487,7 +487,7 @@ TEST_F(cta_client_MockMiddleTierUserTest, archive_to_new_file) {
   const SecurityIdentity requester;
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 1;
+  const uint16_t nbCopies = 1;
   const std::string storageClassComment = "Storage-class comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
     nbCopies, storageClassComment));
@@ -504,7 +504,7 @@ TEST_F(cta_client_MockMiddleTierUserTest, archive_to_new_file) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, tapePoolComment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   const std::string archiveRouteComment = "Archive-route comment";
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, archiveRouteComment));
@@ -616,7 +616,7 @@ TEST_F(cta_client_MockMiddleTierUserTest,
   const SecurityIdentity requester;
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 0;
+  const uint16_t nbCopies = 0;
   const std::string storageClassComment = "Storage-class comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
     nbCopies, storageClassComment));
@@ -641,7 +641,7 @@ TEST_F(cta_client_MockMiddleTierUserTest, archive_to_new_file_with_no_route) {
   const SecurityIdentity requester;
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 1;
+  const uint16_t nbCopies = 1;
   const std::string storageClassComment = "Storage-class comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
     nbCopies, storageClassComment));
@@ -674,7 +674,7 @@ TEST_F(cta_client_MockMiddleTierUserTest,
   const SecurityIdentity requester;
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string storageClassComment = "Storage-class comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
     nbCopies, storageClassComment));
@@ -691,7 +691,7 @@ TEST_F(cta_client_MockMiddleTierUserTest,
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, tapePoolComment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   const std::string archiveRouteComment = "Archive-route comment";
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, archiveRouteComment));
@@ -711,7 +711,7 @@ TEST_F(cta_client_MockMiddleTierUserTest, archive_to_directory) {
   const SecurityIdentity requester;
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 1;
+  const uint16_t nbCopies = 1;
   const std::string storageClassComment = "Storage-class comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
     nbCopies, storageClassComment));
@@ -728,7 +728,7 @@ TEST_F(cta_client_MockMiddleTierUserTest, archive_to_directory) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, tapePoolComment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   const std::string archiveRouteComment = "Archive-route comment";
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, archiveRouteComment));
@@ -855,7 +855,7 @@ TEST_F(cta_client_MockMiddleTierUserTest,
   const SecurityIdentity requester;
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 0;
+  const uint16_t nbCopies = 0;
   const std::string storageClassComment = "Storage-class comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
     nbCopies, storageClassComment));
@@ -883,7 +883,7 @@ TEST_F(cta_client_MockMiddleTierUserTest, archive_to_directory_with_no_route) {
   const SecurityIdentity requester;
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 1;
+  const uint16_t nbCopies = 1;
   const std::string storageClassComment = "Storage-class comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
     nbCopies, storageClassComment));
@@ -919,7 +919,7 @@ TEST_F(cta_client_MockMiddleTierUserTest,
   const SecurityIdentity requester;
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string storageClassComment = "Storage-class comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
     nbCopies, storageClassComment));
@@ -936,7 +936,7 @@ TEST_F(cta_client_MockMiddleTierUserTest,
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, tapePoolComment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   const std::string archiveRouteComment = "Archive-route comment";
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, archiveRouteComment));
diff --git a/libs/middletier/SqliteDatabase.cpp b/libs/middletier/SqliteDatabase.cpp
index 3f6f19096f2674fedd26b64cb408a3e67f26b64f..8efaae6ea752d5dc24e7a1a369c2f9b4fd22762f 100644
--- a/libs/middletier/SqliteDatabase.cpp
+++ b/libs/middletier/SqliteDatabase.cpp
@@ -630,7 +630,7 @@ void cta::SqliteDatabase::insertTapePool(const SecurityIdentity &requester, cons
 //------------------------------------------------------------------------------
 // insertStorageClass
 //------------------------------------------------------------------------------
-void cta::SqliteDatabase::insertStorageClass(const SecurityIdentity &requester, const std::string &name, const uint8_t nbCopies, const std::string &comment) {
+void cta::SqliteDatabase::insertStorageClass(const SecurityIdentity &requester, const std::string &name, const uint16_t nbCopies, const std::string &comment) {
   char *zErrMsg = 0;
   std::ostringstream query;
   query << "INSERT INTO STORAGECLASS VALUES('" << name << "'," << (int)nbCopies << "," << requester.user.getUid() << "," << requester.user.getGid() << "," << (int)time(NULL) << ",'" << comment << "');";
@@ -646,7 +646,7 @@ void cta::SqliteDatabase::insertStorageClass(const SecurityIdentity &requester,
 //------------------------------------------------------------------------------
 // insertArchiveRoute
 //------------------------------------------------------------------------------
-void cta::SqliteDatabase::insertArchiveRoute(const SecurityIdentity &requester, const std::string &storageClassName, const uint8_t copyNb, const std::string &tapePoolName, const std::string &comment) {
+void cta::SqliteDatabase::insertArchiveRoute(const SecurityIdentity &requester, const std::string &storageClassName, const uint16_t copyNb, const std::string &tapePoolName, const std::string &comment) {
   char *zErrMsg = 0;
   std::ostringstream query;
   query << "INSERT INTO ARCHIVEROUTE VALUES('" << storageClassName << "'," << (int)copyNb << ",'" << tapePoolName << "'," << requester.user.getUid() << "," << requester.user.getGid() << "," << (int)time(NULL) << ",'" << comment << "');";
@@ -696,7 +696,7 @@ void cta::SqliteDatabase::deleteStorageClass(const SecurityIdentity &requester,
 //------------------------------------------------------------------------------
 // deleteArchiveRoute
 //------------------------------------------------------------------------------
-void cta::SqliteDatabase::deleteArchiveRoute(const SecurityIdentity &requester, const std::string &storageClassName, const uint8_t copyNb) {
+void cta::SqliteDatabase::deleteArchiveRoute(const SecurityIdentity &requester, const std::string &storageClassName, const uint16_t copyNb) {
   checkArchiveRouteExists(storageClassName, copyNb);
   char *zErrMsg = 0;
   std::ostringstream query;
@@ -776,7 +776,7 @@ void cta::SqliteDatabase::checkStorageClassExists(const std::string &name){
 //------------------------------------------------------------------------------
 // checkArchiveRouteExists
 //------------------------------------------------------------------------------
-void cta::SqliteDatabase::checkArchiveRouteExists(const std::string &name, const uint8_t copyNb){
+void cta::SqliteDatabase::checkArchiveRouteExists(const std::string &name, const uint16_t copyNb){
   char *zErrMsg = 0;
   std::ostringstream query;
   query << "SELECT * FROM ARCHIVEROUTE WHERE STORAGECLASS_NAME='" << name << "' AND COPYNB=" << (int)copyNb << ";";
diff --git a/libs/middletier/SqliteDatabase.hpp b/libs/middletier/SqliteDatabase.hpp
index ba71a79078ca1a168b9c890b21a8126dbf4c66b7..5b07355bd71dcf08be86bab8568b31d618c49563 100644
--- a/libs/middletier/SqliteDatabase.hpp
+++ b/libs/middletier/SqliteDatabase.hpp
@@ -32,9 +32,9 @@ public:
   
   void insertTapePool(const SecurityIdentity &requester, const std::string &name, const uint16_t nbDrives, const uint32_t nbPartialTapes, const std::string &comment);
   
-  void insertStorageClass(const SecurityIdentity &requester, const std::string &name, const uint8_t nbCopies, const std::string &comment);
+  void insertStorageClass(const SecurityIdentity &requester, const std::string &name, const uint16_t nbCopies, const std::string &comment);
   
-  void insertArchiveRoute(const SecurityIdentity &requester, const std::string &storageClassName, const uint8_t copyNb, const std::string &tapePoolName, const std::string &comment);
+  void insertArchiveRoute(const SecurityIdentity &requester, const std::string &storageClassName, const uint16_t copyNb, const std::string &tapePoolName, const std::string &comment);
   
   void insertFile(const SecurityIdentity &requester, const std::string &pathname, const uint16_t mode);
   
@@ -44,7 +44,7 @@ public:
   
   void deleteStorageClass(const SecurityIdentity &requester, const std::string &name);
 
-  void deleteArchiveRoute(const SecurityIdentity &requester, const std::string &storageClassName, const uint8_t copyNb);
+  void deleteArchiveRoute(const SecurityIdentity &requester, const std::string &storageClassName, const uint16_t copyNb);
   
   void deleteFile(const SecurityIdentity &requester, const std::string &pathname);
   
@@ -97,7 +97,7 @@ private:
   
   void checkStorageClassExists(const std::string &name);
   
-  void checkArchiveRouteExists(const std::string &name, const uint8_t copyNb);
+  void checkArchiveRouteExists(const std::string &name, const uint16_t copyNb);
   
   void checkFileExists(const std::string &path, const std::string &name);
   
diff --git a/libs/middletier/SqliteMiddleTierAdmin.cpp b/libs/middletier/SqliteMiddleTierAdmin.cpp
index 0547c65ce1b46663aad06e456778397264250543..c4ff08e286efa2714c946d57de51787a336f80a3 100644
--- a/libs/middletier/SqliteMiddleTierAdmin.cpp
+++ b/libs/middletier/SqliteMiddleTierAdmin.cpp
@@ -77,7 +77,7 @@ std::list<cta::AdminHost> cta::SqliteMiddleTierAdmin::getAdminHosts(
 //------------------------------------------------------------------------------
 void cta::SqliteMiddleTierAdmin::createStorageClass(
   const SecurityIdentity &requester, const std::string &name,
-  const uint8_t nbCopies, const std::string &comment) {
+  const uint16_t nbCopies, const std::string &comment) {
   m_sqlite_db.insertStorageClass(requester, name, nbCopies, comment);
 }
 
@@ -131,7 +131,7 @@ std::list<cta::TapePool> cta::SqliteMiddleTierAdmin::getTapePools(
 void cta::SqliteMiddleTierAdmin::createArchiveRoute(
   const SecurityIdentity &requester,
   const std::string &storageClassName,
-  const uint8_t copyNb,
+  const uint16_t copyNb,
   const std::string &tapePoolName,
   const std::string &comment) {
   return m_sqlite_db.insertArchiveRoute(requester, storageClassName, copyNb, tapePoolName, comment);
@@ -143,7 +143,7 @@ void cta::SqliteMiddleTierAdmin::createArchiveRoute(
 void cta::SqliteMiddleTierAdmin::deleteArchiveRoute(
   const SecurityIdentity &requester,
   const std::string &storageClassName,
-  const uint8_t copyNb) {
+  const uint16_t copyNb) {
   return m_sqlite_db.deleteArchiveRoute(requester, storageClassName, copyNb);
 }
 
diff --git a/libs/middletier/SqliteMiddleTierAdmin.hpp b/libs/middletier/SqliteMiddleTierAdmin.hpp
index 8dfb930a4dc5854b11aba0aadba1fb1a7bd77dab..c58078a6815d1532dfdecae9da0683ec5cd4451e 100644
--- a/libs/middletier/SqliteMiddleTierAdmin.hpp
+++ b/libs/middletier/SqliteMiddleTierAdmin.hpp
@@ -101,7 +101,7 @@ public:
   void createStorageClass(
     const SecurityIdentity &requester,
     const std::string &name,
-    const uint8_t nbCopies,
+    const uint16_t nbCopies,
     const std::string &comment);
 
   /**
@@ -178,7 +178,7 @@ public:
   void createArchiveRoute(
     const SecurityIdentity &requester,
     const std::string &storageClassName,
-    const uint8_t copyNb,
+    const uint16_t copyNb,
     const std::string &tapePoolName,
     const std::string &comment);
 
@@ -194,7 +194,7 @@ public:
   void deleteArchiveRoute(
     const SecurityIdentity &requester,
     const std::string &storageClassName,
-    const uint8_t copyNb);
+    const uint16_t copyNb);
 
   /**
    * Gets the current list of archive routes.
diff --git a/libs/middletier/SqliteMiddleTierAdminTest.cpp b/libs/middletier/SqliteMiddleTierAdminTest.cpp
index 14a00e6009be2fa9a7487c04f079da5152c93572..3d9b41b9cc828bd5d5cd90240aa1b3cc5391880c 100644
--- a/libs/middletier/SqliteMiddleTierAdminTest.cpp
+++ b/libs/middletier/SqliteMiddleTierAdminTest.cpp
@@ -32,7 +32,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, createStorageClass_new) {
   }
 
   const std::string name = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, name, nbCopies,
     comment));
@@ -65,7 +65,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest,
   }
 
   const std::string name = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, name, nbCopies, comment));
 
@@ -134,7 +134,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, deleteStorageClass_existing) {
   }
 
   const std::string name = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, name, nbCopies, comment));
 
@@ -174,7 +174,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest,
   }
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName, nbCopies,
     comment));
@@ -234,7 +234,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, deleteStorageClass_in_use_by_route)
   }
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName, nbCopies,
     comment));
@@ -266,7 +266,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, deleteStorageClass_in_use_by_route)
     ASSERT_EQ(tapePoolName, tapePool.getName());
   }
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, comment));
 
@@ -355,7 +355,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, deleteTapePool_in_use) {
   const std::string storageClassName = "TestStorageClass";
   const std::string comment = "Comment";
   {
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
       nbCopies, comment));
   }
@@ -366,7 +366,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, deleteTapePool_in_use) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, comment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, comment));
 
@@ -414,7 +414,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, createArchiveRoute_new) {
   const std::string storageClassName = "TestStorageClass";
   const std::string comment = "Comment";
   {
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
       nbCopies, comment));
   }
@@ -425,7 +425,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, createArchiveRoute_new) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, comment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, comment));
 
@@ -460,7 +460,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest,
   const std::string storageClassName = "TestStorageClass";
   const std::string comment = "Comment";
   {
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
       nbCopies, comment));
   }
@@ -471,7 +471,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest,
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, comment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, comment));
 
@@ -508,7 +508,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, deleteArchiveRoute_existing) {
   const std::string storageClassName = "TestStorageClass";
   const std::string comment = "Comment";
   {
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
       nbCopies, comment));
   }
@@ -519,7 +519,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, deleteArchiveRoute_existing) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, comment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, comment));
 
@@ -562,7 +562,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, deleteArchiveRoute_non_existing) {
   const std::string storageClassName = "TestStorageClass";
   const std::string comment = "Comment";
   {
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
       nbCopies, comment));
   }
@@ -573,7 +573,7 @@ TEST_F(cta_client_SqliteMiddleTierAdminTest, deleteArchiveRoute_non_existing) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, comment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   ASSERT_THROW(adminApi.deleteArchiveRoute(requester, tapePoolName, copyNb),
     std::exception);
 }
diff --git a/libs/middletier/SqliteMiddleTierUserTest.cpp b/libs/middletier/SqliteMiddleTierUserTest.cpp
index 1cdb14e7ab13a18352b775263f3f8fe5bb57f8ed..0ac864e68a164b34f6aa9d308379da83505fcb30 100644
--- a/libs/middletier/SqliteMiddleTierUserTest.cpp
+++ b/libs/middletier/SqliteMiddleTierUserTest.cpp
@@ -169,7 +169,7 @@ TEST_F(cta_client_SqliteMiddleTierUserTest,
   {
     MockMiddleTierAdmin adminApi(db);
     const std::string name = "TestStorageClass";
-    const uint8_t nbCopies = 2;
+    const uint16_t nbCopies = 2;
     const std::string comment = "Comment";
     ASSERT_NO_THROW(adminApi.createStorageClass(requester, name, nbCopies, comment));
   }
@@ -401,7 +401,7 @@ TEST_F(cta_client_SqliteMiddleTierUserTest, setDirectoryStorageClass_top_level)
   }
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
     const std::string comment = "Comment";
   {
     MockMiddleTierAdmin adminApi(db);
@@ -449,7 +449,7 @@ TEST_F(cta_client_SqliteMiddleTierUserTest,
   }
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 2;
+  const uint16_t nbCopies = 2;
   const std::string comment = "Comment";
   MockMiddleTierAdmin adminApi(db);
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
@@ -487,7 +487,7 @@ TEST_F(cta_client_SqliteMiddleTierUserTest, archive_to_new_file) {
   const SecurityIdentity requester;
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 1;
+  const uint16_t nbCopies = 1;
   const std::string storageClassComment = "Storage-class omment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
     nbCopies, storageClassComment));
@@ -504,7 +504,7 @@ TEST_F(cta_client_SqliteMiddleTierUserTest, archive_to_new_file) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, tapePoolComment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   const std::string archiveRouteComment = "Archive-route comment";
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, archiveRouteComment));
@@ -553,7 +553,7 @@ TEST_F(cta_client_SqliteMiddleTierUserTest, archive_to_directory) {
   const SecurityIdentity requester;
 
   const std::string storageClassName = "TestStorageClass";
-  const uint8_t nbCopies = 1;
+  const uint16_t nbCopies = 1;
   const std::string storageClassComment = "Storage-class omment";
   ASSERT_NO_THROW(adminApi.createStorageClass(requester, storageClassName,
     nbCopies, storageClassComment));
@@ -570,7 +570,7 @@ TEST_F(cta_client_SqliteMiddleTierUserTest, archive_to_directory) {
   ASSERT_NO_THROW(adminApi.createTapePool(requester, tapePoolName, nbDrives,
     nbPartialTapes, tapePoolComment));
 
-  const uint8_t copyNb = 1;
+  const uint16_t copyNb = 1;
   const std::string archiveRouteComment = "Archive-route comment";
   ASSERT_NO_THROW(adminApi.createArchiveRoute(requester, storageClassName,
     copyNb, tapePoolName, archiveRouteComment));
diff --git a/libs/middletier/StorageClass.cpp b/libs/middletier/StorageClass.cpp
index 2120a64ae42156673067fadcc0a8fddfd6702774..312740901abfa9ace9627a9051669523c3d82d85 100644
--- a/libs/middletier/StorageClass.cpp
+++ b/libs/middletier/StorageClass.cpp
@@ -13,7 +13,7 @@ cta::StorageClass::StorageClass():
 //------------------------------------------------------------------------------
 cta::StorageClass::StorageClass(
   const std::string &name,
-  const uint8_t nbCopies,
+  const uint16_t nbCopies,
   const UserIdentity &creator,
   const time_t creationTime,
   const std::string &comment):
@@ -34,7 +34,7 @@ const std::string &cta::StorageClass::getName() const throw() {
 //------------------------------------------------------------------------------
 // getNbCopies
 //------------------------------------------------------------------------------
-uint8_t cta::StorageClass::getNbCopies() const throw() {
+uint16_t cta::StorageClass::getNbCopies() const throw() {
   return m_nbCopies;
 }
 
diff --git a/libs/middletier/StorageClass.hpp b/libs/middletier/StorageClass.hpp
index d624cc7448844374b019b3d92ec226d44fe05d4c..ad71370b9d3ca9949a59ad4c08811ee90dfbbc4a 100644
--- a/libs/middletier/StorageClass.hpp
+++ b/libs/middletier/StorageClass.hpp
@@ -29,7 +29,7 @@ public:
    */
   StorageClass(
     const std::string &name,
-    const uint8_t nbCopies,
+    const uint16_t nbCopies,
     const UserIdentity &creator,
     const time_t creationTime,
     const std::string &comment);
@@ -48,7 +48,7 @@ public:
    * @return The number of copies a file associated with this storage
    * class should have on tape.
    */
-  uint8_t getNbCopies() const throw();
+  uint16_t getNbCopies() const throw();
 
   /**
    * Returns the time when the storage class was created.
@@ -82,7 +82,7 @@ private:
    * The number of copies a file associated with this storage
    * class should have on tape.
    */
-  uint8_t m_nbCopies;
+  uint16_t m_nbCopies;
 
   /**
    * The time when the storage class was created.