diff --git a/catalogue/ArchiveFileRow.cpp b/catalogue/ArchiveFileRow.cpp
index d6bdeb287985a6a8650e7d74a6b82b796d3ac806..4f84bcf9bf1e617eafc07ec4cde0edadfa36ad77 100644
--- a/catalogue/ArchiveFileRow.cpp
+++ b/catalogue/ArchiveFileRow.cpp
@@ -38,8 +38,8 @@ bool ArchiveFileRow::operator==(const ArchiveFileRow &rhs) const {
     diskInstance == rhs.diskInstance &&
     diskFileId == rhs.diskFileId &&
     diskFilePath == rhs.diskFilePath &&
-    diskFileUser == rhs.diskFileUser &&
-    diskFileGroup == rhs.diskFileGroup &&
+    diskFileOwnerUid == rhs.diskFileOwnerUid &&
+    diskFileGid == rhs.diskFileGid &&
     size == rhs.size &&
     checksumType == rhs.checksumType &&
     checksumValue == rhs.checksumValue &&
@@ -56,8 +56,8 @@ std::ostream &operator<<(std::ostream &os, const ArchiveFileRow &obj) {
   "diskInstance=" << obj.diskInstance <<
   "diskFileId=" << obj.diskFileId <<
   "diskFilePath=" << obj.diskFilePath <<
-  "diskFileUser=" << obj.diskFileUser <<
-  "diskFileGroup=" << obj.diskFileGroup <<
+  "diskFileOwnerUid=" << obj.diskFileOwnerUid <<
+  "diskFileGid=" << obj.diskFileGid <<
   "size=" << obj.size <<
   "checksumType=" << obj.checksumType << "checksumValue=" << obj.checksumValue <<
   "storageClassName=" << obj.storageClassName <<
diff --git a/catalogue/ArchiveFileRow.hpp b/catalogue/ArchiveFileRow.hpp
index 3e3a92600f90af1ff37f0a51982bf6b3f389dd94..a76a4eee1b22203961996bcb773a1f42f607adb8 100644
--- a/catalogue/ArchiveFileRow.hpp
+++ b/catalogue/ArchiveFileRow.hpp
@@ -69,14 +69,14 @@ struct ArchiveFileRow {
   std::string diskFilePath;
 
   /**
-   * The user name of the source disk file within its host disk system.
+   * The user ID of the owner of the source disk file within its host disk system.
    */
-  std::string diskFileUser;
+  uint32_t diskFileOwnerUid;
 
   /**
-   * The group name of the source disk file within its host disk system.
+   * The group ID of the source disk file within its host disk system.
    */
-  std::string diskFileGroup;
+  uint32_t diskFileGid;
 
   /**
    * The uncompressed size of the tape file in bytes.
diff --git a/catalogue/Catalogue.hpp b/catalogue/Catalogue.hpp
index bae3e06e34bf1bfc35120710f1e96cd654713523..667fdd84b8abea96d36c6fa6f5cf26bb3f36f4ed 100644
--- a/catalogue/Catalogue.hpp
+++ b/catalogue/Catalogue.hpp
@@ -52,7 +52,7 @@
 #include "common/dataStructures/TapeCopyToPoolMap.hpp"
 #include "common/dataStructures/TapeFile.hpp"
 #include "common/dataStructures/UpdateFileInfoRequest.hpp"
-#include "common/dataStructures/UserIdentity.hpp"
+#include "common/dataStructures/RequesterIdentity.hpp"
 #include "common/dataStructures/VidToTapeMap.hpp"
 #include "common/dataStructures/WriteTestResult.hpp"
 #include "common/exception/UserError.hpp"
@@ -114,7 +114,7 @@ public:
   virtual uint64_t checkAndGetNextArchiveFileId(
     const std::string &diskInstanceName,
     const std::string &storageClassName,
-    const common::dataStructures::UserIdentity &user) = 0;
+    const common::dataStructures::RequesterIdentity &user) = 0;
 
   /**
    * Returns the information required to queue an archive request.
@@ -133,7 +133,7 @@ public:
   virtual common::dataStructures::ArchiveFileQueueCriteria getArchiveFileQueueCriteria(
     const std::string &diskInstanceName,
     const std::string &storageClassName,
-    const common::dataStructures::UserIdentity &user) = 0;
+    const common::dataStructures::RequesterIdentity &user) = 0;
 
   /**
    * Returns the list of tapes that can be written to by a tape drive in the
@@ -184,7 +184,7 @@ public:
   virtual common::dataStructures::RetrieveFileQueueCriteria prepareToRetrieveFile(
     const std::string &diskInstanceName,
     const uint64_t archiveFileId,
-    const common::dataStructures::UserIdentity &user,
+    const common::dataStructures::RequesterIdentity &user,
     const optional<std::string> & activity,
     log::LogContext &lc) = 0;
 
diff --git a/catalogue/CatalogueRetryWrapper.hpp b/catalogue/CatalogueRetryWrapper.hpp
index b5af2b2c8ef568d92b50d931cf85dd643d6adbd4..32d80406b31d6b8d26ccf0f39efcb86a6d03af9e 100644
--- a/catalogue/CatalogueRetryWrapper.hpp
+++ b/catalogue/CatalogueRetryWrapper.hpp
@@ -68,12 +68,12 @@ public:
     return retryOnLostConnection(m_log, [&]{return m_catalogue->tapeLabelled(vid, drive);}, m_maxTriesToConnect);
   }
 
-  uint64_t checkAndGetNextArchiveFileId(const std::string &diskInstanceName, const std::string &storageClassName, const common::dataStructures::UserIdentity &user) override {
+  uint64_t checkAndGetNextArchiveFileId(const std::string &diskInstanceName, const std::string &storageClassName, const common::dataStructures::RequesterIdentity &user) override {
     return retryOnLostConnection(m_log, [&]{return m_catalogue->checkAndGetNextArchiveFileId(diskInstanceName, storageClassName, user);}, m_maxTriesToConnect);
   }
 
   common::dataStructures::ArchiveFileQueueCriteria getArchiveFileQueueCriteria(const std::string &diskInstanceName,
-    const std::string &storageClassName, const common::dataStructures::UserIdentity &user) override {
+    const std::string &storageClassName, const common::dataStructures::RequesterIdentity &user) override {
     return retryOnLostConnection(m_log, [&]{return m_catalogue->getArchiveFileQueueCriteria(diskInstanceName, storageClassName, user);}, m_maxTriesToConnect);
   }
 
@@ -89,7 +89,7 @@ public:
     return retryOnLostConnection(m_log, [&]{return m_catalogue->tapeMountedForArchive(vid, drive);}, m_maxTriesToConnect);
   }
 
-  common::dataStructures::RetrieveFileQueueCriteria prepareToRetrieveFile(const std::string& diskInstanceName, const uint64_t archiveFileId, const common::dataStructures::UserIdentity& user, const optional<std::string>& activity, log::LogContext& lc) override {
+  common::dataStructures::RetrieveFileQueueCriteria prepareToRetrieveFile(const std::string& diskInstanceName, const uint64_t archiveFileId, const common::dataStructures::RequesterIdentity& user, const optional<std::string>& activity, log::LogContext& lc) override {
     return retryOnLostConnection(m_log, [&]{return m_catalogue->prepareToRetrieveFile(diskInstanceName, archiveFileId, user, activity, lc);}, m_maxTriesToConnect);
   }
 
diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp
index de27102d4e1c269a888c5b4d83b5ff1adf308b06..96a3d87b7f626940fb26584d734a0f204297ecd7 100644
--- a/catalogue/CatalogueTest.cpp
+++ b/catalogue/CatalogueTest.cpp
@@ -57,6 +57,13 @@
 
 namespace unitTests {
 
+const uint32_t PUBLIC_DISK_USER = 9751;
+const uint32_t PUBLIC_DISK_GROUP = 9752;
+const uint32_t DISK_FILE_OWNER_UID = 9753;
+const uint32_t DISK_FILE_GID = 9754;
+const uint32_t NON_EXISTENT_DISK_FILE_OWNER_UID = 9755;
+const uint32_t NON_EXISTENT_DISK_FILE_GID = 9756;
+
 //------------------------------------------------------------------------------
 // constructor
 //------------------------------------------------------------------------------
@@ -3457,8 +3464,8 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_1_tape_with_write_log_1_tape_with
     file1Written.diskInstance         = storageClass.diskInstance;
     file1Written.diskFileId           = "5678";
     file1Written.diskFilePath         = "/public_dir/public_file";
-    file1Written.diskFileUser         = "public_disk_user";
-    file1Written.diskFileGroup        = "public_disk_group";
+    file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+    file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
     file1Written.size                 = fileSize;
     file1Written.checksumType         = "checksum_type";
     file1Written.checksumValue        = "checksum_value";
@@ -3661,8 +3668,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteNonEmptyTape) {
     file1Written.diskInstance         = storageClass.diskInstance;
     file1Written.diskFileId           = "5678";
     file1Written.diskFilePath         = "/public_dir/public_file";
-    file1Written.diskFileUser         = "public_disk_user";
-    file1Written.diskFileGroup        = "public_disk_group";
+    file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+    file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
     file1Written.size                 = fileSize;
     file1Written.checksumType         = "checksum_type";
     file1Written.checksumValue        = "checksum_value";
@@ -6240,11 +6247,11 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_no_archive_rout
   storageClass.comment = "Create storage class";
   m_catalogue->createStorageClass(m_admin, storageClass);
 
-  common::dataStructures::UserIdentity userIdentity;
-  userIdentity.name = requesterName;
-  userIdentity.group = "group";
+  common::dataStructures::RequesterIdentity requesterIdentity;
+  requesterIdentity.name = requesterName;
+  requesterIdentity.group = "group";
 
-  ASSERT_THROW(m_catalogue->checkAndGetNextArchiveFileId(storageClass.diskInstance, storageClass.name, userIdentity),
+  ASSERT_THROW(m_catalogue->checkAndGetNextArchiveFileId(storageClass.diskInstance, storageClass.name, requesterIdentity),
     exception::UserError);
 }
 
@@ -6256,7 +6263,6 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_no_mount_rules)
   ASSERT_TRUE(m_catalogue->getArchiveRoutes().empty());
 
   const std::string diskInstanceName = "disk_instance_name";
-  common::dataStructures::UserIdentity userIdentity;
 
   common::dataStructures::StorageClass storageClass;
   storageClass.diskInstance = diskInstanceName;
@@ -6295,10 +6301,11 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_no_mount_rules)
   ASSERT_EQ(creationLog, lastModificationLog);
 
   const std::string requesterName = "requester_name";
-  userIdentity.name = requesterName;
-  userIdentity.group = "group";
+  common::dataStructures::RequesterIdentity requesterIdentity;
+  requesterIdentity.name = requesterName;
+  requesterIdentity.group = "group";
 
-  ASSERT_THROW(m_catalogue->checkAndGetNextArchiveFileId(storageClass.diskInstance, storageClass.name, userIdentity),
+  ASSERT_THROW(m_catalogue->checkAndGetNextArchiveFileId(storageClass.diskInstance, storageClass.name, requesterIdentity),
     exception::UserError);
 }
 
@@ -6380,14 +6387,14 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_requester_mount
   const common::dataStructures::EntryLog lastModificationLog = route.lastModificationLog;
   ASSERT_EQ(creationLog, lastModificationLog);
 
-  common::dataStructures::UserIdentity userIdentity;
-  userIdentity.name = requesterName;
-  userIdentity.group = "group";
+  common::dataStructures::RequesterIdentity requesterIdentity;
+  requesterIdentity.name = requesterName;
+  requesterIdentity.group = "group";
 
   std::set<uint64_t> archiveFileIds;
   for(uint64_t i = 0; i<10; i++) {
     const uint64_t archiveFileId =
-      m_catalogue->checkAndGetNextArchiveFileId(storageClass.diskInstance, storageClass.name, userIdentity);
+      m_catalogue->checkAndGetNextArchiveFileId(storageClass.diskInstance, storageClass.name, requesterIdentity);
 
     const bool archiveFileIdIsNew = archiveFileIds.end() == archiveFileIds.find(archiveFileId);
     ASSERT_TRUE(archiveFileIdIsNew);
@@ -6471,14 +6478,14 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_requester_group
   const common::dataStructures::EntryLog lastModificationLog = route.lastModificationLog;
   ASSERT_EQ(creationLog, lastModificationLog);
 
-  common::dataStructures::UserIdentity userIdentity;
-  userIdentity.name = "username";
-  userIdentity.group = requesterGroupName;
+  common::dataStructures::RequesterIdentity requesterIdentity;
+  requesterIdentity.name = "username";
+  requesterIdentity.group = requesterGroupName;
 
   std::set<uint64_t> archiveFileIds;
   for(uint64_t i = 0; i<10; i++) {
     const uint64_t archiveFileId =
-      m_catalogue->checkAndGetNextArchiveFileId(storageClass.diskInstance, storageClass.name, userIdentity);
+      m_catalogue->checkAndGetNextArchiveFileId(storageClass.diskInstance, storageClass.name, requesterIdentity);
 
     const bool archiveFileIdIsNew = archiveFileIds.end() == archiveFileIds.find(archiveFileId);
     ASSERT_TRUE(archiveFileIdIsNew);
@@ -6581,14 +6588,14 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_requester_mount
   const common::dataStructures::EntryLog lastModificationLog = route.lastModificationLog;
   ASSERT_EQ(creationLog, lastModificationLog);
 
-  common::dataStructures::UserIdentity userIdentity;
-  userIdentity.name = requesterName;
-  userIdentity.group = "group";
+  common::dataStructures::RequesterIdentity requesterIdentity;
+  requesterIdentity.name = requesterName;
+  requesterIdentity.group = "group";
 
   std::set<uint64_t> archiveFileIds;
   for(uint64_t i = 0; i<10; i++) {
     const uint64_t archiveFileId =
-      m_catalogue->checkAndGetNextArchiveFileId(storageClass.diskInstance, storageClass.name, userIdentity);
+      m_catalogue->checkAndGetNextArchiveFileId(storageClass.diskInstance, storageClass.name, requesterIdentity);
 
     const bool archiveFileIdIsNew = archiveFileIds.end() == archiveFileIds.find(archiveFileId);
     ASSERT_TRUE(archiveFileIdIsNew);
@@ -6645,11 +6652,11 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_no_archive_route
   storageClass.comment = "Create storage class";
   m_catalogue->createStorageClass(m_admin, storageClass);
 
-  common::dataStructures::UserIdentity userIdentity;
-  userIdentity.name = requesterName;
-  userIdentity.group = "group";
+  common::dataStructures::RequesterIdentity requesterIdentity;
+  requesterIdentity.name = requesterName;
+  requesterIdentity.group = "group";
 
-  ASSERT_THROW(m_catalogue->getArchiveFileQueueCriteria(storageClass.diskInstance, storageClass.name, userIdentity),
+  ASSERT_THROW(m_catalogue->getArchiveFileQueueCriteria(storageClass.diskInstance, storageClass.name, requesterIdentity),
     exception::UserError);
 }
 
@@ -6731,10 +6738,10 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_requester_mount_
   const common::dataStructures::EntryLog lastModificationLog = route.lastModificationLog;
   ASSERT_EQ(creationLog, lastModificationLog);
 
-  common::dataStructures::UserIdentity userIdentity;
-  userIdentity.name = requesterName;
-  userIdentity.group = "group";
-  m_catalogue->getArchiveFileQueueCriteria(storageClass.diskInstance, storageClass.name, userIdentity);
+  common::dataStructures::RequesterIdentity requesterIdentity;
+  requesterIdentity.name = requesterName;
+  requesterIdentity.group = "group";
+  m_catalogue->getArchiveFileQueueCriteria(storageClass.diskInstance, storageClass.name, requesterIdentity);
 }
 
 TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_requester_group_mount_rule) {
@@ -6814,10 +6821,10 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_requester_group_
   const common::dataStructures::EntryLog lastModificationLog = route.lastModificationLog;
   ASSERT_EQ(creationLog, lastModificationLog);
 
-  common::dataStructures::UserIdentity userIdentity;
-  userIdentity.name = "username";
-  userIdentity.group = requesterGroupName;
-  m_catalogue->getArchiveFileQueueCriteria(storageClass.diskInstance, storageClass.name, userIdentity);
+  common::dataStructures::RequesterIdentity requesterIdentity;
+  requesterIdentity.name = "username";
+  requesterIdentity.group = requesterGroupName;
+  m_catalogue->getArchiveFileQueueCriteria(storageClass.diskInstance, storageClass.name, requesterIdentity);
 }
 
 TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_requester_mount_rule_overide) {
@@ -6916,10 +6923,10 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_requester_mount_
   const common::dataStructures::EntryLog lastModificationLog = route.lastModificationLog;
   ASSERT_EQ(creationLog, lastModificationLog);
 
-  common::dataStructures::UserIdentity userIdentity;
-  userIdentity.name = requesterName;
-  userIdentity.group = "group";
-  m_catalogue->getArchiveFileQueueCriteria(storageClass.diskInstance, storageClass.name, userIdentity);
+  common::dataStructures::RequesterIdentity requesterIdentity;
+  requesterIdentity.name = requesterName;
+  requesterIdentity.group = "group";
+  m_catalogue->getArchiveFileQueueCriteria(storageClass.diskInstance, storageClass.name, requesterIdentity);
 }
 
 TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId) {
@@ -7031,8 +7038,8 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId) {
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize;
   file1Written.checksumType         = checksumType;
   file1Written.checksumValue        = checksumValue;
@@ -7056,8 +7063,8 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId) {
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -7079,8 +7086,8 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId) {
   file2Written.diskInstance         = file1Written.diskInstance;
   file2Written.diskFileId           = file1Written.diskFileId;
   file2Written.diskFilePath         = file1Written.diskFilePath;
-  file2Written.diskFileUser         = file1Written.diskFileUser;
-  file2Written.diskFileGroup        = file1Written.diskFileGroup;
+  file2Written.diskFileOwnerUid         = file1Written.diskFileOwnerUid;
+  file2Written.diskFileGid        = file1Written.diskFileGid;
   file2Written.size                 = archiveFileSize;
   file2Written.checksumType         = checksumType;
   file2Written.checksumValue        = checksumValue;
@@ -7104,8 +7111,8 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId) {
 
     ASSERT_EQ(file2Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file2Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file2Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file2Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file2Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file2Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(2, archiveFile.tapeFiles.size());
 
@@ -7164,11 +7171,11 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId) {
 
   log::LogContext dummyLc(m_dummyLog);
 
-  common::dataStructures::UserIdentity userIdentity;
-  userIdentity.name = requesterName;
-  userIdentity.group = "group";
+  common::dataStructures::RequesterIdentity requesterIdentity;
+  requesterIdentity.name = requesterName;
+  requesterIdentity.group = "group";
   const common::dataStructures::RetrieveFileQueueCriteria queueCriteria =
-    m_catalogue->prepareToRetrieveFile(diskInstanceName1, archiveFileId, userIdentity, cta::nullopt, dummyLc);
+    m_catalogue->prepareToRetrieveFile(diskInstanceName1, archiveFileId, requesterIdentity, cta::nullopt, dummyLc);
 
   ASSERT_EQ(2, queueCriteria.archiveFile.tapeFiles.size());
   ASSERT_EQ(archivePriority, queueCriteria.mountPolicy.archivePriority);
@@ -7176,7 +7183,7 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId) {
   ASSERT_EQ(maxDrivesAllowed, queueCriteria.mountPolicy.maxDrivesAllowed);
 
   // Check that the diskInstanceName mismatch detection works
-  ASSERT_THROW(m_catalogue->prepareToRetrieveFile(diskInstanceName2, archiveFileId, userIdentity, cta::nullopt, dummyLc),
+  ASSERT_THROW(m_catalogue->prepareToRetrieveFile(diskInstanceName2, archiveFileId, requesterIdentity, cta::nullopt, dummyLc),
     exception::UserError);
 }
 
@@ -7287,8 +7294,8 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId_disa
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize;
   file1Written.checksumType         = checksumType;
   file1Written.checksumValue        = checksumValue;
@@ -7312,8 +7319,8 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId_disa
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -7335,8 +7342,8 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId_disa
   file2Written.diskInstance         = file1Written.diskInstance;
   file2Written.diskFileId           = file1Written.diskFileId;
   file2Written.diskFilePath         = file1Written.diskFilePath;
-  file2Written.diskFileUser         = file1Written.diskFileUser;
-  file2Written.diskFileGroup        = file1Written.diskFileGroup;
+  file2Written.diskFileOwnerUid         = file1Written.diskFileOwnerUid;
+  file2Written.diskFileGid        = file1Written.diskFileGid;
   file2Written.size                 = archiveFileSize;
   file2Written.checksumType         = checksumType;
   file2Written.checksumValue        = checksumValue;
@@ -7360,8 +7367,8 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId_disa
 
     ASSERT_EQ(file2Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file2Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file2Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file2Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file2Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file2Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(2, archiveFile.tapeFiles.size());
 
@@ -7420,13 +7427,13 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId_disa
 
   log::LogContext dummyLc(m_dummyLog);
 
-  common::dataStructures::UserIdentity userIdentity;
-  userIdentity.name = requesterName;
-  userIdentity.group = "group";
+  common::dataStructures::RequesterIdentity requesterIdentity;
+  requesterIdentity.name = requesterName;
+  requesterIdentity.group = "group";
 
   {
     const common::dataStructures::RetrieveFileQueueCriteria queueCriteria =
-      m_catalogue->prepareToRetrieveFile(diskInstanceName1, archiveFileId, userIdentity, cta::nullopt, dummyLc);
+      m_catalogue->prepareToRetrieveFile(diskInstanceName1, archiveFileId, requesterIdentity, cta::nullopt, dummyLc);
 
     ASSERT_EQ(archivePriority, queueCriteria.mountPolicy.archivePriority);
     ASSERT_EQ(minArchiveRequestAge, queueCriteria.mountPolicy.archiveMinRequestAge);
@@ -7458,7 +7465,7 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId_disa
 
   {
     const common::dataStructures::RetrieveFileQueueCriteria queueCriteria =
-      m_catalogue->prepareToRetrieveFile(diskInstanceName1, archiveFileId, userIdentity, cta::nullopt, dummyLc);
+      m_catalogue->prepareToRetrieveFile(diskInstanceName1, archiveFileId, requesterIdentity, cta::nullopt, dummyLc);
 
     ASSERT_EQ(archivePriority, queueCriteria.mountPolicy.archivePriority);
     ASSERT_EQ(minArchiveRequestAge, queueCriteria.mountPolicy.archiveMinRequestAge);
@@ -7478,7 +7485,7 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId_disa
 
   m_catalogue->setTapeDisabled(m_admin, vid2, true);
 
-  ASSERT_THROW(m_catalogue->prepareToRetrieveFile(diskInstanceName1, archiveFileId, userIdentity, cta::nullopt, dummyLc),
+  ASSERT_THROW(m_catalogue->prepareToRetrieveFile(diskInstanceName1, archiveFileId, requesterIdentity, cta::nullopt, dummyLc),
     exception::UserError);
 }
 
@@ -7499,7 +7506,7 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFiles_disk_file_group_without_inst
   ASSERT_FALSE(m_catalogue->getArchiveFilesItor().hasMore());
 
   catalogue::TapeFileSearchCriteria searchCriteria;
-  searchCriteria.diskFileGroup = "disk_file_group";
+  searchCriteria.diskFileGid = DISK_FILE_GID;
 
   ASSERT_THROW(m_catalogue->getArchiveFilesItor(searchCriteria), exception::UserError);
 }
@@ -7510,7 +7517,7 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFiles_non_existant_disk_file_group
 
   catalogue::TapeFileSearchCriteria searchCriteria;
   searchCriteria.diskInstance = "non_existant_disk_instance";
-  searchCriteria.diskFileGroup = "non_existant_disk_file_group";
+  searchCriteria.diskFileGid = NON_EXISTENT_DISK_FILE_GID;
 
   ASSERT_THROW(m_catalogue->getArchiveFilesItor(searchCriteria), exception::UserError);
 }
@@ -7565,7 +7572,7 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFiles_disk_file_user_without_insta
   ASSERT_FALSE(m_catalogue->getArchiveFilesItor().hasMore());
 
   catalogue::TapeFileSearchCriteria searchCriteria;
-  searchCriteria.diskFileUser = "disk_file_user";
+  searchCriteria.diskFileOwnerUid = DISK_FILE_OWNER_UID;
 
   ASSERT_THROW(m_catalogue->getArchiveFilesItor(searchCriteria), exception::UserError);
 }
@@ -7576,7 +7583,7 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFiles_non_existant_disk_file_user)
 
   catalogue::TapeFileSearchCriteria searchCriteria;
   searchCriteria.diskInstance = "non_existant_disk_instance";
-  searchCriteria.diskFileUser = "non_existant_disk_file_user";
+  searchCriteria.diskFileOwnerUid = NON_EXISTENT_DISK_FILE_OWNER_UID;
 
   ASSERT_THROW(m_catalogue->getArchiveFilesItor(searchCriteria), exception::UserError);
 }
@@ -7835,8 +7842,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
     fileWritten.diskInstance = storageClass.diskInstance;
     fileWritten.diskFileId = diskFileId.str();
     fileWritten.diskFilePath = diskFilePath.str();
-    fileWritten.diskFileUser = "public_disk_user";
-    fileWritten.diskFileGroup = "public_disk_group";
+    fileWritten.diskFileOwnerUid     = PUBLIC_DISK_USER;
+    fileWritten.diskFileGid     = PUBLIC_DISK_GROUP;
     fileWritten.size = archiveFileSize;
     fileWritten.checksumType = checksumType;
     fileWritten.checksumValue = checksumValue;
@@ -7897,8 +7904,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
     fileWritten.diskInstance = storageClass.diskInstance;
     fileWritten.diskFileId = diskFileId.str();
     fileWritten.diskFilePath = diskFilePath.str();
-    fileWritten.diskFileUser = "public_disk_user";
-    fileWritten.diskFileGroup = "public_disk_group";
+    fileWritten.diskFileOwnerUid     = PUBLIC_DISK_USER;
+    fileWritten.diskFileGid     = PUBLIC_DISK_GROUP;
     fileWritten.size = archiveFileSize;
     fileWritten.checksumType = checksumType;
     fileWritten.checksumValue = checksumValue;
@@ -7951,8 +7958,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
     searchCriteria.diskInstance = storageClass.diskInstance;
     searchCriteria.diskFileId = std::to_string(12345678);
     searchCriteria.diskFilePath = "/public_dir/public_file_1";
-    searchCriteria.diskFileUser = "public_disk_user";
-    searchCriteria.diskFileGroup = "public_disk_group";
+    searchCriteria.diskFileOwnerUid = PUBLIC_DISK_USER;
+    searchCriteria.diskFileGid = PUBLIC_DISK_GROUP;
     searchCriteria.storageClass = storageClass.name;
     searchCriteria.vid = vid1;
     searchCriteria.tapeFileCopyNb = 1;
@@ -7969,8 +7976,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
     ASSERT_EQ(searchCriteria.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(searchCriteria.diskFileId, archiveFile.diskFileId);
     ASSERT_EQ(searchCriteria.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(searchCriteria.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(searchCriteria.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(searchCriteria.diskFileOwnerUid, static_cast<uint64_t>(archiveFile.diskFileInfo.owner_uid));
+    ASSERT_EQ(searchCriteria.diskFileGid, static_cast<uint64_t>(archiveFile.diskFileInfo.gid));
     ASSERT_EQ(searchCriteria.storageClass, archiveFile.storageClass);
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     ASSERT_EQ(searchCriteria.vid, archiveFile.tapeFiles.begin()->vid);
@@ -7992,8 +7999,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
       fileWritten1.diskInstance = storageClass.diskInstance;
       fileWritten1.diskFileId = diskFileId.str();
       fileWritten1.diskFilePath = diskFilePath.str();
-      fileWritten1.diskFileUser = "public_disk_user";
-      fileWritten1.diskFileGroup = "public_disk_group";
+      fileWritten1.diskFileOwnerUid     = PUBLIC_DISK_USER;
+      fileWritten1.diskFileGid     = PUBLIC_DISK_GROUP;
       fileWritten1.size = archiveFileSize;
       fileWritten1.checksumType = checksumType;
       fileWritten1.checksumValue = checksumValue;
@@ -8014,8 +8021,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
       ASSERT_EQ(fileWritten1.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(fileWritten1.diskFileId, archiveFile.diskFileId);
       ASSERT_EQ(fileWritten1.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(fileWritten1.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(fileWritten1.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(fileWritten1.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(fileWritten1.diskFileGid, archiveFile.diskFileInfo.gid);
       ASSERT_EQ(fileWritten1.size, archiveFile.fileSize);
       ASSERT_EQ(fileWritten1.checksumType, archiveFile.checksumType);
       ASSERT_EQ(fileWritten1.checksumValue, archiveFile.checksumValue);
@@ -8065,8 +8072,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
       fileWritten1.diskInstance = storageClass.diskInstance;
       fileWritten1.diskFileId = diskFileId.str();
       fileWritten1.diskFilePath = diskFilePath.str();
-      fileWritten1.diskFileUser = "public_disk_user";
-      fileWritten1.diskFileGroup = "public_disk_group";
+      fileWritten1.diskFileOwnerUid     = PUBLIC_DISK_USER;
+      fileWritten1.diskFileGid     = PUBLIC_DISK_GROUP;
       fileWritten1.size = archiveFileSize;
       fileWritten1.checksumType = checksumType;
       fileWritten1.checksumValue = checksumValue;
@@ -8087,8 +8094,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
       ASSERT_EQ(fileWritten1.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(fileWritten1.diskFileId, archiveFile.diskFileId);
       ASSERT_EQ(fileWritten1.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(fileWritten1.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(fileWritten1.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(fileWritten1.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(fileWritten1.diskFileGid, archiveFile.diskFileInfo.gid);
       ASSERT_EQ(fileWritten1.size, archiveFile.fileSize);
       ASSERT_EQ(fileWritten1.checksumType, archiveFile.checksumType);
       ASSERT_EQ(fileWritten1.checksumValue, archiveFile.checksumValue);
@@ -8140,8 +8147,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
       fileWritten.diskInstance = storageClass.diskInstance;
       fileWritten.diskFileId = diskFileId.str();
       fileWritten.diskFilePath = diskFilePath.str();
-      fileWritten.diskFileUser = "public_disk_user";
-      fileWritten.diskFileGroup = "public_disk_group";
+      fileWritten.diskFileOwnerUid     = PUBLIC_DISK_USER;
+      fileWritten.diskFileGid     = PUBLIC_DISK_GROUP;
       fileWritten.size = archiveFileSize;
       fileWritten.checksumType = checksumType;
       fileWritten.checksumValue = checksumValue;
@@ -8158,8 +8165,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
       ASSERT_EQ(fileWritten.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(fileWritten.diskFileId, archiveFile.diskFileId);
       ASSERT_EQ(fileWritten.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(fileWritten.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(fileWritten.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(fileWritten.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(fileWritten.diskFileGid, archiveFile.diskFileInfo.gid);
       ASSERT_EQ(fileWritten.size, archiveFile.fileSize);
       ASSERT_EQ(fileWritten.checksumType, archiveFile.checksumType);
       ASSERT_EQ(fileWritten.checksumValue, archiveFile.checksumValue);
@@ -8201,8 +8208,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
       fileWritten.diskInstance = storageClass.diskInstance;
       fileWritten.diskFileId = diskFileId.str();
       fileWritten.diskFilePath = diskFilePath.str();
-      fileWritten.diskFileUser = "public_disk_user";
-      fileWritten.diskFileGroup = "public_disk_group";
+      fileWritten.diskFileOwnerUid     = PUBLIC_DISK_USER;
+      fileWritten.diskFileGid     = PUBLIC_DISK_GROUP;
       fileWritten.size = archiveFileSize;
       fileWritten.checksumType = checksumType;
       fileWritten.checksumValue = checksumValue;
@@ -8219,8 +8226,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
       ASSERT_EQ(fileWritten.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(fileWritten.diskFileId, archiveFile.diskFileId);
       ASSERT_EQ(fileWritten.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(fileWritten.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(fileWritten.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(fileWritten.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(fileWritten.diskFileGid, archiveFile.diskFileInfo.gid);
       ASSERT_EQ(fileWritten.size, archiveFile.fileSize);
       ASSERT_EQ(fileWritten.checksumType, archiveFile.checksumType);
       ASSERT_EQ(fileWritten.checksumValue, archiveFile.checksumValue);
@@ -8262,8 +8269,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
       fileWritten.diskInstance = storageClass.diskInstance;
       fileWritten.diskFileId = diskFileId.str();
       fileWritten.diskFilePath = diskFilePath.str();
-      fileWritten.diskFileUser = "public_disk_user";
-      fileWritten.diskFileGroup = "public_disk_group";
+      fileWritten.diskFileOwnerUid     = PUBLIC_DISK_USER;
+      fileWritten.diskFileGid     = PUBLIC_DISK_GROUP;
       fileWritten.size = archiveFileSize;
       fileWritten.checksumType = checksumType;
       fileWritten.checksumValue = checksumValue;
@@ -8280,8 +8287,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
       ASSERT_EQ(fileWritten.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(fileWritten.diskFileId, archiveFile.diskFileId);
       ASSERT_EQ(fileWritten.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(fileWritten.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(fileWritten.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(fileWritten.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(fileWritten.diskFileGid, archiveFile.diskFileInfo.gid);
       ASSERT_EQ(fileWritten.size, archiveFile.fileSize);
       ASSERT_EQ(fileWritten.checksumType, archiveFile.checksumType);
       ASSERT_EQ(fileWritten.checksumValue, archiveFile.checksumValue);
@@ -8361,7 +8368,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
   {
     catalogue::TapeFileSearchCriteria searchCriteria;
     searchCriteria.diskInstance = storageClass.diskInstance;
-    searchCriteria.diskFileUser = "public_disk_user";
+    searchCriteria.diskFileOwnerUid     = PUBLIC_DISK_USER;
     auto archiveFileItor = m_catalogue->getArchiveFilesItor(searchCriteria);
     const auto m = archiveFileItorToMap(archiveFileItor);
     ASSERT_EQ(nbArchiveFiles, m.size());
@@ -8374,7 +8381,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
   {
     catalogue::TapeFileSearchCriteria searchCriteria;
     searchCriteria.diskInstance = storageClass.diskInstance;
-    searchCriteria.diskFileGroup = "public_disk_group";
+    searchCriteria.diskFileGid     = PUBLIC_DISK_GROUP;
     auto archiveFileItor = m_catalogue->getArchiveFilesItor(searchCriteria);
     const auto m = archiveFileItorToMap(archiveFileItor);
     ASSERT_EQ(nbArchiveFiles, m.size());
@@ -8555,8 +8562,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
           fileWritten.diskInstance = m_storageClass.diskInstance;
           fileWritten.diskFileId = diskFileId.str();
           fileWritten.diskFilePath = diskFilePath.str();
-          fileWritten.diskFileUser = "public_disk_user";
-          fileWritten.diskFileGroup = "public_disk_group";
+          fileWritten.diskFileOwnerUid     = PUBLIC_DISK_USER;
+          fileWritten.diskFileGid     = PUBLIC_DISK_GROUP;
           fileWritten.size = m_archiveFileSize;
           fileWritten.checksumType = m_checksumType;
           fileWritten.checksumValue = m_checksumValue;
@@ -8867,8 +8874,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
     searchCriteria.diskInstance = storageClass.diskInstance;
     searchCriteria.diskFileId = std::to_string(12345678);
     searchCriteria.diskFilePath = "/public_dir/public_file_1";
-    searchCriteria.diskFileUser = "public_disk_user";
-    searchCriteria.diskFileGroup = "public_disk_group";
+    searchCriteria.diskFileOwnerUid     = PUBLIC_DISK_USER;
+    searchCriteria.diskFileGid     = PUBLIC_DISK_GROUP;
     searchCriteria.storageClass = storageClass.name;
     searchCriteria.vid = vid1;
     searchCriteria.tapeFileCopyNb = 1;
@@ -8885,8 +8892,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
     ASSERT_EQ(searchCriteria.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(searchCriteria.diskFileId, archiveFile.diskFileId);
     ASSERT_EQ(searchCriteria.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(searchCriteria.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(searchCriteria.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(searchCriteria.diskFileOwnerUid, static_cast<uint64_t>(archiveFile.diskFileInfo.owner_uid));
+    ASSERT_EQ(searchCriteria.diskFileGid, static_cast<uint64_t>(archiveFile.diskFileInfo.gid));
     ASSERT_EQ(searchCriteria.storageClass, archiveFile.storageClass);
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     ASSERT_EQ(searchCriteria.vid, archiveFile.tapeFiles.begin()->vid);
@@ -8922,8 +8929,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
       fileWritten1.diskInstance = storageClass.diskInstance;
       fileWritten1.diskFileId = diskFileId.str();
       fileWritten1.diskFilePath = diskFilePath.str();
-      fileWritten1.diskFileUser = "public_disk_user";
-      fileWritten1.diskFileGroup = "public_disk_group";
+      fileWritten1.diskFileOwnerUid     = PUBLIC_DISK_USER;
+      fileWritten1.diskFileGid     = PUBLIC_DISK_GROUP;
       fileWritten1.size = archiveFileSize;
       fileWritten1.checksumType = checksumType;
       fileWritten1.checksumValue = checksumValue;
@@ -8946,8 +8953,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
       ASSERT_EQ(fileWritten1.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(fileWritten1.diskFileId, archiveFile.diskFileId);
       ASSERT_EQ(fileWritten1.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(fileWritten1.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(fileWritten1.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(fileWritten1.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(fileWritten1.diskFileGid, archiveFile.diskFileInfo.gid);
       ASSERT_EQ(fileWritten1.size, archiveFile.fileSize);
       ASSERT_EQ(fileWritten1.checksumType, archiveFile.checksumType);
       ASSERT_EQ(fileWritten1.checksumValue, archiveFile.checksumValue);
@@ -8999,8 +9006,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
       fileWritten1.diskInstance = storageClass.diskInstance;
       fileWritten1.diskFileId = diskFileId.str();
       fileWritten1.diskFilePath = diskFilePath.str();
-      fileWritten1.diskFileUser = "public_disk_user";
-      fileWritten1.diskFileGroup = "public_disk_group";
+      fileWritten1.diskFileOwnerUid     = PUBLIC_DISK_USER;
+      fileWritten1.diskFileGid     = PUBLIC_DISK_GROUP;
       fileWritten1.size = archiveFileSize;
       fileWritten1.checksumType = checksumType;
       fileWritten1.checksumValue = checksumValue;
@@ -9023,8 +9030,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
       ASSERT_EQ(fileWritten1.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(fileWritten1.diskFileId, archiveFile.diskFileId);
       ASSERT_EQ(fileWritten1.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(fileWritten1.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(fileWritten1.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(fileWritten1.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(fileWritten1.diskFileGid, archiveFile.diskFileInfo.gid);
       ASSERT_EQ(fileWritten1.size, archiveFile.fileSize);
       ASSERT_EQ(fileWritten1.checksumType, archiveFile.checksumType);
       ASSERT_EQ(fileWritten1.checksumValue, archiveFile.checksumValue);
@@ -9079,8 +9086,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
       fileWritten.diskInstance = storageClass.diskInstance;
       fileWritten.diskFileId = diskFileId.str();
       fileWritten.diskFilePath = diskFilePath.str();
-      fileWritten.diskFileUser = "public_disk_user";
-      fileWritten.diskFileGroup = "public_disk_group";
+      fileWritten.diskFileOwnerUid     = PUBLIC_DISK_USER;
+      fileWritten.diskFileGid     = PUBLIC_DISK_GROUP;
       fileWritten.size = archiveFileSize;
       fileWritten.checksumType = checksumType;
       fileWritten.checksumValue = checksumValue;
@@ -9097,8 +9104,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
       ASSERT_EQ(fileWritten.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(fileWritten.diskFileId, archiveFile.diskFileId);
       ASSERT_EQ(fileWritten.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(fileWritten.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(fileWritten.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(fileWritten.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(fileWritten.diskFileGid, archiveFile.diskFileInfo.gid);
       ASSERT_EQ(fileWritten.size, archiveFile.fileSize);
       ASSERT_EQ(fileWritten.checksumType, archiveFile.checksumType);
       ASSERT_EQ(fileWritten.checksumValue, archiveFile.checksumValue);
@@ -9143,8 +9150,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
       fileWritten.diskInstance = storageClass.diskInstance;
       fileWritten.diskFileId = diskFileId.str();
       fileWritten.diskFilePath = diskFilePath.str();
-      fileWritten.diskFileUser = "public_disk_user";
-      fileWritten.diskFileGroup = "public_disk_group";
+      fileWritten.diskFileOwnerUid     = PUBLIC_DISK_USER;
+      fileWritten.diskFileGid     = PUBLIC_DISK_GROUP;
       fileWritten.size = archiveFileSize;
       fileWritten.checksumType = checksumType;
       fileWritten.checksumValue = checksumValue;
@@ -9161,8 +9168,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
       ASSERT_EQ(fileWritten.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(fileWritten.diskFileId, archiveFile.diskFileId);
       ASSERT_EQ(fileWritten.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(fileWritten.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(fileWritten.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(fileWritten.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(fileWritten.diskFileGid, archiveFile.diskFileInfo.gid);
       ASSERT_EQ(fileWritten.size, archiveFile.fileSize);
       ASSERT_EQ(fileWritten.checksumType, archiveFile.checksumType);
       ASSERT_EQ(fileWritten.checksumValue, archiveFile.checksumValue);
@@ -9207,8 +9214,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
       fileWritten.diskInstance = storageClass.diskInstance;
       fileWritten.diskFileId = diskFileId.str();
       fileWritten.diskFilePath = diskFilePath.str();
-      fileWritten.diskFileUser = "public_disk_user";
-      fileWritten.diskFileGroup = "public_disk_group";
+      fileWritten.diskFileOwnerUid     = PUBLIC_DISK_USER;
+      fileWritten.diskFileGid     = PUBLIC_DISK_GROUP;
       fileWritten.size = archiveFileSize;
       fileWritten.checksumType = checksumType;
       fileWritten.checksumValue = checksumValue;
@@ -9225,8 +9232,8 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
       ASSERT_EQ(fileWritten.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(fileWritten.diskFileId, archiveFile.diskFileId);
       ASSERT_EQ(fileWritten.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(fileWritten.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(fileWritten.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(fileWritten.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(fileWritten.diskFileGid, archiveFile.diskFileInfo.gid);
       ASSERT_EQ(fileWritten.size, archiveFile.fileSize);
       ASSERT_EQ(fileWritten.checksumType, archiveFile.checksumType);
       ASSERT_EQ(fileWritten.checksumValue, archiveFile.checksumValue);
@@ -9306,7 +9313,7 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
   {
     catalogue::TapeFileSearchCriteria searchCriteria;
     searchCriteria.diskInstance = storageClass.diskInstance;
-    searchCriteria.diskFileUser = "public_disk_user";
+    searchCriteria.diskFileOwnerUid     = PUBLIC_DISK_USER;
     auto archiveFileItor = m_catalogue->getArchiveFilesItor(searchCriteria);
     const auto m = archiveFileItorToMap(archiveFileItor);
     ASSERT_EQ(nbArchiveFiles, m.size());
@@ -9319,7 +9326,7 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
   {
     catalogue::TapeFileSearchCriteria searchCriteria;
     searchCriteria.diskInstance = storageClass.diskInstance;
-    searchCriteria.diskFileGroup = "public_disk_group";
+    searchCriteria.diskFileGid     = PUBLIC_DISK_GROUP;
     auto archiveFileItor = m_catalogue->getArchiveFilesItor(searchCriteria);
     const auto m = archiveFileItorToMap(archiveFileItor);
     ASSERT_EQ(nbArchiveFiles, m.size());
@@ -9521,8 +9528,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize;
   file1Written.checksumType         = checksumType;
   file1Written.checksumValue        = checksumValue;
@@ -9555,8 +9562,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -9578,8 +9585,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file2Written.diskInstance         = file1Written.diskInstance;
   file2Written.diskFileId           = file1Written.diskFileId;
   file2Written.diskFilePath         = file1Written.diskFilePath;
-  file2Written.diskFileUser         = file1Written.diskFileUser;
-  file2Written.diskFileGroup        = file1Written.diskFileGroup;
+  file2Written.diskFileOwnerUid         = file1Written.diskFileOwnerUid;
+  file2Written.diskFileGid        = file1Written.diskFileGid;
   file2Written.size                 = archiveFileSize;
   file2Written.checksumType         = checksumType;
   file2Written.checksumValue        = checksumValue;
@@ -9613,8 +9620,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
 
     ASSERT_EQ(file2Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file2Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file2Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file2Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file2Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file2Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(2, archiveFile.tapeFiles.size());
 
@@ -9749,8 +9756,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize;
   file1Written.checksumType         = checksumType;
   file1Written.checksumValue        = checksumValue;
@@ -9783,8 +9790,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -9806,8 +9813,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file2Written.diskInstance         = file1Written.diskInstance;
   file2Written.diskFileId           = file1Written.diskFileId;
   file2Written.diskFilePath         = file1Written.diskFilePath;
-  file2Written.diskFileUser         = file1Written.diskFileUser;
-  file2Written.diskFileGroup        = file1Written.diskFileGroup;
+  file2Written.diskFileOwnerUid         = file1Written.diskFileOwnerUid;
+  file2Written.diskFileGid        = file1Written.diskFileGid;
   file2Written.size                 = archiveFileSize;
   file2Written.checksumType         = checksumType;
   file2Written.checksumValue        = checksumValue;
@@ -9841,8 +9848,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
 
     ASSERT_EQ(file2Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file2Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file2Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file2Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file2Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file2Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     // If there are two or more tape copies with the same copy number then
     // only one of them will be active (<=> supersededByVid.empty()).
@@ -9947,8 +9954,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize;
   file1Written.checksumType         = checksumType;
   file1Written.checksumValue        = checksumValue;
@@ -9981,8 +9988,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -10004,8 +10011,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file2Written.diskInstance         = file1Written.diskInstance;
   file2Written.diskFileId           = file1Written.diskFileId;
   file2Written.diskFilePath         = file1Written.diskFilePath;
-  file2Written.diskFileUser         = file1Written.diskFileUser;
-  file2Written.diskFileGroup        = file1Written.diskFileGroup;
+  file2Written.diskFileOwnerUid         = file1Written.diskFileOwnerUid;
+  file2Written.diskFileGid        = file1Written.diskFileGid;
   file2Written.size                 = archiveFileSize;
   file2Written.checksumType         = checksumType;
   file2Written.checksumValue        = checksumValue;
@@ -10039,8 +10046,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
 
     ASSERT_EQ(file2Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file2Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file2Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file2Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file2Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file2Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     // If there are two or more tape copies with the same copy number then
     // only one of them will be active (<=> supersededByVid.empty()).
@@ -10173,8 +10180,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize1;
   file1Written.checksumType         = checksumType;
   file1Written.checksumValue        = checksumValue;
@@ -10207,8 +10214,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -10232,8 +10239,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file2Written.diskInstance         = file1Written.diskInstance;
   file2Written.diskFileId           = file1Written.diskFileId;
   file2Written.diskFilePath         = file1Written.diskFilePath;
-  file2Written.diskFileUser         = file1Written.diskFileUser;
-  file2Written.diskFileGroup        = file1Written.diskFileGroup;
+  file2Written.diskFileOwnerUid         = file1Written.diskFileOwnerUid;
+  file2Written.diskFileGid        = file1Written.diskFileGid;
   file2Written.size                 = archiveFileSize2;
   file2Written.checksumType         = checksumType;
   file2Written.checksumValue        = checksumValue;
@@ -10356,8 +10363,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize;
   file1Written.checksumType         = checksumType1;
   file1Written.checksumValue        = checksumValue;
@@ -10390,8 +10397,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -10415,8 +10422,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file2Written.diskInstance         = file1Written.diskInstance;
   file2Written.diskFileId           = file1Written.diskFileId;
   file2Written.diskFilePath         = file1Written.diskFilePath;
-  file2Written.diskFileUser         = file1Written.diskFileUser;
-  file2Written.diskFileGroup        = file1Written.diskFileGroup;
+  file2Written.diskFileOwnerUid         = file1Written.diskFileOwnerUid;
+  file2Written.diskFileGid        = file1Written.diskFileGid;
   file2Written.size                 = archiveFileSize;
   file2Written.checksumType         = checksumType2;
   file2Written.checksumValue        = checksumValue;
@@ -10539,8 +10546,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize;
   file1Written.checksumType         = checksumType;
   file1Written.checksumValue        = checksumValue1;
@@ -10573,8 +10580,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -10598,8 +10605,8 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   file2Written.diskInstance         = file1Written.diskInstance;
   file2Written.diskFileId           = file1Written.diskFileId;
   file2Written.diskFilePath         = file1Written.diskFilePath;
-  file2Written.diskFileUser         = file1Written.diskFileUser;
-  file2Written.diskFileGroup        = file1Written.diskFileGroup;
+  file2Written.diskFileOwnerUid         = file1Written.diskFileOwnerUid;
+  file2Written.diskFileGid        = file1Written.diskFileGid;
   file2Written.size                 = archiveFileSize;
   file2Written.checksumType         = checksumType;
   file2Written.checksumValue        = checksumValue2;
@@ -10722,8 +10729,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile) {
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize;
   file1Written.checksumType         = checksumType;
   file1Written.checksumValue        = checksumValue;
@@ -10762,8 +10769,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile) {
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -10789,8 +10796,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile) {
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -10812,8 +10819,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile) {
   file2Written.diskInstance         = file1Written.diskInstance;
   file2Written.diskFileId           = file1Written.diskFileId;
   file2Written.diskFilePath         = file1Written.diskFilePath;
-  file2Written.diskFileUser         = file1Written.diskFileUser;
-  file2Written.diskFileGroup        = file1Written.diskFileGroup;
+  file2Written.diskFileOwnerUid         = file1Written.diskFileOwnerUid;
+  file2Written.diskFileGid        = file1Written.diskFileGid;
   file2Written.size                 = archiveFileSize;
   file2Written.checksumType         = checksumType;
   file2Written.checksumValue        = checksumValue;
@@ -10855,8 +10862,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile) {
 
       ASSERT_EQ(file2Written.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(file2Written.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(file2Written.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(file2Written.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(file2Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(file2Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
       ASSERT_EQ(2, archiveFile.tapeFiles.size());
 
@@ -10894,8 +10901,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile) {
 
     ASSERT_EQ(file2Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file2Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file2Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file2Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file2Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file2Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(2, archiveFile.tapeFiles.size());
 
@@ -11035,8 +11042,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile_by_archive_file_id_of_anot
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize;
   file1Written.checksumType         = checksumType;
   file1Written.checksumValue        = checksumValue;
@@ -11075,8 +11082,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile_by_archive_file_id_of_anot
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -11102,8 +11109,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile_by_archive_file_id_of_anot
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -11125,8 +11132,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile_by_archive_file_id_of_anot
   file2Written.diskInstance         = file1Written.diskInstance;
   file2Written.diskFileId           = file1Written.diskFileId;
   file2Written.diskFilePath         = file1Written.diskFilePath;
-  file2Written.diskFileUser         = file1Written.diskFileUser;
-  file2Written.diskFileGroup        = file1Written.diskFileGroup;
+  file2Written.diskFileOwnerUid         = file1Written.diskFileOwnerUid;
+  file2Written.diskFileGid        = file1Written.diskFileGid;
   file2Written.size                 = archiveFileSize;
   file2Written.checksumType         = checksumType;
   file2Written.checksumValue        = checksumValue;
@@ -11168,8 +11175,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile_by_archive_file_id_of_anot
 
       ASSERT_EQ(file2Written.diskInstance, archiveFile.diskInstance);
       ASSERT_EQ(file2Written.diskFilePath, archiveFile.diskFileInfo.path);
-      ASSERT_EQ(file2Written.diskFileUser, archiveFile.diskFileInfo.owner);
-      ASSERT_EQ(file2Written.diskFileGroup, archiveFile.diskFileInfo.group);
+      ASSERT_EQ(file2Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+      ASSERT_EQ(file2Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
       ASSERT_EQ(2, archiveFile.tapeFiles.size());
 
@@ -11207,8 +11214,8 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile_by_archive_file_id_of_anot
 
     ASSERT_EQ(file2Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file2Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file2Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file2Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file2Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file2Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(2, archiveFile.tapeFiles.size());
 
@@ -11549,8 +11556,8 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_1_no_tape_files) {
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize;
   file1Written.checksumType         = checksumType;
   file1Written.checksumValue        = checksumValue;
@@ -11574,8 +11581,8 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_1_no_tape_files) {
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
@@ -11774,8 +11781,8 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_1_one_tape_file) {
   file1Written.diskInstance         = storageClass.diskInstance;
   file1Written.diskFileId           = "5678";
   file1Written.diskFilePath         = "/public_dir/public_file";
-  file1Written.diskFileUser         = "public_disk_user";
-  file1Written.diskFileGroup        = "public_disk_group";
+  file1Written.diskFileOwnerUid     = PUBLIC_DISK_USER;
+  file1Written.diskFileGid     = PUBLIC_DISK_GROUP;
   file1Written.size                 = archiveFileSize;
   file1Written.checksumType         = checksumType;
   file1Written.checksumValue        = checksumValue;
@@ -11799,8 +11806,8 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_1_one_tape_file) {
 
     ASSERT_EQ(file1Written.diskInstance, archiveFile.diskInstance);
     ASSERT_EQ(file1Written.diskFilePath, archiveFile.diskFileInfo.path);
-    ASSERT_EQ(file1Written.diskFileUser, archiveFile.diskFileInfo.owner);
-    ASSERT_EQ(file1Written.diskFileGroup, archiveFile.diskFileInfo.group);
+    ASSERT_EQ(file1Written.diskFileOwnerUid, archiveFile.diskFileInfo.owner_uid);
+    ASSERT_EQ(file1Written.diskFileGid, archiveFile.diskFileInfo.gid);
 
     ASSERT_EQ(1, archiveFile.tapeFiles.size());
     auto copyNbToTapeFile1Itor = archiveFile.tapeFiles.find(1);
diff --git a/catalogue/DummyCatalogue.hpp b/catalogue/DummyCatalogue.hpp
index 6e964cfaceeb0dd666dfec0bd7fe9136e09cdcee..b9e6beadc4152ad3c0e09e58444b6c57ecfee8c2 100644
--- a/catalogue/DummyCatalogue.hpp
+++ b/catalogue/DummyCatalogue.hpp
@@ -107,10 +107,10 @@ public:
   void noSpaceLeftOnTape(const std::string& vid) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
   void ping() override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
   std::map<std::string, uint64_t> getSchemaVersion() const override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
-  uint64_t checkAndGetNextArchiveFileId(const std::string &diskInstanceName, const std::string &storageClassName, const common::dataStructures::UserIdentity &user) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
+  uint64_t checkAndGetNextArchiveFileId(const std::string &diskInstanceName, const std::string &storageClassName, const common::dataStructures::RequesterIdentity &user) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
   common::dataStructures::ArchiveFileQueueCriteria getArchiveFileQueueCriteria(const std::string &diskInstanceName,
-    const std::string &storageClassName, const common::dataStructures::UserIdentity &user) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
-  common::dataStructures::RetrieveFileQueueCriteria prepareToRetrieveFile(const std::string& diskInstanceName, const uint64_t archiveFileId, const common::dataStructures::UserIdentity& user, const optional<std::string>& activity, log::LogContext& lc) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
+    const std::string &storageClassName, const common::dataStructures::RequesterIdentity &user) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
+  common::dataStructures::RetrieveFileQueueCriteria prepareToRetrieveFile(const std::string& diskInstanceName, const uint64_t archiveFileId, const common::dataStructures::RequesterIdentity& user, const optional<std::string>& activity, log::LogContext& lc) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
   void reclaimTape(const common::dataStructures::SecurityIdentity& admin, const std::string& vid) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
   void setTapeDisabled(const common::dataStructures::SecurityIdentity& admin, const std::string& vid, const bool disabledValue) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
   void setTapeFull(const common::dataStructures::SecurityIdentity& admin, const std::string& vid, const bool fullValue) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
diff --git a/catalogue/MysqlCatalogue.cpp b/catalogue/MysqlCatalogue.cpp
index fc8ba44c69078da759b3f09b4ec90e1858bb0292..ed14d94f7dfccd72a3dfa822ed311a29795e5a24 100644
--- a/catalogue/MysqlCatalogue.cpp
+++ b/catalogue/MysqlCatalogue.cpp
@@ -205,8 +205,7 @@ common::dataStructures::Tape MysqlCatalogue::selectTapeForUpdate(rdbms::Conn &co
 
     tape.comment = rset.columnString("USER_COMMENT");
 
-    common::dataStructures::UserIdentity creatorUI;
-    creatorUI.name = rset.columnString("CREATION_LOG_USER_NAME");
+    // std::string creatorUIname = rset.columnString("CREATION_LOG_USER_NAME");
 
     common::dataStructures::EntryLog creationLog;
     creationLog.username = rset.columnString("CREATION_LOG_USER_NAME");
@@ -215,8 +214,7 @@ common::dataStructures::Tape MysqlCatalogue::selectTapeForUpdate(rdbms::Conn &co
 
     tape.creationLog = creationLog;
 
-    common::dataStructures::UserIdentity updaterUI;
-    updaterUI.name = rset.columnString("LAST_UPDATE_USER_NAME");
+    // std::string updaterUIname = rset.columnString("LAST_UPDATE_USER_NAME");
 
     common::dataStructures::EntryLog updateLog;
     updateLog.username = rset.columnString("LAST_UPDATE_USER_NAME");
@@ -320,8 +318,8 @@ void MysqlCatalogue::fileWrittenToTape(rdbms::Conn &conn, const TapeFileWritten
       row.checksumValue = event.checksumValue;
       row.storageClassName = event.storageClassName;
       row.diskFilePath = event.diskFilePath;
-      row.diskFileUser = event.diskFileUser;
-      row.diskFileGroup = event.diskFileGroup;
+      row.diskFileOwnerUid = event.diskFileOwnerUid;
+      row.diskFileGid = event.diskFileGid;
       insertArchiveFile(conn, row);
     } catch(exception::DatabasePrimaryKeyError &) {
       // Ignore this error
@@ -437,8 +435,8 @@ void MysqlCatalogue::deleteArchiveFile(const std::string &diskInstanceName, cons
         archiveFile->diskInstance = selectRset.columnString("DISK_INSTANCE_NAME");
         archiveFile->diskFileId = selectRset.columnString("DISK_FILE_ID");
         archiveFile->diskFileInfo.path = selectRset.columnString("DISK_FILE_PATH");
-        archiveFile->diskFileInfo.owner = selectRset.columnString("DISK_FILE_UID");
-        archiveFile->diskFileInfo.group = selectRset.columnString("DISK_FILE_GID");
+        archiveFile->diskFileInfo.owner_uid = selectRset.columnUint64("DISK_FILE_UID");
+        archiveFile->diskFileInfo.gid = selectRset.columnUint64("DISK_FILE_GID");
         archiveFile->fileSize = selectRset.columnUint64("SIZE_IN_BYTES");
         archiveFile->checksumType = selectRset.columnString("CHECKSUM_TYPE");
         archiveFile->checksumValue = selectRset.columnString("CHECKSUM_VALUE");
@@ -482,8 +480,8 @@ void MysqlCatalogue::deleteArchiveFile(const std::string &diskInstanceName, cons
          .add("requestDiskInstance", diskInstanceName)
          .add("diskFileId", archiveFile->diskFileId)
          .add("diskFileInfo.path", archiveFile->diskFileInfo.path)
-         .add("diskFileInfo.owner", archiveFile->diskFileInfo.owner)
-         .add("diskFileInfo.group", archiveFile->diskFileInfo.group)
+         .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
+         .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
          .add("fileSize", std::to_string(archiveFile->fileSize))
          .add("checksumType", archiveFile->checksumType)
          .add("checksumValue", archiveFile->checksumValue)
@@ -547,8 +545,8 @@ void MysqlCatalogue::deleteArchiveFile(const std::string &diskInstanceName, cons
        .add("diskInstance", archiveFile->diskInstance)
        .add("diskFileId", archiveFile->diskFileId)
        .add("diskFileInfo.path", archiveFile->diskFileInfo.path)
-       .add("diskFileInfo.owner", archiveFile->diskFileInfo.owner)
-       .add("diskFileInfo.group", archiveFile->diskFileInfo.group)
+       .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
+       .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
        .add("fileSize", std::to_string(archiveFile->fileSize))
        .add("checksumType", archiveFile->checksumType)
        .add("checksumValue", archiveFile->checksumValue)
diff --git a/catalogue/OracleCatalogue.cpp b/catalogue/OracleCatalogue.cpp
index 55f13a90064f5ed8269acdb15c1feef51489ce9f..5d53f1ed5e27a07e53ad0379fab2314f0a62479d 100644
--- a/catalogue/OracleCatalogue.cpp
+++ b/catalogue/OracleCatalogue.cpp
@@ -269,8 +269,7 @@ common::dataStructures::Tape OracleCatalogue::selectTapeForUpdate(rdbms::Conn &c
 
     tape.comment = rset.columnString("USER_COMMENT");
 
-    common::dataStructures::UserIdentity creatorUI;
-    creatorUI.name = rset.columnString("CREATION_LOG_USER_NAME");
+    //std::string creatorUIname = rset.columnString("CREATION_LOG_USER_NAME");
 
     common::dataStructures::EntryLog creationLog;
     creationLog.username = rset.columnString("CREATION_LOG_USER_NAME");
@@ -279,8 +278,7 @@ common::dataStructures::Tape OracleCatalogue::selectTapeForUpdate(rdbms::Conn &c
 
     tape.creationLog = creationLog;
 
-    common::dataStructures::UserIdentity updaterUI;
-    updaterUI.name = rset.columnString("LAST_UPDATE_USER_NAME");
+    //std::string updaterUIname = rset.columnString("LAST_UPDATE_USER_NAME");
 
     common::dataStructures::EntryLog updateLog;
     updateLog.username = rset.columnString("LAST_UPDATE_USER_NAME");
@@ -537,8 +535,8 @@ void OracleCatalogue::idempotentBatchInsertArchiveFiles(rdbms::Conn &conn, const
       archiveFileBatch.diskInstance.setFieldLenToValueLen(i, event.diskInstance);
       archiveFileBatch.diskFileId.setFieldLenToValueLen(i, event.diskFileId);
       archiveFileBatch.diskFilePath.setFieldLenToValueLen(i, event.diskFilePath);
-      archiveFileBatch.diskFileUser.setFieldLenToValueLen(i, event.diskFileUser);
-      archiveFileBatch.diskFileGroup.setFieldLenToValueLen(i, event.diskFileGroup);
+      archiveFileBatch.diskFileUser.setFieldLenToValueLen(i, event.diskFileOwnerUid);
+      archiveFileBatch.diskFileGroup.setFieldLenToValueLen(i, event.diskFileGid);
       archiveFileBatch.size.setFieldLenToValueLen(i, event.size);
       archiveFileBatch.checksumType.setFieldLenToValueLen(i, event.checksumType);
       archiveFileBatch.checksumValue.setFieldLenToValueLen(i, event.checksumValue);
@@ -555,8 +553,8 @@ void OracleCatalogue::idempotentBatchInsertArchiveFiles(rdbms::Conn &conn, const
       archiveFileBatch.diskInstance.setFieldValue(i, event.diskInstance);
       archiveFileBatch.diskFileId.setFieldValue(i, event.diskFileId);
       archiveFileBatch.diskFilePath.setFieldValue(i, event.diskFilePath);
-      archiveFileBatch.diskFileUser.setFieldValue(i, event.diskFileUser);
-      archiveFileBatch.diskFileGroup.setFieldValue(i, event.diskFileGroup);
+      archiveFileBatch.diskFileUser.setFieldValue(i, event.diskFileOwnerUid);
+      archiveFileBatch.diskFileGroup.setFieldValue(i, event.diskFileGid);
       archiveFileBatch.size.setFieldValue(i, event.size);
       archiveFileBatch.checksumType.setFieldValue(i, event.checksumType);
       archiveFileBatch.checksumValue.setFieldValue(i, event.checksumValue);
@@ -825,8 +823,8 @@ void OracleCatalogue::deleteArchiveFile(const std::string &diskInstanceName, con
         archiveFile->diskInstance = selectRset.columnString("DISK_INSTANCE_NAME");
         archiveFile->diskFileId = selectRset.columnString("DISK_FILE_ID");
         archiveFile->diskFileInfo.path = selectRset.columnString("DISK_FILE_PATH");
-        archiveFile->diskFileInfo.owner = selectRset.columnString("DISK_FILE_UID");
-        archiveFile->diskFileInfo.group = selectRset.columnString("DISK_FILE_GID");
+        archiveFile->diskFileInfo.owner_uid = selectRset.columnUint64("DISK_FILE_UID");
+        archiveFile->diskFileInfo.gid = selectRset.columnUint64("DISK_FILE_GID");
         archiveFile->fileSize = selectRset.columnUint64("SIZE_IN_BYTES");
         archiveFile->checksumType = selectRset.columnString("CHECKSUM_TYPE");
         archiveFile->checksumValue = selectRset.columnString("CHECKSUM_VALUE");
@@ -870,8 +868,8 @@ void OracleCatalogue::deleteArchiveFile(const std::string &diskInstanceName, con
          .add("requestDiskInstance", diskInstanceName)
          .add("diskFileId", archiveFile->diskFileId)
          .add("diskFileInfo.path", archiveFile->diskFileInfo.path)
-         .add("diskFileInfo.owner", archiveFile->diskFileInfo.owner)
-         .add("diskFileInfo.group", archiveFile->diskFileInfo.group)
+         .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
+         .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
          .add("fileSize", std::to_string(archiveFile->fileSize))
          .add("checksumType", archiveFile->checksumType)
          .add("checksumValue", archiveFile->checksumValue)
@@ -932,8 +930,8 @@ void OracleCatalogue::deleteArchiveFile(const std::string &diskInstanceName, con
        .add("diskInstance", archiveFile->diskInstance)
        .add("diskFileId", archiveFile->diskFileId)
        .add("diskFileInfo.path", archiveFile->diskFileInfo.path)
-       .add("diskFileInfo.owner", archiveFile->diskFileInfo.owner)
-       .add("diskFileInfo.group", archiveFile->diskFileInfo.group)
+       .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
+       .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
        .add("fileSize", std::to_string(archiveFile->fileSize))
        .add("checksumType", archiveFile->checksumType)
        .add("checksumValue", archiveFile->checksumValue)
diff --git a/catalogue/PostgresCatalogue.cpp b/catalogue/PostgresCatalogue.cpp
index c455afcad871664bec63a728819313f5f6b36b55..2a293f6e2ab113dd3547db218976785d125ae6c0 100644
--- a/catalogue/PostgresCatalogue.cpp
+++ b/catalogue/PostgresCatalogue.cpp
@@ -260,8 +260,7 @@ common::dataStructures::Tape PostgresCatalogue::selectTapeForUpdate(rdbms::Conn
 
     tape.comment = rset.columnString("USER_COMMENT");
 
-    common::dataStructures::UserIdentity creatorUI;
-    creatorUI.name = rset.columnString("CREATION_LOG_USER_NAME");
+    //std::string creatorUIname = rset.columnString("CREATION_LOG_USER_NAME");
 
     common::dataStructures::EntryLog creationLog;
     creationLog.username = rset.columnString("CREATION_LOG_USER_NAME");
@@ -270,8 +269,7 @@ common::dataStructures::Tape PostgresCatalogue::selectTapeForUpdate(rdbms::Conn
 
     tape.creationLog = creationLog;
 
-    common::dataStructures::UserIdentity updaterUI;
-    updaterUI.name = rset.columnString("LAST_UPDATE_USER_NAME");
+    //std::string updaterUIname = rset.columnString("LAST_UPDATE_USER_NAME");
 
     common::dataStructures::EntryLog updateLog;
     updateLog.username = rset.columnString("LAST_UPDATE_USER_NAME");
@@ -506,8 +504,8 @@ void PostgresCatalogue::idempotentBatchInsertArchiveFiles(rdbms::Conn &conn,
       archiveFileBatch.diskInstance.setFieldValue(i, event.diskInstance);
       archiveFileBatch.diskFileId.setFieldValue(i, event.diskFileId);
       archiveFileBatch.diskFilePath.setFieldValue(i, event.diskFilePath);
-      archiveFileBatch.diskFileUser.setFieldValue(i, event.diskFileUser);
-      archiveFileBatch.diskFileGroup.setFieldValue(i, event.diskFileGroup);
+      archiveFileBatch.diskFileUser.setFieldValue(i, event.diskFileOwnerUid);
+      archiveFileBatch.diskFileGroup.setFieldValue(i, event.diskFileGid);
       archiveFileBatch.size.setFieldValue(i, event.size);
       archiveFileBatch.checksumType.setFieldValue(i, event.checksumType);
       archiveFileBatch.checksumValue.setFieldValue(i, event.checksumValue);
@@ -756,8 +754,8 @@ void PostgresCatalogue::deleteArchiveFile(const std::string &diskInstanceName, c
         archiveFile->diskInstance = selectRset.columnString("DISK_INSTANCE_NAME");
         archiveFile->diskFileId = selectRset.columnString("DISK_FILE_ID");
         archiveFile->diskFileInfo.path = selectRset.columnString("DISK_FILE_PATH");
-        archiveFile->diskFileInfo.owner = selectRset.columnString("DISK_FILE_UID");
-        archiveFile->diskFileInfo.group = selectRset.columnString("DISK_FILE_GID");
+        archiveFile->diskFileInfo.owner_uid = selectRset.columnUint64("DISK_FILE_UID");
+        archiveFile->diskFileInfo.gid = selectRset.columnUint64("DISK_FILE_GID");
         archiveFile->fileSize = selectRset.columnUint64("SIZE_IN_BYTES");
         archiveFile->checksumType = selectRset.columnString("CHECKSUM_TYPE");
         archiveFile->checksumValue = selectRset.columnString("CHECKSUM_VALUE");
@@ -801,8 +799,8 @@ void PostgresCatalogue::deleteArchiveFile(const std::string &diskInstanceName, c
          .add("requestDiskInstance", diskInstanceName)
          .add("diskFileId", archiveFile->diskFileId)
          .add("diskFileInfo.path", archiveFile->diskFileInfo.path)
-         .add("diskFileInfo.owner", archiveFile->diskFileInfo.owner)
-         .add("diskFileInfo.group", archiveFile->diskFileInfo.group)
+         .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
+         .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
          .add("fileSize", std::to_string(archiveFile->fileSize))
          .add("checksumType", archiveFile->checksumType)
          .add("checksumValue", archiveFile->checksumValue)
@@ -865,8 +863,8 @@ void PostgresCatalogue::deleteArchiveFile(const std::string &diskInstanceName, c
        .add("diskInstance", archiveFile->diskInstance)
        .add("diskFileId", archiveFile->diskFileId)
        .add("diskFileInfo.path", archiveFile->diskFileInfo.path)
-       .add("diskFileInfo.owner", archiveFile->diskFileInfo.owner)
-       .add("diskFileInfo.group", archiveFile->diskFileInfo.group)
+       .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
+       .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
        .add("fileSize", std::to_string(archiveFile->fileSize))
        .add("checksumType", archiveFile->checksumType)
        .add("checksumValue", archiveFile->checksumValue)
diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp
index 3c8d5dab6a656274b678234090cf02caa69011bc..a1727e2b2805837cf7d149f9fe8e7f4e81baca63 100644
--- a/catalogue/RdbmsCatalogue.cpp
+++ b/catalogue/RdbmsCatalogue.cpp
@@ -774,7 +774,7 @@ bool RdbmsCatalogue::diskFilePathExists(rdbms::Conn &conn, const std::string &di
 // diskFileUserExists
 //------------------------------------------------------------------------------
 bool RdbmsCatalogue::diskFileUserExists(rdbms::Conn &conn, const std::string &diskInstanceName,
-  const std::string &diskFileUser) const {
+  uint32_t diskFileOwnerUid) const {
   try {
     const char *const sql =
       "SELECT "
@@ -787,7 +787,7 @@ bool RdbmsCatalogue::diskFileUserExists(rdbms::Conn &conn, const std::string &di
         "DISK_FILE_UID = :DISK_FILE_UID";
     auto stmt = conn.createStmt(sql);
     stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName);
-    stmt.bindString(":DISK_FILE_UID", diskFileUser);
+    stmt.bindUint64(":DISK_FILE_UID", diskFileOwnerUid);
     auto rset = stmt.executeQuery();
     return rset.next();
   } catch(exception::UserError &) {
@@ -802,7 +802,7 @@ bool RdbmsCatalogue::diskFileUserExists(rdbms::Conn &conn, const std::string &di
 // diskFileGroupExists
 //------------------------------------------------------------------------------
 bool RdbmsCatalogue::diskFileGroupExists(rdbms::Conn &conn, const std::string &diskInstanceName,
-  const std::string &diskFileGroup) const {
+  uint32_t diskFileGid) const {
   try {
     const char *const sql =
       "SELECT "
@@ -815,7 +815,7 @@ bool RdbmsCatalogue::diskFileGroupExists(rdbms::Conn &conn, const std::string &d
         "DISK_FILE_GID = :DISK_FILE_GID";
     auto stmt = conn.createStmt(sql);
     stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName);
-    stmt.bindString(":DISK_FILE_GID", diskFileGroup);
+    stmt.bindUint64(":DISK_FILE_GID", diskFileGid);
     auto rset = stmt.executeQuery();
     return rset.next();
   } catch(exception::UserError &) {
@@ -4247,8 +4247,8 @@ void RdbmsCatalogue::insertArchiveFile(rdbms::Conn &conn, const ArchiveFileRow &
     stmt.bindString(":DISK_INSTANCE_NAME", row.diskInstance);
     stmt.bindString(":DISK_FILE_ID", row.diskFileId);
     stmt.bindString(":DISK_FILE_PATH", row.diskFilePath);
-    stmt.bindString(":DISK_FILE_UID", row.diskFileUser);
-    stmt.bindString(":DISK_FILE_GID", row.diskFileGroup);
+    stmt.bindUint64(":DISK_FILE_UID", row.diskFileOwnerUid);
+    stmt.bindUint64(":DISK_FILE_GID", row.diskFileGid);
     stmt.bindUint64(":SIZE_IN_BYTES", row.size);
     stmt.bindString(":CHECKSUM_TYPE", row.checksumType);
     stmt.bindString(":CHECKSUM_VALUE", row.checksumValue);
@@ -4279,15 +4279,15 @@ void RdbmsCatalogue::checkTapeFileSearchCriteria(const TapeFileSearchCriteria &s
     }
   }
 
-  if(searchCriteria.diskFileGroup && !searchCriteria.diskInstance) {
-    throw exception::UserError(std::string("Disk file group ") + searchCriteria.diskFileGroup.value() + " is ambiguous "
-      "without disk instance name");
+  if(searchCriteria.diskFileGid && !searchCriteria.diskInstance) {
+    throw exception::UserError(std::string("Disk file group ") + std::to_string(searchCriteria.diskFileGid.value()) +
+      " is ambiguous without disk instance name");
   }
 
-  if(searchCriteria.diskInstance && searchCriteria.diskFileGroup) {
-    if(!diskFileGroupExists(conn, searchCriteria.diskInstance.value(), searchCriteria.diskFileGroup.value())) {
+  if(searchCriteria.diskInstance && searchCriteria.diskFileGid) {
+    if(!diskFileGroupExists(conn, searchCriteria.diskInstance.value(), searchCriteria.diskFileGid.value())) {
       throw exception::UserError(std::string("Disk file group ") + searchCriteria.diskInstance.value() + "::" +
-        searchCriteria.diskFileGroup.value() + " does not exist");
+        std::to_string(searchCriteria.diskFileGid.value()) + " does not exist");
     }
   }
 
@@ -4315,15 +4315,15 @@ void RdbmsCatalogue::checkTapeFileSearchCriteria(const TapeFileSearchCriteria &s
     }
   }
 
-  if(searchCriteria.diskFileUser && !searchCriteria.diskInstance) {
-    throw exception::UserError(std::string("Disk file user ") + searchCriteria.diskFileUser.value() + " is ambiguous "
-      "without disk instance name");
+  if(searchCriteria.diskFileOwnerUid && !searchCriteria.diskInstance) {
+    throw exception::UserError(std::string("Disk file user ") + std::to_string(searchCriteria.diskFileOwnerUid.value()) +
+      " is ambiguous without disk instance name");
   }
 
-  if(searchCriteria.diskInstance && searchCriteria.diskFileUser) {
-    if(!diskFileUserExists(conn, searchCriteria.diskInstance.value(), searchCriteria.diskFileUser.value())) {
+  if(searchCriteria.diskInstance && searchCriteria.diskFileOwnerUid) {
+    if(!diskFileUserExists(conn, searchCriteria.diskInstance.value(), searchCriteria.diskFileOwnerUid.value())) {
       throw exception::UserError(std::string("Disk file user ") + searchCriteria.diskInstance.value() + "::" +
-        searchCriteria.diskFileUser.value() + " does not exist");
+        std::to_string(searchCriteria.diskFileOwnerUid.value()) + " does not exist");
     }
   }
 
@@ -4429,8 +4429,8 @@ std::list<common::dataStructures::ArchiveFile> RdbmsCatalogue::getFilesForRepack
       archiveFile.diskInstance = rset.columnString("DISK_INSTANCE_NAME");
       archiveFile.diskFileId = rset.columnString("DISK_FILE_ID");
       archiveFile.diskFileInfo.path = rset.columnString("DISK_FILE_PATH");
-      archiveFile.diskFileInfo.owner = rset.columnString("DISK_FILE_UID");
-      archiveFile.diskFileInfo.group = rset.columnString("DISK_FILE_GID");
+      archiveFile.diskFileInfo.owner_uid = rset.columnUint64("DISK_FILE_UID");
+      archiveFile.diskFileInfo.gid = rset.columnUint64("DISK_FILE_GID");
       archiveFile.fileSize = rset.columnUint64("SIZE_IN_BYTES");
       archiveFile.checksumType = rset.columnString("CHECKSUM_TYPE");
       archiveFile.checksumValue = rset.columnString("CHECKSUM_VALUE");
@@ -4506,8 +4506,8 @@ common::dataStructures::ArchiveFileSummary RdbmsCatalogue::getTapeFileSummary(
       searchCriteria.diskInstance   ||
       searchCriteria.diskFileId     ||
       searchCriteria.diskFilePath   ||
-      searchCriteria.diskFileUser   ||
-      searchCriteria.diskFileGroup  ||
+      searchCriteria.diskFileOwnerUid   ||
+      searchCriteria.diskFileGid  ||
       searchCriteria.storageClass   ||
       searchCriteria.vid            ||
       searchCriteria.tapeFileCopyNb ||
@@ -4536,12 +4536,12 @@ common::dataStructures::ArchiveFileSummary RdbmsCatalogue::getTapeFileSummary(
       sql += "ARCHIVE_FILE.DISK_FILE_PATH = :DISK_FILE_PATH";
       addedAWhereConstraint = true;
     }
-    if(searchCriteria.diskFileUser) {
+    if(searchCriteria.diskFileOwnerUid) {
       if(addedAWhereConstraint) sql += " AND ";
       sql += "ARCHIVE_FILE.DISK_FILE_UID = :DISK_FILE_UID";
       addedAWhereConstraint = true;
     }
-    if(searchCriteria.diskFileGroup) {
+    if(searchCriteria.diskFileGid) {
       if(addedAWhereConstraint) sql += " AND ";
       sql += "ARCHIVE_FILE.DISK_FILE_GID = :DISK_FILE_GID";
       addedAWhereConstraint = true;
@@ -4580,11 +4580,11 @@ common::dataStructures::ArchiveFileSummary RdbmsCatalogue::getTapeFileSummary(
     if(searchCriteria.diskFilePath) {
       stmt.bindString(":DISK_FILE_PATH", searchCriteria.diskFilePath.value());
     }
-    if(searchCriteria.diskFileUser) {
-      stmt.bindString(":DISK_FILE_UID", searchCriteria.diskFileUser.value());
+    if(searchCriteria.diskFileOwnerUid) {
+      stmt.bindUint64(":DISK_FILE_UID", searchCriteria.diskFileOwnerUid.value());
     }
-    if(searchCriteria.diskFileGroup) {
-      stmt.bindString(":DISK_FILE_GID", searchCriteria.diskFileGroup.value());
+    if(searchCriteria.diskFileGid) {
+      stmt.bindUint64(":DISK_FILE_GID", searchCriteria.diskFileGid.value());
     }
     if(searchCriteria.storageClass) {
       stmt.bindString(":STORAGE_CLASS_NAME", searchCriteria.storageClass.value());
@@ -4673,7 +4673,7 @@ void RdbmsCatalogue::tapeLabelled(const std::string &vid, const std::string &dri
 // checkAndGetNextArchiveFileId
 //------------------------------------------------------------------------------
 uint64_t RdbmsCatalogue::checkAndGetNextArchiveFileId(const std::string &diskInstanceName,
-  const std::string &storageClassName, const common::dataStructures::UserIdentity &user) {
+  const std::string &storageClassName, const common::dataStructures::RequesterIdentity &user) {
   try {
     const auto storageClass = StorageClass(diskInstanceName, storageClassName);
     const auto copyToPoolMap = getCachedTapeCopyToPoolMap(storageClass);
@@ -4726,7 +4726,7 @@ uint64_t RdbmsCatalogue::checkAndGetNextArchiveFileId(const std::string &diskIns
 //------------------------------------------------------------------------------
 common::dataStructures::ArchiveFileQueueCriteria RdbmsCatalogue::getArchiveFileQueueCriteria(
   const std::string &diskInstanceName,
-  const std::string &storageClassName, const common::dataStructures::UserIdentity &user) {
+  const std::string &storageClassName, const common::dataStructures::RequesterIdentity &user) {
   try {
     const StorageClass storageClass = StorageClass(diskInstanceName, storageClassName);
     const common::dataStructures::TapeCopyToPoolMap copyToPoolMap = getCachedTapeCopyToPoolMap(storageClass);
@@ -4915,7 +4915,7 @@ void RdbmsCatalogue::updateTape(
 common::dataStructures::RetrieveFileQueueCriteria RdbmsCatalogue::prepareToRetrieveFile(
   const std::string &diskInstanceName,
   const uint64_t archiveFileId,
-  const common::dataStructures::UserIdentity &user,
+  const common::dataStructures::RequesterIdentity &user,
   const optional<std::string>& activity,
   log::LogContext &lc) {
   try {
@@ -5371,8 +5371,8 @@ std::unique_ptr<common::dataStructures::ArchiveFile> RdbmsCatalogue::getArchiveF
         archiveFile->diskInstance = rset.columnString("DISK_INSTANCE_NAME");
         archiveFile->diskFileId = rset.columnString("DISK_FILE_ID");
         archiveFile->diskFileInfo.path = rset.columnString("DISK_FILE_PATH");
-        archiveFile->diskFileInfo.owner = rset.columnString("DISK_FILE_UID");
-        archiveFile->diskFileInfo.group = rset.columnString("DISK_FILE_GID");
+        archiveFile->diskFileInfo.owner_uid = rset.columnUint64("DISK_FILE_UID");
+        archiveFile->diskFileInfo.gid = rset.columnUint64("DISK_FILE_GID");
         archiveFile->fileSize = rset.columnUint64("SIZE_IN_BYTES");
         archiveFile->checksumType = rset.columnString("CHECKSUM_TYPE");
         archiveFile->checksumValue = rset.columnString("CHECKSUM_VALUE");
@@ -5464,8 +5464,8 @@ std::unique_ptr<common::dataStructures::ArchiveFile> RdbmsCatalogue::getArchiveF
         archiveFile->diskInstance = rset.columnString("DISK_INSTANCE_NAME");
         archiveFile->diskFileId = rset.columnString("DISK_FILE_ID");
         archiveFile->diskFileInfo.path = rset.columnString("DISK_FILE_PATH");
-        archiveFile->diskFileInfo.owner = rset.columnString("DISK_FILE_UID");
-        archiveFile->diskFileInfo.group = rset.columnString("DISK_FILE_GID");
+        archiveFile->diskFileInfo.owner_uid = rset.columnUint64("DISK_FILE_UID");
+        archiveFile->diskFileInfo.gid = rset.columnUint64("DISK_FILE_GID");
         archiveFile->fileSize = rset.columnUint64("SIZE_IN_BYTES");
         archiveFile->checksumType = rset.columnString("CHECKSUM_TYPE");
         archiveFile->checksumValue = rset.columnString("CHECKSUM_VALUE");
@@ -5610,8 +5610,8 @@ std::unique_ptr<common::dataStructures::ArchiveFile> RdbmsCatalogue::getArchiveF
         archiveFile->diskInstance = rset.columnString("DISK_INSTANCE_NAME");
         archiveFile->diskFileId = rset.columnString("DISK_FILE_ID");
         archiveFile->diskFileInfo.path = rset.columnString("DISK_FILE_PATH");
-        archiveFile->diskFileInfo.owner = rset.columnString("DISK_FILE_UID");
-        archiveFile->diskFileInfo.group = rset.columnString("DISK_FILE_GID");
+        archiveFile->diskFileInfo.owner_uid = rset.columnUint64("DISK_FILE_UID");
+        archiveFile->diskFileInfo.gid = rset.columnUint64("DISK_FILE_GID");
         archiveFile->fileSize = rset.columnUint64("SIZE_IN_BYTES");
         archiveFile->checksumType = rset.columnString("CHECKSUM_TYPE");
         archiveFile->checksumValue = rset.columnString("CHECKSUM_VALUE");
@@ -5707,8 +5707,8 @@ std::unique_ptr<common::dataStructures::ArchiveFile> RdbmsCatalogue::getArchiveF
         archiveFile->diskInstance = rset.columnString("DISK_INSTANCE_NAME");
         archiveFile->diskFileId = rset.columnString("DISK_FILE_ID");
         archiveFile->diskFileInfo.path = rset.columnString("DISK_FILE_PATH");
-        archiveFile->diskFileInfo.owner = rset.columnString("DISK_FILE_UID");
-        archiveFile->diskFileInfo.group = rset.columnString("DISK_FILE_GID");
+        archiveFile->diskFileInfo.owner_uid = rset.columnUint64("DISK_FILE_UID");
+        archiveFile->diskFileInfo.gid = rset.columnUint64("DISK_FILE_GID");
         archiveFile->fileSize = rset.columnUint64("SIZE_IN_BYTES");
         archiveFile->checksumType = rset.columnString("CHECKSUM_TYPE");
         archiveFile->checksumValue = rset.columnString("CHECKSUM_VALUE");
@@ -5813,8 +5813,8 @@ void RdbmsCatalogue::checkTapeFileWrittenFieldsAreSet(const std::string &calling
     if(event.diskInstance.empty()) throw exception::Exception("diskInstance is an empty string");
     if(event.diskFileId.empty()) throw exception::Exception("diskFileId is an empty string");
     if(event.diskFilePath.empty()) throw exception::Exception("diskFilePath is an empty string");
-    if(event.diskFileUser.empty()) throw exception::Exception("diskFileUser is an empty string");
-    if(event.diskFileGroup.empty()) throw exception::Exception("diskFileGroup is an empty string");
+    if(0 == event.diskFileOwnerUid) throw exception::Exception("diskFileOwnerUid is 0");
+    if(0 == event.diskFileGid) throw exception::Exception("diskFileGid is 0");
     if(0 == event.size) throw exception::Exception("size is 0");
     if(event.checksumType.empty()) throw exception::Exception("checksumType is an empty string");
     if(event.checksumValue.empty()) throw exception::Exception("checksumValue is an empty string");
diff --git a/catalogue/RdbmsCatalogue.hpp b/catalogue/RdbmsCatalogue.hpp
index d6cdbfe7f960a7f22c9730040468bc01b71d0c1e..55b777211666b8f9fa91ea2a4b6dee919e9575d0 100644
--- a/catalogue/RdbmsCatalogue.hpp
+++ b/catalogue/RdbmsCatalogue.hpp
@@ -116,7 +116,7 @@ public:
   uint64_t checkAndGetNextArchiveFileId(
     const std::string &diskInstanceName,
     const std::string &storageClassName,
-    const common::dataStructures::UserIdentity &user) override;
+    const common::dataStructures::RequesterIdentity &user) override;
 
   /**
    * Returns the information required to queue an archive request.
@@ -135,7 +135,7 @@ public:
   common::dataStructures::ArchiveFileQueueCriteria getArchiveFileQueueCriteria(
     const std::string &diskInstanceName,
     const std::string &storageClassName,
-    const common::dataStructures::UserIdentity &user) override;
+    const common::dataStructures::RequesterIdentity &user) override;
 
   /**
    * Returns the list of tapes that can be written to by a tape drive in the
@@ -179,7 +179,7 @@ public:
   common::dataStructures::RetrieveFileQueueCriteria prepareToRetrieveFile(
     const std::string &diskInstanceName,
     const uint64_t archiveFileId,
-    const common::dataStructures::UserIdentity &user,
+    const common::dataStructures::RequesterIdentity &user,
     const optional<std::string> & activity,
     log::LogContext &lc) override;
 
@@ -703,26 +703,22 @@ protected:
   /**
    * Returns true if the specified disk file user exists.
    *
-   * @param conn The database connection.
-   * @param diskInstanceName The name of the disk instance to which the disk
-   * file user belongs.
-   * @param diskFileUSer The name of the disk file user.
-   * @return True if the disk file user exists.
+   * @param conn              The database connection.
+   * @param diskInstanceName  The name of the disk instance to which the disk file user belongs.
+   * @param diskFileOwnerUid  The user ID of the disk file owner.
+   * @return                  True if the disk file user exists.
    */
-  bool diskFileUserExists(rdbms::Conn &conn, const std::string &diskInstanceName, const std::string &diskFileUser)
-    const;
+  bool diskFileUserExists(rdbms::Conn &conn, const std::string &diskInstanceName, uint32_t diskFileOwnerUid) const;
 
   /**
    * Returns true if the specified disk file group exists.
    *
-   * @param conn The database connection.
-   * @param diskInstanceName The name of the disk instance to which the disk
-   * file group belongs.
-   * @param diskFileGroup The name of the disk file group.
-   * @return True if the disk file group exists.
+   * @param conn              The database connection.
+   * @param diskInstanceName  The name of the disk instance to which the disk file group belongs.
+   * @param diskFileGid       The group ID of the disk file.
+   * @return                  True if the disk file group exists.
    */
-  bool diskFileGroupExists(rdbms::Conn &conn, const std::string &diskInstanceName, const std::string &diskFileGroup)
-    const;
+  bool diskFileGroupExists(rdbms::Conn &conn, const std::string &diskInstanceName, uint32_t diskFileGid) const;
 
   /**
    * Returns true if the specified archive route exists.
diff --git a/catalogue/RdbmsCatalogueGetArchiveFilesForRepackItor.cpp b/catalogue/RdbmsCatalogueGetArchiveFilesForRepackItor.cpp
index 1d0ebaaacb40a56788960fdad29bf63186cf03a2..9d4441042a3745feebb270f7217a911acedd0ee9 100644
--- a/catalogue/RdbmsCatalogueGetArchiveFilesForRepackItor.cpp
+++ b/catalogue/RdbmsCatalogueGetArchiveFilesForRepackItor.cpp
@@ -44,8 +44,8 @@ namespace {
     archiveFile.diskInstance = rset.columnString("DISK_INSTANCE_NAME");
     archiveFile.diskFileId = rset.columnString("DISK_FILE_ID");
     archiveFile.diskFileInfo.path = rset.columnString("DISK_FILE_PATH");
-    archiveFile.diskFileInfo.owner = rset.columnString("DISK_FILE_UID");
-    archiveFile.diskFileInfo.group = rset.columnString("DISK_FILE_GID");
+    archiveFile.diskFileInfo.owner_uid = rset.columnUint64("DISK_FILE_UID");
+    archiveFile.diskFileInfo.gid = rset.columnUint64("DISK_FILE_GID");
     archiveFile.fileSize = rset.columnUint64("SIZE_IN_BYTES");
     archiveFile.checksumType = rset.columnString("CHECKSUM_TYPE");
     archiveFile.checksumValue = rset.columnString("CHECKSUM_VALUE");
diff --git a/catalogue/RdbmsCatalogueGetArchiveFilesItor.cpp b/catalogue/RdbmsCatalogueGetArchiveFilesItor.cpp
index fce3667a78aa27976a1ed0cf86bd1e87f8abb46e..ff6cb76a0be5087b7e8f4abc23f34f1d77dcc4a1 100644
--- a/catalogue/RdbmsCatalogueGetArchiveFilesItor.cpp
+++ b/catalogue/RdbmsCatalogueGetArchiveFilesItor.cpp
@@ -44,8 +44,8 @@ namespace {
     archiveFile.diskInstance = rset.columnString("DISK_INSTANCE_NAME");
     archiveFile.diskFileId = rset.columnString("DISK_FILE_ID");
     archiveFile.diskFileInfo.path = rset.columnString("DISK_FILE_PATH");
-    archiveFile.diskFileInfo.owner = rset.columnString("DISK_FILE_UID");
-    archiveFile.diskFileInfo.group = rset.columnString("DISK_FILE_GID");
+    archiveFile.diskFileInfo.owner_uid = rset.columnUint64("DISK_FILE_UID");
+    archiveFile.diskFileInfo.gid = rset.columnUint64("DISK_FILE_GID");
     archiveFile.fileSize = rset.columnUint64("SIZE_IN_BYTES");
     archiveFile.checksumType = rset.columnString("CHECKSUM_TYPE");
     archiveFile.checksumValue = rset.columnString("CHECKSUM_VALUE");
@@ -126,8 +126,8 @@ RdbmsCatalogueGetArchiveFilesItor::RdbmsCatalogueGetArchiveFilesItor(
       searchCriteria.diskInstance   ||
       searchCriteria.diskFileId     ||
       searchCriteria.diskFilePath   ||
-      searchCriteria.diskFileUser   ||
-      searchCriteria.diskFileGroup  ||
+      searchCriteria.diskFileOwnerUid   ||
+      searchCriteria.diskFileGid  ||
       searchCriteria.storageClass   ||
       searchCriteria.vid            ||
       searchCriteria.tapeFileCopyNb ||
@@ -158,12 +158,12 @@ RdbmsCatalogueGetArchiveFilesItor::RdbmsCatalogueGetArchiveFilesItor(
       sql += "ARCHIVE_FILE.DISK_FILE_PATH = :DISK_FILE_PATH";
       addedAWhereConstraint = true;
     }
-    if(searchCriteria.diskFileUser) {
+    if(searchCriteria.diskFileOwnerUid) {
       if(addedAWhereConstraint) sql += " AND ";
       sql += "ARCHIVE_FILE.DISK_FILE_UID = :DISK_FILE_UID";
       addedAWhereConstraint = true;
     }
-    if(searchCriteria.diskFileGroup) {
+    if(searchCriteria.diskFileGid) {
       if(addedAWhereConstraint) sql += " AND ";
       sql += "ARCHIVE_FILE.DISK_FILE_GID = :DISK_FILE_GID";
       addedAWhereConstraint = true;
@@ -210,11 +210,11 @@ RdbmsCatalogueGetArchiveFilesItor::RdbmsCatalogueGetArchiveFilesItor(
     if(searchCriteria.diskFilePath) {
       m_stmt.bindString(":DISK_FILE_PATH", searchCriteria.diskFilePath.value());
     }
-    if(searchCriteria.diskFileUser) {
-      m_stmt.bindString(":DISK_FILE_UID", searchCriteria.diskFileUser.value());
+    if(searchCriteria.diskFileOwnerUid) {
+      m_stmt.bindUint64(":DISK_FILE_UID", searchCriteria.diskFileOwnerUid.value());
     }
-    if(searchCriteria.diskFileGroup) {
-      m_stmt.bindString(":DISK_FILE_GID", searchCriteria.diskFileGroup.value());
+    if(searchCriteria.diskFileGid) {
+      m_stmt.bindUint64(":DISK_FILE_GID", searchCriteria.diskFileGid.value());
     }
     if(searchCriteria.storageClass) {
       m_stmt.bindString(":STORAGE_CLASS_NAME", searchCriteria.storageClass.value());
diff --git a/catalogue/SqliteCatalogue.cpp b/catalogue/SqliteCatalogue.cpp
index 83554b9d75cdbc0a4cb19649d7e0bdfc9e73dfb5..fefed7f25a3fa91983790572cde40628f1628f30 100644
--- a/catalogue/SqliteCatalogue.cpp
+++ b/catalogue/SqliteCatalogue.cpp
@@ -84,8 +84,8 @@ void SqliteCatalogue::deleteArchiveFile(const std::string &diskInstanceName, con
          .add("requestDiskInstance", diskInstanceName)
          .add("diskFileId", archiveFile->diskFileId)
          .add("diskFileInfo.path", archiveFile->diskFileInfo.path)
-         .add("diskFileInfo.owner", archiveFile->diskFileInfo.owner)
-         .add("diskFileInfo.group", archiveFile->diskFileInfo.group)
+         .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
+         .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
          .add("fileSize", std::to_string(archiveFile->fileSize))
          .add("checksumType", archiveFile->checksumType)
          .add("checksumValue", archiveFile->checksumValue)
@@ -150,8 +150,8 @@ void SqliteCatalogue::deleteArchiveFile(const std::string &diskInstanceName, con
        .add("diskInstance", archiveFile->diskInstance)
        .add("diskFileId", archiveFile->diskFileId)
        .add("diskFileInfo.path", archiveFile->diskFileInfo.path)
-       .add("diskFileInfo.owner", archiveFile->diskFileInfo.owner)
-       .add("diskFileInfo.group", archiveFile->diskFileInfo.group)
+       .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
+       .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
        .add("fileSize", std::to_string(archiveFile->fileSize))
        .add("checksumType", archiveFile->checksumType)
        .add("checksumValue", archiveFile->checksumValue)
@@ -312,7 +312,7 @@ common::dataStructures::Tape SqliteCatalogue::selectTape(rdbms::Conn &conn, cons
 
     tape.comment = rset.columnString("USER_COMMENT");
 
-    common::dataStructures::UserIdentity creatorUI;
+    common::dataStructures::RequesterIdentity creatorUI;
     creatorUI.name = rset.columnString("CREATION_LOG_USER_NAME");
 
     common::dataStructures::EntryLog creationLog;
@@ -322,7 +322,7 @@ common::dataStructures::Tape SqliteCatalogue::selectTape(rdbms::Conn &conn, cons
 
     tape.creationLog = creationLog;
 
-    common::dataStructures::UserIdentity updaterUI;
+    common::dataStructures::RequesterIdentity updaterUI;
     updaterUI.name = rset.columnString("LAST_UPDATE_USER_NAME");
 
     common::dataStructures::EntryLog updateLog;
@@ -430,8 +430,8 @@ void SqliteCatalogue::fileWrittenToTape(rdbms::Conn &conn, const TapeFileWritten
       row.checksumValue = event.checksumValue;
       row.storageClassName = event.storageClassName;
       row.diskFilePath = event.diskFilePath;
-      row.diskFileUser = event.diskFileUser;
-      row.diskFileGroup = event.diskFileGroup;
+      row.diskFileOwnerUid = event.diskFileOwnerUid;
+      row.diskFileGid = event.diskFileGid;
       insertArchiveFile(conn, row);
     } catch(exception::DatabasePrimaryKeyError &) {
       // Ignore this error
diff --git a/catalogue/TapeFileSearchCriteria.hpp b/catalogue/TapeFileSearchCriteria.hpp
index b85eb9da03436ae5e12ead7033acc809c7ef6dcf..4ac9f622247f589e7907f3274cc66dfef47bfb9f 100644
--- a/catalogue/TapeFileSearchCriteria.hpp
+++ b/catalogue/TapeFileSearchCriteria.hpp
@@ -62,12 +62,12 @@ struct TapeFileSearchCriteria {
   /**
    * The owner of a file within its disk instance.
    */
-  optional<std::string> diskFileUser;
+  optional<uint64_t> diskFileOwnerUid;
 
   /**
    * The group of a file within its disk instance.
    */
-  optional<std::string> diskFileGroup;
+  optional<uint64_t> diskFileGid;
 
   /**
    * The storage class name of the file.
diff --git a/catalogue/TapeFileWritten.cpp b/catalogue/TapeFileWritten.cpp
index 3f24656b603cf13e602ab05d2b69bf7e2f028042..675b2f614433fe80a0fc46c8e1840e3f2777013c 100644
--- a/catalogue/TapeFileWritten.cpp
+++ b/catalogue/TapeFileWritten.cpp
@@ -26,6 +26,8 @@ namespace catalogue {
 //------------------------------------------------------------------------------
 TapeFileWritten::TapeFileWritten() :
   archiveFileId(0),
+  diskFileOwnerUid(0),
+  diskFileGid(0),
   size(0),
   blockId(0),
   copyNb(0) {
@@ -41,8 +43,8 @@ bool TapeFileWritten::operator==(const TapeFileWritten &rhs) const {
     diskInstance == rhs.diskInstance &&
     diskFileId == rhs.diskFileId &&
     diskFilePath == rhs.diskFilePath &&
-    diskFileUser == rhs.diskFileUser &&
-    diskFileGroup == rhs.diskFileGroup &&
+    diskFileOwnerUid == rhs.diskFileOwnerUid &&
+    diskFileGid == rhs.diskFileGid &&
     size == rhs.size &&
     checksumType == rhs.checksumType &&
     checksumValue == rhs.checksumValue &&
@@ -62,8 +64,8 @@ std::ostream &operator<<(std::ostream &os, const TapeFileWritten &obj) {
   "diskInstance=" << obj.diskInstance << ","
   "diskFileId=" << obj.diskFileId << ","
   "diskFilePath=" << obj.diskFilePath << ","
-  "diskFileUser=" << obj.diskFileUser << ","
-  "diskFileGroup=" << obj.diskFileGroup << ","
+  "diskFileOwnerUid=" << obj.diskFileOwnerUid << ","
+  "diskFileGid=" << obj.diskFileGid << ","
   "size=" << obj.size << ","
   "checksumType=" << obj.checksumType << "checksumValue=" << obj.checksumValue << ","
   "storageClassName=" << obj.storageClassName << ","
diff --git a/catalogue/TapeFileWritten.hpp b/catalogue/TapeFileWritten.hpp
index 722be7b702c794a19d4ca4667f4d580cfa3e2473..e007157f7d2625f8d3e05866c77901a0dc7638f7 100644
--- a/catalogue/TapeFileWritten.hpp
+++ b/catalogue/TapeFileWritten.hpp
@@ -71,12 +71,12 @@ struct TapeFileWritten: public TapeItemWritten {
   /**
    * The user name of the source disk file within its host disk system.
    */
-  std::string diskFileUser;
+  uint32_t diskFileOwnerUid;
 
   /**
    * The group name of the source disk file within its host disk system.
    */
-  std::string diskFileGroup;
+  uint32_t diskFileGid;
 
   /**
    * The uncompressed size of the tape file in bytes.
diff --git a/cmdline/CtaAdminCmdParse.hpp b/cmdline/CtaAdminCmdParse.hpp
index 5e4c146d70cbf4f238c9d3b0f808e6b8e9d2c8be..53a183179c742fd5ecb2c076a23d39cb3f928ff2 100644
--- a/cmdline/CtaAdminCmdParse.hpp
+++ b/cmdline/CtaAdminCmdParse.hpp
@@ -266,6 +266,7 @@ const std::map<std::string, OptionUInt64::Key> uint64Options = {
    { "--capacity",              OptionUInt64::CAPACITY },
    { "--copynb",                OptionUInt64::COPY_NUMBER },
    { "--firstfseq",             OptionUInt64::FIRST_FSEQ },
+   { "--gid",                   OptionUInt64::GID },
    { "--id",                    OptionUInt64::ARCHIVE_FILE_ID },
    { "--lastfseq",              OptionUInt64::LAST_FSEQ },
    { "--maxdrivesallowed",      OptionUInt64::MAX_DRIVES_ALLOWED },
@@ -275,7 +276,8 @@ const std::map<std::string, OptionUInt64::Key> uint64Options = {
    { "--partial",               OptionUInt64::PARTIAL }, 
    { "--partialtapesnumber",    OptionUInt64::PARTIAL_TAPES_NUMBER },
    { "--retrievepriority",      OptionUInt64::RETRIEVE_PRIORITY },
-   { "--size",                  OptionUInt64::FILE_SIZE }                  
+   { "--size",                  OptionUInt64::FILE_SIZE },
+   { "--uid",                   OptionUInt64::OWNER_UID }
 };
 
 
@@ -290,7 +292,6 @@ const std::map<std::string, OptionString::Key> strOptions = {
    { "--drive",                 OptionString::DRIVE },
    { "--encryptionkey",         OptionString::ENCRYPTION_KEY },
    { "--file",                  OptionString::FILENAME },
-   { "--group",                 OptionString::GROUP },
    { "--hostname",              OptionString::HOSTNAME },
    { "--input",                 OptionString::INPUT },
    { "--instance",              OptionString::INSTANCE },
@@ -298,7 +299,6 @@ const std::map<std::string, OptionString::Key> strOptions = {
    { "--mediatype",             OptionString::MEDIA_TYPE },
    { "--mountpolicy",           OptionString::MOUNT_POLICY },
    { "--output",                OptionString::OUTPUT },
-   { "--owner",                 OptionString::OWNER },
    { "--path",                  OptionString::PATH },
    { "--storageclass",          OptionString::STORAGE_CLASS },
    { "--supply",                OptionString::SUPPLY },
@@ -371,7 +371,7 @@ const Option opt_filename             { Option::OPT_STR,  "--file",
 const Option opt_firstfseq            { Option::OPT_UINT, "--firstfseq",             "-f",   " <first_fseq>" };
 const Option opt_force                { Option::OPT_BOOL, "--force",                 "-f",   " <\"true\" or \"false\">" };
 const Option opt_force_flag           { Option::OPT_FLAG, "--force",                 "-f",   "" };
-const Option opt_group                { Option::OPT_STR,  "--group",                 "-g",   " <group>" };
+const Option opt_gid                  { Option::OPT_UINT, "--gid",                   "-g",   " <group_id>" };
 const Option opt_hostname_alias       { Option::OPT_STR,  "--name",                  "-n",   " <host_name>",
                                         "--hostname" };
 const Option opt_input                { Option::OPT_STR,  "--input",                 "-i",   " <\"zero\" or \"urandom\">" };
@@ -396,7 +396,7 @@ const Option opt_number_of_files      { Option::OPT_UINT, "--nbfiles",
 const Option opt_number_of_files_alias{ Option::OPT_UINT, "--number",                "-n",   " <number_of_files>",
                                         "--nbfiles" };
 const Option opt_output               { Option::OPT_STR,  "--output",                "-o",   " <\"null\" or output_dir>" };
-const Option opt_owner                { Option::OPT_STR,  "--owner",                 "-o",   " <owner>" };
+const Option opt_owner_uid            { Option::OPT_UINT, "--uid",                   "-u",   " <owner_uid>" };
 const Option opt_partialfiles         { Option::OPT_UINT, "--partial",               "-p",   " <number_of_files_per_tape>" };
 const Option opt_partialtapes         { Option::OPT_UINT, "--partialtapesnumber",    "-p",   " <number_of_partial_tapes>" };
 const Option opt_path                 { Option::OPT_STR,  "--path",                  "-p",   " <full_path>" };
@@ -432,7 +432,7 @@ const std::map<cmd_key_t, cmd_val_t> cmdOptions = {
    /*----------------------------------------------------------------------------------------------------*/
    {{ AdminCmd::CMD_ARCHIVEFILE,          AdminCmd::SUBCMD_LS    },
       { opt_archivefileid.optional(), opt_diskid.optional(), opt_copynb.optional(),
-        opt_vid.optional(), opt_tapepool.optional(), opt_owner.optional(), opt_group.optional(),
+        opt_vid.optional(), opt_tapepool.optional(), opt_owner_uid.optional(), opt_gid.optional(),
         opt_storageclass.optional(), opt_path.optional(), opt_instance.optional(), opt_all.optional(),
         opt_summary.optional() }},
    /*----------------------------------------------------------------------------------------------------*/
diff --git a/cmdline/EosCtaStub.cpp b/cmdline/EosCtaStub.cpp
index e53d4c16ca997085c820f47f55090f3c568a7379..94538506a34777e69f2de0fb50976cf14f963b15 100644
--- a/cmdline/EosCtaStub.cpp
+++ b/cmdline/EosCtaStub.cpp
@@ -217,8 +217,8 @@ void fillNotification(cta::eos::Notification &notification, int argc, const char
       else if(argstr == "--dsturl")              notification.mutable_transport()->set_dst_url(argval); // for retrieve WF
 
       else if(argstr == "--diskid")              notification.mutable_file()->set_fid(std::stoi(argval));
-      else if(argstr == "--diskfileowner")       notification.mutable_file()->mutable_owner()->set_username(argval);
-      else if(argstr == "--diskfilegroup")       notification.mutable_file()->mutable_owner()->set_groupname(argval);
+      else if(argstr == "--diskfileowner")       notification.mutable_file()->mutable_owner()->set_uid(std::stoi(argval));
+      else if(argstr == "--diskfilegroup")       notification.mutable_file()->mutable_owner()->set_gid(std::stoi(argval));
       else if(argstr == "--size")                notification.mutable_file()->set_size(std::stoi(argval));
       else if(argstr == "--checksumtype")        notification.mutable_file()->mutable_cks()->set_type(argval);
       else if(argstr == "--checksumvalue")       notification.mutable_file()->mutable_cks()->set_value(argval);
@@ -231,13 +231,6 @@ void fillNotification(cta::eos::Notification &notification, int argc, const char
          google::protobuf::MapPair<std::string,std::string> id("CTA_ArchiveFileId", argval);
          notification.mutable_file()->mutable_xattr()->insert(id);
       }
-      else if(argstr == "--diskpool")            {} // = default?
-      else if(argstr == "--throughput")          {} // = 10000?
-      else if(argstr == "--recoveryblob:base64") try {
-         base64Decode(notification, argval);
-      } catch(...) {
-         throw std::runtime_error("Invalid recovery blob: " + argval);
-      }
       else throw std::runtime_error("Unrecognised key " + argstr);
    }
 }
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index 5c0965ce33438e166a913155209838590cc863b8..cfe8958700bb3b788c2a4e517c29b538e08879ee 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -50,10 +50,12 @@ set (COMMON_LIB_SRC_FILES
   dataStructures/LogicalLibrary.cpp
   dataStructures/MountType.cpp
   dataStructures/MountPolicy.cpp
+  dataStructures/OwnerIdentity.cpp
   dataStructures/QueueAndMountSummary.cpp
   dataStructures/ReadTestResult.cpp
   dataStructures/RepackInfo.cpp
   dataStructures/RequesterGroupMountRule.cpp
+  dataStructures/RequesterIdentity.cpp
   dataStructures/RequesterMountRule.cpp
   dataStructures/RetrieveFileQueueCriteria.cpp
   dataStructures/RetrieveJob.cpp
@@ -66,7 +68,7 @@ set (COMMON_LIB_SRC_FILES
   dataStructures/TestSourceType.cpp
   dataStructures/UpdateFileInfoRequest.cpp
   dataStructures/UpdateFileStorageClassRequest.cpp
-  dataStructures/UserIdentity.cpp
+  dataStructures/VerifyInfo.cpp
   dataStructures/WriteTestResult.cpp
   dataStructures/utils.cpp
   checksum/Checksum.cpp
@@ -143,7 +145,6 @@ set (COMMON_LIB_SRC_FILES
   ConfigurationFile.cpp
   SourcedParameter.cpp   
   Timer.cpp
-  UserIdentity.cpp
   optional.cpp)
 
 add_library (ctacommon SHARED
@@ -193,7 +194,6 @@ set (COMMON_UNIT_TESTS_LIB_SRC_FILES
   utils/GetOptThreadSafeTest.cpp
   utils/RegexTest.cpp
   utils/UtilsTest.cpp
-  UserIdentityTest.cpp
   optionalTest.cpp
   rangeTest.cpp)
 
diff --git a/common/CreationLog.cpp b/common/CreationLog.cpp
index e905ad54f292455475903ad327f675cfb7f08df2..823e1788835a341990b0deb4376ac4d9032fc024 100644
--- a/common/CreationLog.cpp
+++ b/common/CreationLog.cpp
@@ -30,6 +30,6 @@ cta::CreationLog::CreationLog():
 // constructor
 //------------------------------------------------------------------------------
 
-cta::CreationLog::CreationLog(const UserIdentity& user, 
+cta::CreationLog::CreationLog(const cta::common::dataStructures::OwnerIdentity& user, 
     const std::string& host, const time_t time, const std::string& comment):
   user(user), host(host), time(time), comment(comment) {}
diff --git a/common/CreationLog.hpp b/common/CreationLog.hpp
index 3f4c5e94c397ae6afb1c2d777aa3e88acedb14f9..f2ce28999e9ca7d677d6257c14f16113bb22d830 100644
--- a/common/CreationLog.hpp
+++ b/common/CreationLog.hpp
@@ -18,10 +18,10 @@
 
 #pragma once
 
-#include "common/UserIdentity.hpp"
-
 #include <string>
 
+#include "common/dataStructures/OwnerIdentity.hpp"
+
 namespace cta {
 
 /**
@@ -38,13 +38,13 @@ struct CreationLog {
   /**
    * Constructor.
    */
-  CreationLog(const UserIdentity &user, const std::string &host,
+  CreationLog(const common::dataStructures::OwnerIdentity &user, const std::string &host,
     const time_t time,  const std::string & comment = "");
 
   /**
    * The identity of the creator.
    */
-  UserIdentity user;
+  common::dataStructures::OwnerIdentity user;
 
   /**
    * The network name of the host from which they are submitting a request.
diff --git a/common/UserIdentity.hpp b/common/UserIdentity.hpp
deleted file mode 100644
index fae4e09de3a46dd72128827202349f4251c7c9ce..0000000000000000000000000000000000000000
--- a/common/UserIdentity.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The CERN Tape Archive (CTA) project
- * Copyright (C) 2015  CERN
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include <ostream>
-#include <stdint.h>
-#include <string>
-
-namespace cta {
-
-/**
- * Class representing the identity of a user.
- */
-struct UserIdentity {
-
-  /**
-   * Constructor.
-   *
-   * Initialises all integer member-variables to non-valid values (max int).
-   */
-  UserIdentity() throw();
-
-  /**
-   * Constructor.
-   *
-   * @param uid The user ID of the user.
-   * @param gid The group ID of the user.
-   */
-  UserIdentity(const uint32_t uid, const uint32_t gid) throw();
-
-  /** 
-   * Returns true if the specified right-hand side is equal to this object.
-   *
-   * @param rhs The object on the right-hand side of the == operator.
-   * @return True if the specified right-hand side is equal to this object.
-   */
-  bool operator==(const UserIdentity &rhs) const;
-
-  /**
-   * Returns true if the specified right-hand side is not euqal to this object.
-   *
-   * @param rhs The object on the right-hand side of the != operator.
-   * @return True if the specified right-hand side is not equal to this object.
-   */
-  bool operator!=(const UserIdentity &rhs) const;
-
-  /**
-   * The user ID of the user.
-   */
-  uint32_t uid;
-
-  /**
-   * The group ID of the user.
-   */
-  uint32_t gid;
-
-
-}; // class UserIdentity
-
-} // namespace cta
-
-/**
- * Output stream operator for the cta::UserIdentity class.
- */
-std::ostream &operator<<(std::ostream &os, const cta::UserIdentity &obj);
diff --git a/common/UserIdentityTest.cpp b/common/UserIdentityTest.cpp
deleted file mode 100644
index a7dec0a0740896b28083eefbf391f08e9c15d8c9..0000000000000000000000000000000000000000
--- a/common/UserIdentityTest.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The CERN Tape Archive (CTA) project
- * Copyright (C) 2015  CERN
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "common/UserIdentity.hpp"
-
-#include <gtest/gtest.h>
-
-namespace unitTests {
-
-class cta_UserIdentityTest: public ::testing::Test {
-protected:
-
-  virtual void SetUp() {
-  }
-
-  virtual void TearDown() {
-  }
-};
-
-TEST_F(cta_UserIdentityTest, equals_operator) {
-  using namespace cta;
-
-  const uint16_t uid1 = 1111;
-  const uint16_t uid2 = 2222;
-  const uint16_t gid1 = 3333;
-  const uint16_t gid2 = 4444;
-
-  const UserIdentity                        user(uid1, gid1);
-  const UserIdentity            sameUserAndGroup(uid1, gid1);
-  const UserIdentity     sameUserDifferrentGroup(uid1, gid2);
-  const UserIdentity      differentUserSameGroup(uid2, gid1);
-  const UserIdentity differentUserDifferentGroup(uid2, gid2);
-
-  ASSERT_TRUE(user == user);
-  ASSERT_TRUE(user == sameUserAndGroup);
-  ASSERT_TRUE(user == sameUserDifferrentGroup);
-  ASSERT_FALSE(user == differentUserSameGroup);
-  ASSERT_FALSE(user == differentUserDifferentGroup);
-}
-
-TEST_F(cta_UserIdentityTest, not_equals_operator) {
-  using namespace cta;
-  
-  const uint16_t uid1 = 1111;
-  const uint16_t uid2 = 2222;
-  const uint16_t gid1 = 3333;
-  const uint16_t gid2 = 4444;
-
-  const UserIdentity                        user(uid1, gid1);
-  const UserIdentity            sameUserAndGroup(uid1, gid1);
-  const UserIdentity     sameUserDifferrentGroup(uid1, gid2);
-  const UserIdentity      differentUserSameGroup(uid2, gid1);
-  const UserIdentity differentUserDifferentGroup(uid2, gid2);
-
-  ASSERT_FALSE(user != user);
-  ASSERT_FALSE(user != sameUserAndGroup);
-  ASSERT_FALSE(user != sameUserDifferrentGroup);
-  ASSERT_TRUE(user != differentUserSameGroup);
-  ASSERT_TRUE(user != differentUserDifferentGroup);
-}
-
-} // namespace unitTests
diff --git a/common/dataStructures/ArchiveFileTest.cpp b/common/dataStructures/ArchiveFileTest.cpp
index 0053b5d8d2d51e9f44191989bcd38f2bb25603e2..734fe529d1f6aa2792785818a6f08ecda82f1d76 100644
--- a/common/dataStructures/ArchiveFileTest.cpp
+++ b/common/dataStructures/ArchiveFileTest.cpp
@@ -23,6 +23,9 @@
 
 namespace unitTests {
 
+const uint32_t RECOVERY_OWNER_UID = 9751;
+const uint32_t RECOVERY_GID       = 9752;
+
 class cta_common_dataStructures_ArchiveFileTest : public ::testing::Test {
 protected:
 
@@ -47,8 +50,8 @@ TEST_F(cta_common_dataStructures_ArchiveFileTest, copy_constructor) {
 
   archiveFile1.diskInstance = "recovery_instance";
   archiveFile1.diskFileInfo.path = "recovery_path";
-  archiveFile1.diskFileInfo.owner = "recovery_owner";
-  archiveFile1.diskFileInfo.group = "recovery_group";
+  archiveFile1.diskFileInfo.owner_uid = RECOVERY_OWNER_UID;
+  archiveFile1.diskFileInfo.gid = RECOVERY_GID;
 
   TapeFile tapeFile1;
   tapeFile1.vid = "VID1";
@@ -83,8 +86,8 @@ TEST_F(cta_common_dataStructures_ArchiveFileTest, copy_constructor) {
 
   ASSERT_EQ(archiveFile1.diskInstance, archiveFile2.diskInstance);
   ASSERT_EQ(archiveFile1.diskFileInfo.path, archiveFile2.diskFileInfo.path);
-  ASSERT_EQ(archiveFile1.diskFileInfo.owner, archiveFile2.diskFileInfo.owner);
-  ASSERT_EQ(archiveFile1.diskFileInfo.group, archiveFile2.diskFileInfo.group);
+  ASSERT_EQ(archiveFile1.diskFileInfo.owner_uid, archiveFile2.diskFileInfo.owner_uid);
+  ASSERT_EQ(archiveFile1.diskFileInfo.gid, archiveFile2.diskFileInfo.gid);
 
   ASSERT_EQ(2, archiveFile2.tapeFiles.size());
 
diff --git a/common/dataStructures/ArchiveRequest.hpp b/common/dataStructures/ArchiveRequest.hpp
index a2dbadb73e43c0ac07807a7fffb68004fd49a29f..cebefbf89809fe634875ce90ada03c3797d7985d 100644
--- a/common/dataStructures/ArchiveRequest.hpp
+++ b/common/dataStructures/ArchiveRequest.hpp
@@ -20,7 +20,7 @@
 
 #include "common/dataStructures/DiskFileInfo.hpp"
 #include "common/dataStructures/EntryLog.hpp"
-#include "common/dataStructures/UserIdentity.hpp"
+#include "common/dataStructures/RequesterIdentity.hpp"
 
 #include <list>
 #include <map>
@@ -42,7 +42,7 @@ struct ArchiveRequest {
 
   bool operator!=(const ArchiveRequest &rhs) const;
 
-  UserIdentity requester;
+  RequesterIdentity requester;
   std::string diskFileID;
 
   std::string srcURL;
diff --git a/common/dataStructures/CancelRetrieveRequest.hpp b/common/dataStructures/CancelRetrieveRequest.hpp
index 1721fbf7ca4ffb3b81ae34efee31c25b89523b8a..02af7c07fd1f1ab14c9809fc537b7e783f3d5d3b 100644
--- a/common/dataStructures/CancelRetrieveRequest.hpp
+++ b/common/dataStructures/CancelRetrieveRequest.hpp
@@ -24,7 +24,7 @@
 #include <string>
 
 #include "common/dataStructures/DiskFileInfo.hpp"
-#include "common/dataStructures/UserIdentity.hpp"
+#include "common/dataStructures/RequesterIdentity.hpp"
 
 namespace cta {
 namespace common {
@@ -41,7 +41,7 @@ struct CancelRetrieveRequest {
 
   bool operator!=(const CancelRetrieveRequest &rhs) const;
 
-  UserIdentity requester;
+  RequesterIdentity requester;
   uint64_t archiveFileID;
   std::string dstURL;
   DiskFileInfo diskFileInfo;
diff --git a/common/dataStructures/DeleteArchiveRequest.hpp b/common/dataStructures/DeleteArchiveRequest.hpp
index fd0730d20c41338059904a169a10fd592e0b8d29..949222a61aaffdd9132fd6caf361f9187e9b2de1 100644
--- a/common/dataStructures/DeleteArchiveRequest.hpp
+++ b/common/dataStructures/DeleteArchiveRequest.hpp
@@ -23,7 +23,7 @@
 #include <stdint.h>
 #include <string>
 
-#include "common/dataStructures/UserIdentity.hpp"
+#include "common/dataStructures/RequesterIdentity.hpp"
 
 namespace cta {
 namespace common {
@@ -41,7 +41,7 @@ struct DeleteArchiveRequest {
 
   bool operator!=(const DeleteArchiveRequest &rhs) const;
 
-  UserIdentity requester;
+  RequesterIdentity requester;
   uint64_t archiveFileID;
 
 }; // struct DeleteArchiveRequest
diff --git a/common/dataStructures/DiskFileInfo.cpp b/common/dataStructures/DiskFileInfo.cpp
index 948572716611eb82be1e0822234e2dc3999c957c..4091f967a4e6723136b31c50a9df474fe6d4393d 100644
--- a/common/dataStructures/DiskFileInfo.cpp
+++ b/common/dataStructures/DiskFileInfo.cpp
@@ -29,13 +29,19 @@ namespace dataStructures {
 //------------------------------------------------------------------------------
 DiskFileInfo::DiskFileInfo() {}
 
+//------------------------------------------------------------------------------
+// constructor
+//------------------------------------------------------------------------------
+DiskFileInfo::DiskFileInfo(const std::string &path, uint32_t owner_uid, uint32_t gid) :
+  path(path), owner_uid(owner_uid), gid(gid) {}
+
 //------------------------------------------------------------------------------
 // operator==
 //------------------------------------------------------------------------------
 bool DiskFileInfo::operator==(const DiskFileInfo &rhs) const {
   return path==rhs.path
-      && owner==rhs.owner
-      && group==rhs.group;
+      && owner_uid==rhs.owner_uid
+      && gid==rhs.gid;
 }
 
 //------------------------------------------------------------------------------
@@ -50,8 +56,8 @@ bool DiskFileInfo::operator!=(const DiskFileInfo &rhs) const {
 //------------------------------------------------------------------------------
 std::ostream &operator<<(std::ostream &os, const DiskFileInfo &obj) {
   os << "(path=" << obj.path
-     << " owner=" << obj.owner
-     << " group=" << obj.group << ")";
+     << " owner_uid=" << obj.owner_uid
+     << " gid=" << obj.gid << ")";
   return os;
 }
 
diff --git a/common/dataStructures/DiskFileInfo.hpp b/common/dataStructures/DiskFileInfo.hpp
index d0395d55404676cce04fa126068ba91e5c08792f..3266932ad3eed22aa379de5b66acbc6e173a088d 100644
--- a/common/dataStructures/DiskFileInfo.hpp
+++ b/common/dataStructures/DiskFileInfo.hpp
@@ -36,13 +36,15 @@ struct DiskFileInfo {
 
   DiskFileInfo();
 
+  DiskFileInfo(const std::string &path, uint32_t owner_uid, uint32_t gid);
+
   bool operator==(const DiskFileInfo &rhs) const;
 
   bool operator!=(const DiskFileInfo &rhs) const;
 
   std::string path;
-  std::string owner;
-  std::string group;
+  uint32_t    owner_uid;
+  uint32_t    gid;
 
 }; // struct DiskFileInfo
 
diff --git a/common/dataStructures/EntryLog.hpp b/common/dataStructures/EntryLog.hpp
index 5a29b9cf5fa9f188a2cef1913ef4b2acc5709193..9376f02c85c94168a34f68ef6e8db9f426ccc986 100644
--- a/common/dataStructures/EntryLog.hpp
+++ b/common/dataStructures/EntryLog.hpp
@@ -23,8 +23,6 @@
 #include <stdint.h>
 #include <string>
 
-#include "common/dataStructures/UserIdentity.hpp"
-
 namespace cta {
 namespace common {
 namespace dataStructures {
diff --git a/common/dataStructures/ListStorageClassRequest.hpp b/common/dataStructures/ListStorageClassRequest.hpp
index 9bb3a017853e7df39b161a218e5c1dfb2c527ed4..50faa19fe13181060becea5a54522f0f50428c77 100644
--- a/common/dataStructures/ListStorageClassRequest.hpp
+++ b/common/dataStructures/ListStorageClassRequest.hpp
@@ -23,7 +23,7 @@
 #include <stdint.h>
 #include <string>
 
-#include "common/dataStructures/UserIdentity.hpp"
+#include "common/dataStructures/RequesterIdentity.hpp"
 
 namespace cta {
 namespace common {
@@ -40,7 +40,7 @@ struct ListStorageClassRequest {
 
   bool operator!=(const ListStorageClassRequest &rhs) const;
 
-  UserIdentity requester;
+  RequesterIdentity requester;
 
 }; // struct ListStorageClassRequest
 
diff --git a/common/UserIdentity.cpp b/common/dataStructures/OwnerIdentity.cpp
similarity index 70%
rename from common/UserIdentity.cpp
rename to common/dataStructures/OwnerIdentity.cpp
index 350523e4fdfd0114b9fbb7890f1f6a5b0a39b8cd..86e7fa3e2ead9921e6a24280a19dc5b1cf3e7451 100644
--- a/common/UserIdentity.cpp
+++ b/common/dataStructures/OwnerIdentity.cpp
@@ -1,6 +1,6 @@
 /*
  * The CERN Tape Archive (CTA) project
- * Copyright (C) 2015  CERN
+ * Copyright (C) 2019 CERN
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,47 +16,51 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "common/UserIdentity.hpp"
-
 #include <limits>
-#include <unistd.h>
-#include <ostream>
+
+#include "common/dataStructures/OwnerIdentity.hpp"
+#include "common/dataStructures/utils.hpp"
+#include "common/exception/Exception.hpp"
+
+namespace cta {
+namespace common {
+namespace dataStructures {
 
 //------------------------------------------------------------------------------
 // constructor
 //------------------------------------------------------------------------------
-cta::UserIdentity::UserIdentity() throw():
+OwnerIdentity::OwnerIdentity() :
   uid(std::numeric_limits<uid_t>::max()),
   gid(std::numeric_limits<gid_t>::max()) {}
 
 //------------------------------------------------------------------------------
 // constructor
 //------------------------------------------------------------------------------
-cta::UserIdentity::UserIdentity(
-  const uint32_t u,
-  const uint32_t g) throw():
-  uid(u),
-  gid(g) {
-}
+OwnerIdentity::OwnerIdentity(uint32_t uid, uint32_t gid) : uid(uid), gid(gid) {}
 
 //------------------------------------------------------------------------------
 // operator==
 //------------------------------------------------------------------------------
-bool cta::UserIdentity::operator==(const UserIdentity &rhs) const {
-  return uid == rhs.uid;
+bool OwnerIdentity::operator==(const OwnerIdentity &rhs) const {
+  return uid == rhs.uid && gid == rhs.gid;
 }
 
 //------------------------------------------------------------------------------
 // operator!=
 //------------------------------------------------------------------------------
-bool cta::UserIdentity::operator!=(const UserIdentity &rhs) const {
+bool OwnerIdentity::operator!=(const OwnerIdentity &rhs) const {
   return !operator==(rhs);
 }
 
 //------------------------------------------------------------------------------
 // operator<<
 //------------------------------------------------------------------------------
-std::ostream &operator<<(std::ostream &os, const cta::UserIdentity &obj) {
-  os << "(uid=" << obj.uid << " gid=" << obj.gid << ")";
+std::ostream &operator<<(std::ostream &os, const OwnerIdentity &obj) {
+  os << "(uid=" << obj.uid
+     << " gid=" << obj.gid << ")";
   return os;
 }
+
+} // namespace dataStructures
+} // namespace common
+} // namespace cta
diff --git a/common/dataStructures/OwnerIdentity.hpp b/common/dataStructures/OwnerIdentity.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..0bd3660757e0aa3cceabfa2e9bcbf2ce8a403c92
--- /dev/null
+++ b/common/dataStructures/OwnerIdentity.hpp
@@ -0,0 +1,53 @@
+/**
+ * The CERN Tape Archive (CTA) project
+ * Copyright (C) 2019 CERN
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <list>
+#include <map>
+#include <stdint.h>
+#include <string>
+
+
+namespace cta {
+namespace common {
+namespace dataStructures {
+
+/**
+ * This struct holds the username and group name of a given user 
+ */
+struct OwnerIdentity {
+
+  OwnerIdentity();
+  
+  OwnerIdentity(uint32_t uid, uint32_t gid);
+
+  bool operator==(const OwnerIdentity &rhs) const;
+
+  bool operator!=(const OwnerIdentity &rhs) const;
+
+  uint32_t uid;
+  uint32_t gid;
+
+}; // struct OwnerIdentity
+
+std::ostream &operator<<(std::ostream &os, const OwnerIdentity &obj);
+
+} // namespace dataStructures
+} // namespace common
+} // namespace cta
diff --git a/common/dataStructures/UserIdentity.cpp b/common/dataStructures/RequesterIdentity.cpp
similarity index 82%
rename from common/dataStructures/UserIdentity.cpp
rename to common/dataStructures/RequesterIdentity.cpp
index b075b08568eefccb7c42c905dd895442400a8a50..14d6f412158fa56ac0bfea35396683ee4909b527 100644
--- a/common/dataStructures/UserIdentity.cpp
+++ b/common/dataStructures/RequesterIdentity.cpp
@@ -1,6 +1,6 @@
 /*
  * The CERN Tape Archive (CTA) project
- * Copyright (C) 2015  CERN
+ * Copyright (C) 2019 CERN
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "common/dataStructures/UserIdentity.hpp"
+#include "common/dataStructures/RequesterIdentity.hpp"
 #include "common/dataStructures/utils.hpp"
 #include "common/exception/Exception.hpp"
 
@@ -27,19 +27,19 @@ namespace dataStructures {
 //------------------------------------------------------------------------------
 // constructor
 //------------------------------------------------------------------------------
-UserIdentity::UserIdentity() { }
+RequesterIdentity::RequesterIdentity() { }
 
 
 //------------------------------------------------------------------------------
 // constructor
 //------------------------------------------------------------------------------
-UserIdentity::UserIdentity(const std::string& name, const std::string& group):
+RequesterIdentity::RequesterIdentity(const std::string& name, const std::string& group):
   name(name), group(group) {}
 
 //------------------------------------------------------------------------------
 // operator==
 //------------------------------------------------------------------------------
-bool UserIdentity::operator==(const UserIdentity &rhs) const {
+bool RequesterIdentity::operator==(const RequesterIdentity &rhs) const {
   return name==rhs.name
       && group==rhs.group;
 }
@@ -47,14 +47,14 @@ bool UserIdentity::operator==(const UserIdentity &rhs) const {
 //------------------------------------------------------------------------------
 // operator!=
 //------------------------------------------------------------------------------
-bool UserIdentity::operator!=(const UserIdentity &rhs) const {
+bool RequesterIdentity::operator!=(const RequesterIdentity &rhs) const {
   return !operator==(rhs);
 }
 
 //------------------------------------------------------------------------------
 // operator<<
 //------------------------------------------------------------------------------
-std::ostream &operator<<(std::ostream &os, const UserIdentity &obj) {
+std::ostream &operator<<(std::ostream &os, const RequesterIdentity &obj) {
   os << "(name=" << obj.name
      << " group=" << obj.group << ")";
   return os;
diff --git a/common/dataStructures/UserIdentity.hpp b/common/dataStructures/RequesterIdentity.hpp
similarity index 73%
rename from common/dataStructures/UserIdentity.hpp
rename to common/dataStructures/RequesterIdentity.hpp
index 849a93ff4754f86f3f57c85b35207f8f3622d94e..d72937d515ec8f20c508900efecc7b1503877d37 100644
--- a/common/dataStructures/UserIdentity.hpp
+++ b/common/dataStructures/RequesterIdentity.hpp
@@ -1,6 +1,6 @@
-/*
+/**
  * The CERN Tape Archive (CTA) project
- * Copyright (C) 2015  CERN
+ * Copyright (C) 2019 CERN
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -31,22 +31,22 @@ namespace dataStructures {
 /**
  * This struct holds the username and group name of a given user 
  */
-struct UserIdentity {
+struct RequesterIdentity {
 
-  UserIdentity();
+  RequesterIdentity();
   
-  UserIdentity(const std::string &name, const std::string &group);
+  RequesterIdentity(const std::string &name, const std::string &group);
 
-  bool operator==(const UserIdentity &rhs) const;
+  bool operator==(const RequesterIdentity &rhs) const;
 
-  bool operator!=(const UserIdentity &rhs) const;
+  bool operator!=(const RequesterIdentity &rhs) const;
 
   std::string name;
   std::string group;
 
-}; // struct UserIdentity
+}; // struct RequesterIdentity
 
-std::ostream &operator<<(std::ostream &os, const UserIdentity &obj);
+std::ostream &operator<<(std::ostream &os, const RequesterIdentity &obj);
 
 } // namespace dataStructures
 } // namespace common
diff --git a/common/dataStructures/RetrieveRequest.hpp b/common/dataStructures/RetrieveRequest.hpp
index 5a82075162cd328bd241c6807dc4be8dd23073ce..ae4b691fbf5230ded5df02aca4d587e9c3551c30 100644
--- a/common/dataStructures/RetrieveRequest.hpp
+++ b/common/dataStructures/RetrieveRequest.hpp
@@ -25,7 +25,7 @@
 
 #include "common/dataStructures/DiskFileInfo.hpp"
 #include "common/dataStructures/EntryLog.hpp"
-#include "common/dataStructures/UserIdentity.hpp"
+#include "common/dataStructures/RequesterIdentity.hpp"
 #include "common/dataStructures/ArchiveRoute.hpp"
 #include "LifecycleTimings.hpp"
 #include "common/optional.hpp"
@@ -45,7 +45,7 @@ struct RetrieveRequest {
 
   bool operator!=(const RetrieveRequest &rhs) const;
 
-  UserIdentity requester;
+  RequesterIdentity requester;
   uint64_t archiveFileID;
   std::string dstURL;
   std::string errorReportURL;
@@ -60,4 +60,4 @@ std::ostream &operator<<(std::ostream &os, const RetrieveRequest &obj);
 
 } // namespace dataStructures
 } // namespace common
-} // namespace cta
\ No newline at end of file
+} // namespace cta
diff --git a/common/dataStructures/UpdateFileStorageClassRequest.hpp b/common/dataStructures/UpdateFileStorageClassRequest.hpp
index a8e6c228e1941a7a3bc869dddb6b8d06a72d45f7..1725e7cc9ca3047d1954bff3bd8895a34fc865d1 100644
--- a/common/dataStructures/UpdateFileStorageClassRequest.hpp
+++ b/common/dataStructures/UpdateFileStorageClassRequest.hpp
@@ -24,7 +24,7 @@
 #include <string>
 
 #include "common/dataStructures/DiskFileInfo.hpp"
-#include "common/dataStructures/UserIdentity.hpp"
+#include "common/dataStructures/RequesterIdentity.hpp"
 
 namespace cta {
 namespace common {
@@ -42,7 +42,7 @@ struct UpdateFileStorageClassRequest {
 
   bool operator!=(const UpdateFileStorageClassRequest &rhs) const;
 
-  UserIdentity requester;
+  RequesterIdentity requester;
   uint64_t archiveFileID;
   std::string storageClass;
   DiskFileInfo diskFileInfo;
diff --git a/common/remoteFS/RemoteFileStatus.cpp b/common/remoteFS/RemoteFileStatus.cpp
index 510a4b75dcd11c8f7f3fc106168b0a6188e89f90..397c3c0106e41322a8d419a649a64dcfc1ec1a12 100644
--- a/common/remoteFS/RemoteFileStatus.cpp
+++ b/common/remoteFS/RemoteFileStatus.cpp
@@ -30,7 +30,7 @@ cta::RemoteFileStatus::RemoteFileStatus():
 // constructor
 //------------------------------------------------------------------------------
 cta::RemoteFileStatus::RemoteFileStatus(
-  const common::dataStructures::UserIdentity &owner,
+  const common::dataStructures::OwnerIdentity &owner,
   const mode_t mode,
   const uint64_t size):
   owner(owner),
diff --git a/common/remoteFS/RemoteFileStatus.hpp b/common/remoteFS/RemoteFileStatus.hpp
index f8d97fb0313bfc5e34017eb92c2c060a648749a1..47d86d181b2ed249511ce5ce996713aa8bcd08c0 100644
--- a/common/remoteFS/RemoteFileStatus.hpp
+++ b/common/remoteFS/RemoteFileStatus.hpp
@@ -18,7 +18,7 @@
 
 #pragma once
 
-#include "common/dataStructures/UserIdentity.hpp"
+#include "common/dataStructures/OwnerIdentity.hpp"
 
 #include <stdint.h>
 #include <string>
@@ -44,14 +44,14 @@ struct RemoteFileStatus {
    * @param size The size of the file in bytes.
    */
   RemoteFileStatus(
-    const common::dataStructures::UserIdentity &owner,
+    const common::dataStructures::OwnerIdentity &owner,
     const mode_t mode,
     const uint64_t size);
 
   /**
    * The identity of the owner.
    */
-  common::dataStructures::UserIdentity owner;
+  common::dataStructures::OwnerIdentity owner;
 
   /**
    * The mode bits of the directory entry.
diff --git a/objectstore/AlgorithmsTest.cpp b/objectstore/AlgorithmsTest.cpp
index d49bced502d33b0e337de0c9db156743685c5dda..70523c35ffbf7c882ce545e961d8a00a57acf445 100644
--- a/objectstore/AlgorithmsTest.cpp
+++ b/objectstore/AlgorithmsTest.cpp
@@ -149,7 +149,7 @@ TEST(ObjectStore, ArchiveQueueAlgorithms) {
     ar.setMountPolicy(mp);
     ar.setArchiveReportURL("");
     ar.setArchiveErrorReportURL("");
-    ar.setRequester(cta::common::dataStructures::UserIdentity("user0", "group0"));
+    ar.setRequester(cta::common::dataStructures::RequesterIdentity(0, 0));
     ar.setSrcURL("root://eoseos/myFile");
     ar.setEntryLog(cta::common::dataStructures::EntryLog("user0", "host0", time(nullptr)));
     ar.insert();
diff --git a/objectstore/ArchiveFileSerDeser.hpp b/objectstore/ArchiveFileSerDeser.hpp
index 3e3d205df2afb50e0bbf0dd20983ae8f7ed7f867..c62bcd88b30c03591e96663f384924a89fde4b2d 100644
--- a/objectstore/ArchiveFileSerDeser.hpp
+++ b/objectstore/ArchiveFileSerDeser.hpp
@@ -18,7 +18,6 @@
 
 #pragma once
 
-#include "common/UserIdentity.hpp"
 #include "objectstore/cta.pb.h"
 #include "common/dataStructures/TapeFile.hpp"
 #include "EntryLogSerDeser.hpp"
diff --git a/objectstore/ArchiveRequest.cpp b/objectstore/ArchiveRequest.cpp
index 779246b3906eb9c7bf844b7b1f2312808d58618b..645a9b3f813c45f71a4a76993431bd48cf411c11 100644
--- a/objectstore/ArchiveRequest.cpp
+++ b/objectstore/ArchiveRequest.cpp
@@ -216,10 +216,9 @@ void ArchiveRequest::setArchiveFile(const cta::common::dataStructures::ArchiveFi
   m_payload.set_checksumvalue(archiveFile.checksumValue);
   m_payload.set_creationtime(archiveFile.creationTime);
   m_payload.set_diskfileid(archiveFile.diskFileId);
-  m_payload.mutable_diskfileinfo()->set_group(archiveFile.diskFileInfo.group);
-  m_payload.mutable_diskfileinfo()->set_owner(archiveFile.diskFileInfo.owner);
+  m_payload.mutable_diskfileinfo()->set_gid(archiveFile.diskFileInfo.gid);
+  m_payload.mutable_diskfileinfo()->set_owner_uid(archiveFile.diskFileInfo.owner_uid);
   m_payload.mutable_diskfileinfo()->set_path(archiveFile.diskFileInfo.path);
-  m_payload.mutable_diskfileinfo()->set_recoveryblob("");
   m_payload.set_diskinstance(archiveFile.diskInstance);
   m_payload.set_filesize(archiveFile.fileSize);
   m_payload.set_reconcilationtime(archiveFile.reconciliationTime);
@@ -237,8 +236,8 @@ cta::common::dataStructures::ArchiveFile ArchiveRequest::getArchiveFile() {
   ret.checksumValue = m_payload.checksumvalue();
   ret.creationTime = m_payload.creationtime();
   ret.diskFileId = m_payload.diskfileid();
-  ret.diskFileInfo.group = m_payload.diskfileinfo().group();
-  ret.diskFileInfo.owner = m_payload.diskfileinfo().owner();
+  ret.diskFileInfo.gid = m_payload.diskfileinfo().gid();
+  ret.diskFileInfo.owner_uid = m_payload.diskfileinfo().owner_uid();
   ret.diskFileInfo.path = m_payload.diskfileinfo().path();
   ret.diskInstance = m_payload.diskinstance();
   ret.fileSize = m_payload.filesize();
@@ -300,7 +299,7 @@ cta::common::dataStructures::MountPolicy ArchiveRequest::getMountPolicy() {
 //------------------------------------------------------------------------------
 // ArchiveRequest::setRequester()
 //------------------------------------------------------------------------------
-void ArchiveRequest::setRequester(const cta::common::dataStructures::UserIdentity &requester) {
+void ArchiveRequest::setRequester(const cta::common::dataStructures::RequesterIdentity &requester) {
   checkPayloadWritable();
   auto payloadRequester = m_payload.mutable_requester();
   payloadRequester->set_name(requester.name);
@@ -310,9 +309,9 @@ void ArchiveRequest::setRequester(const cta::common::dataStructures::UserIdentit
 //------------------------------------------------------------------------------
 // ArchiveRequest::getRequester()
 //------------------------------------------------------------------------------
-cta::common::dataStructures::UserIdentity ArchiveRequest::getRequester() {
+cta::common::dataStructures::RequesterIdentity ArchiveRequest::getRequester() {
   checkPayloadReadable();
-  cta::common::dataStructures::UserIdentity requester;
+  cta::common::dataStructures::RequesterIdentity requester;
   auto payloadRequester = m_payload.requester();
   requester.name=payloadRequester.name();
   requester.group=payloadRequester.group();
@@ -549,8 +548,8 @@ ArchiveRequest::AsyncJobOwnerUpdater* ArchiveRequest::asyncUpdateJobOwner(uint32
             retRef.m_archiveFile.checksumValue = payload.checksumvalue();
             retRef.m_archiveFile.creationTime = payload.creationtime();
             retRef.m_archiveFile.diskFileId = payload.diskfileid();
-            retRef.m_archiveFile.diskFileInfo.group = payload.diskfileinfo().group();
-            retRef.m_archiveFile.diskFileInfo.owner = payload.diskfileinfo().owner();
+            retRef.m_archiveFile.diskFileInfo.gid = payload.diskfileinfo().gid();
+            retRef.m_archiveFile.diskFileInfo.owner_uid = payload.diskfileinfo().owner_uid();
             retRef.m_archiveFile.diskFileInfo.path = payload.diskfileinfo().path();
             retRef.m_archiveFile.diskInstance = payload.diskinstance();
             retRef.m_archiveFile.fileSize = payload.filesize();
diff --git a/objectstore/ArchiveRequest.hpp b/objectstore/ArchiveRequest.hpp
index 386f73b75e953ae43efa0ce2ea61431ebb72a7ae..27b1f00402c05b64e89caebd0e7dfeaa0c21468a 100644
--- a/objectstore/ArchiveRequest.hpp
+++ b/objectstore/ArchiveRequest.hpp
@@ -22,7 +22,7 @@
 #include "common/dataStructures/DiskFileInfo.hpp"
 #include "common/dataStructures/EntryLog.hpp"
 #include "common/dataStructures/MountPolicy.hpp"
-#include "common/dataStructures/UserIdentity.hpp"
+#include "common/dataStructures/RequesterIdentity.hpp"
 #include "common/dataStructures/ArchiveFile.hpp"
 #include "JobQueueType.hpp"
 #include "common/Timer.hpp"
@@ -206,8 +206,8 @@ public:
   void setArchiveErrorReportURL(const std::string &URL);
   std::string getArchiveErrorReportURL();
 
-  void setRequester(const cta::common::dataStructures::UserIdentity &requester);
-  cta::common::dataStructures::UserIdentity getRequester();
+  void setRequester(const cta::common::dataStructures::RequesterIdentity &requester);
+  cta::common::dataStructures::RequesterIdentity getRequester();
 
   void setSrcURL(const std::string &srcURL);
   std::string getSrcURL();
diff --git a/objectstore/DiskFileInfoSerDeser.hpp b/objectstore/DiskFileInfoSerDeser.hpp
index b8564fa6528665f6eaa259a0d26bd1e8bd06cadb..9d6ad03556b0afdc8e0e5856701dd77b3e270fcc 100644
--- a/objectstore/DiskFileInfoSerDeser.hpp
+++ b/objectstore/DiskFileInfoSerDeser.hpp
@@ -1,4 +1,4 @@
-/*
+/**
  * The CERN Tape Archive (CTA) project
  * Copyright (C) 2015  CERN
  *
@@ -18,7 +18,6 @@
 
 #pragma once
 
-#include "common/UserIdentity.hpp"
 #include "objectstore/cta.pb.h"
 #include "common/dataStructures/DiskFileInfo.hpp"
 
@@ -27,33 +26,29 @@
 #include <limits>
 
 namespace cta { namespace objectstore {
+
 /**
  * A decorator class of scheduler's creation log adding serialization.
  */
-class DiskFileInfoSerDeser: public cta::common::dataStructures::DiskFileInfo {
-public:
-  DiskFileInfoSerDeser (): cta::common::dataStructures::DiskFileInfo() {}
-  DiskFileInfoSerDeser (const cta::common::dataStructures::DiskFileInfo & dfi): cta::common::dataStructures::DiskFileInfo(dfi) {}
-  DiskFileInfoSerDeser (const std::string & path, const std::string & owner, const std::string & group): 
-    cta::common::dataStructures::DiskFileInfo() {
-    this->path=path;
-    this->owner=owner;
-    this->group=group;
-  }
+struct DiskFileInfoSerDeser: public cta::common::dataStructures::DiskFileInfo {
+  DiskFileInfoSerDeser() : cta::common::dataStructures::DiskFileInfo() {}
+  DiskFileInfoSerDeser(const cta::common::dataStructures::DiskFileInfo &dfi) : cta::common::dataStructures::DiskFileInfo(dfi) {}
+
   operator cta::common::dataStructures::DiskFileInfo() {
     return cta::common::dataStructures::DiskFileInfo(*this);
-  } 
+  }
+
   void serialize (cta::objectstore::serializers::DiskFileInfo & osdfi) const {
     osdfi.set_path(path);
-    osdfi.set_owner(owner);
-    osdfi.set_group(group);
-    osdfi.set_recoveryblob("");
+    osdfi.set_owner_uid(owner_uid);
+    osdfi.set_gid(gid);
   }
+
   void deserialize (const cta::objectstore::serializers::DiskFileInfo & osdfi) {
-    path=osdfi.path();
-    owner=osdfi.owner();
-    group=osdfi.group();
+    path      = osdfi.path();
+    owner_uid = osdfi.owner_uid();
+    gid       = osdfi.gid();
   }
 };
-  
+
 }}
diff --git a/objectstore/EntryLogSerDeser.hpp b/objectstore/EntryLogSerDeser.hpp
index 4a99bc0e4a39957bea2b7392709a1f2999294448..e0d9cf701b4931f20b2ea4c9c836d9570b93f1f8 100644
--- a/objectstore/EntryLogSerDeser.hpp
+++ b/objectstore/EntryLogSerDeser.hpp
@@ -18,7 +18,6 @@
 
 #pragma once
 
-#include "common/UserIdentity.hpp"
 #include "objectstore/cta.pb.h"
 #include "common/dataStructures/EntryLog.hpp"
 
diff --git a/objectstore/GarbageCollectorTest.cpp b/objectstore/GarbageCollectorTest.cpp
index c40b59241c3966f0d7c29fd5b90d5a11e09da77e..ceeb5b63049cc886e7a27624c0b1938c27583e0f 100644
--- a/objectstore/GarbageCollectorTest.cpp
+++ b/objectstore/GarbageCollectorTest.cpp
@@ -376,7 +376,7 @@ TEST(ObjectStore, GarbageCollectorArchiveRequest) {
     ar.setMountPolicy(mp);
     ar.setArchiveReportURL("");
     ar.setArchiveErrorReportURL("");
-    ar.setRequester(cta::common::dataStructures::UserIdentity("user0", "group0"));
+    ar.setRequester(cta::common::dataStructures::RequesterIdentity(0, 0));
     ar.setSrcURL("root://eoseos/myFile");
     ar.setEntryLog(cta::common::dataStructures::EntryLog("user0", "host0", time(nullptr)));
     ar.insert();
diff --git a/objectstore/MountPolicySerDeser.hpp b/objectstore/MountPolicySerDeser.hpp
index b5a5ab7f97a5c1a2e5d3a1ae122a2f56916d0965..f64950c60294f52faf17be7672f5de2b7e85181d 100644
--- a/objectstore/MountPolicySerDeser.hpp
+++ b/objectstore/MountPolicySerDeser.hpp
@@ -18,7 +18,6 @@
 
 #pragma once
 
-#include "common/UserIdentity.hpp"
 #include "objectstore/cta.pb.h"
 #include "common/dataStructures/MountPolicy.hpp"
 
diff --git a/objectstore/OwnerIdentitySerDeser.hpp b/objectstore/OwnerIdentitySerDeser.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..e54d396479b1124cdb4cadb197a1f925554ad62a
--- /dev/null
+++ b/objectstore/OwnerIdentitySerDeser.hpp
@@ -0,0 +1,39 @@
+/**
+ * The CERN Tape Archive (CTA) project
+ * Copyright (C) 2019 CERN
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <string>
+
+#include "common/dataStructures/OwnerIdentity.hpp"
+#include "objectstore/cta.pb.h"
+
+namespace cta { namespace objectstore {
+
+struct OwnerIdentitySerDeser: public cta::common::dataStructures::OwnerIdentity {
+
+  void serialize(cta::objectstore::serializers::OwnerIdentity &user) const {
+    user.set_uid(uid);
+    user.set_gid(gid);
+  }
+
+  void deserialize(const cta::objectstore::serializers::OwnerIdentity &user) :
+    uid(user.uid()), gid(user.gid()) {}
+};
+
+}}
diff --git a/objectstore/UserIdentity.hpp b/objectstore/RequesterIdentitySerDeser.hpp
similarity index 58%
rename from objectstore/UserIdentity.hpp
rename to objectstore/RequesterIdentitySerDeser.hpp
index a3f9087196f2b5a4bd75cecb8ab2d936c3e93f7d..c4ba50f29e1118b235bb1a4915ac0b52e5a66564 100644
--- a/objectstore/UserIdentity.hpp
+++ b/objectstore/RequesterIdentitySerDeser.hpp
@@ -16,30 +16,24 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "common/UserIdentity.hpp"
-#include "objectstore/cta.pb.h"
+#pragma once
 
 #include <string>
-#include <stdint.h>
+
+#include "common/dataStructures/RequesterIdentity.hpp"
+#include "objectstore/cta.pb.h"
 
 namespace cta { namespace objectstore {
 
-class UserIdentity: public cta::common::dataStructures::UserIdentity {
-public:
-  UserIdentity (): cta::common::dataStructures::UserIdentity() {}
-  UserIdentity (const std::string &n, const std::string &g) {
-    name = n;
-    group = g;
-  }
-  UserIdentity(const cta::common::dataStructures::UserIdentity & user): cta::common::dataStructures::UserIdentity(user) {}
-  void serialize (cta::objectstore::serializers::UserIdentity & user) const {
+struct RequesterIdentitySerDeser: public cta::common::dataStructures::RequesterIdentity {
+
+  void serialize (cta::objectstore::serializers::RequesterIdentity & user) const {
     user.set_name(name);
     user.set_group(group);
   }
-  void deserialize (const cta::objectstore::serializers::UserIdentity & user) {
-    name = user.name();
-    group = user.group();
-  }
+
+  void deserialize (const cta::objectstore::serializers::RequesterIdentity & user) :
+    name(user.name()), group(user.group()) {}
 };
 
 }}
diff --git a/objectstore/RetrieveRequest.hpp b/objectstore/RetrieveRequest.hpp
index ec82378e1b40156a0f251d10918729eb72976faa..c6a54faa0230bb0a694fada8b37c8d413c4ce910 100644
--- a/objectstore/RetrieveRequest.hpp
+++ b/objectstore/RetrieveRequest.hpp
@@ -26,7 +26,6 @@
 #include <list>
 #include "common/dataStructures/DiskFileInfo.hpp"
 #include "common/dataStructures/EntryLog.hpp"
-#include "common/dataStructures/UserIdentity.hpp"
 #include "common/dataStructures/TapeFile.hpp"
 #include "common/dataStructures/ArchiveFile.hpp"
 #include "common/dataStructures/RetrieveRequest.hpp"
diff --git a/objectstore/RootEntry.hpp b/objectstore/RootEntry.hpp
index de1f6f0fc1251dbfa4c1d642009abc7f7d74a7d9..0bd47c6d185b5dbc37df1dca3e67a393714433a0 100644
--- a/objectstore/RootEntry.hpp
+++ b/objectstore/RootEntry.hpp
@@ -25,7 +25,6 @@
 #include "Backend.hpp"
 #include "ObjectOps.hpp"
 #include "EntryLogSerDeser.hpp"
-#include "UserIdentity.hpp"
 #include "common/MountControl.hpp"
 #include <list>
 
diff --git a/objectstore/TapeFileSerDeser.hpp b/objectstore/TapeFileSerDeser.hpp
index c5a2b51aafd7fb05b55bcbed2c60ea39c671ae9c..0656b8f2b199e650333e6daad9a007e3ba2675d9 100644
--- a/objectstore/TapeFileSerDeser.hpp
+++ b/objectstore/TapeFileSerDeser.hpp
@@ -18,7 +18,6 @@
 
 #pragma once
 
-#include "common/UserIdentity.hpp"
 #include "objectstore/cta.pb.h"
 #include "common/dataStructures/TapeFile.hpp"
 #include "EntryLogSerDeser.hpp"
diff --git a/objectstore/cta.proto b/objectstore/cta.proto
index 3d0ff3bfd1eb417a9456c6115592a277df916784..4ce6e03594bcae7f5ccc1a3d263103d02c4344fe 100644
--- a/objectstore/cta.proto
+++ b/objectstore/cta.proto
@@ -64,8 +64,8 @@ message GenericObject {
 // ===========================  Root Entry =====================================
 // The objects making up the root entry.
 
-// A user information record
-message UserIdentity {
+// User information record for requesters
+message RequesterIdentity {
   required string name = 10;
   required string group = 11;
 }
@@ -184,9 +184,11 @@ message TapeFile {
 }
 
 message DiskFileInfo {
-  required bytes recoveryblob = 8900;
-  required string group = 8910;
-  required string owner = 8930;
+  //required bytes recoveryblob = 8900;  DEPRECATED
+  //required string group = 8910;        DEPRECATED
+  //required string owner = 8930;        DEPRECATED
+  required uint32 owner_uid = 8920;
+  required uint32 gid = 8925;
   required string path = 8940;
 }
 
@@ -331,7 +333,7 @@ message ArchiveRequest {
   required string archivereporturl = 9057;
   required string archiveerrorreporturl = 9058;
   required uint64 filesize = 9060;
-  required UserIdentity requester = 9070;
+  required RequesterIdentity requester = 9070;
   required string srcurl = 9080;
   required string storageclass = 9090;
   required EntryLog creationlog = 9091;
@@ -360,7 +362,7 @@ enum RetrieveJobStatus {
 }
 
 message SchedulerRetrieveRequest {
-  required UserIdentity requester = 9100;
+  required RequesterIdentity requester = 9100;
   required uint64 ArchiveFileId = 9101;
   required string dstURL = 9102;
   required DiskFileInfo diskfileinfo = 9103;
diff --git a/scheduler/ArchiveJob.cpp b/scheduler/ArchiveJob.cpp
index b07b8ead759d4843f54f6e8c2787f5ce747658fe..a3676deaa5826fc6d77779e847867dc76642a297 100644
--- a/scheduler/ArchiveJob.cpp
+++ b/scheduler/ArchiveJob.cpp
@@ -62,8 +62,8 @@ cta::catalogue::TapeItemWrittenPointer cta::ArchiveJob::validateAndGetTapeFileWr
   fileReport.checksumValue = tapeFile.checksumValue;
   fileReport.copyNb = tapeFile.copyNb;
   fileReport.diskFileId = archiveFile.diskFileId;
-  fileReport.diskFileUser = archiveFile.diskFileInfo.owner;
-  fileReport.diskFileGroup = archiveFile.diskFileInfo.group;
+  fileReport.diskFileOwnerUid = archiveFile.diskFileInfo.owner_uid;
+  fileReport.diskFileGid = archiveFile.diskFileInfo.gid;
   fileReport.diskFilePath = archiveFile.diskFileInfo.path;
   fileReport.diskInstance = archiveFile.diskInstance;
   fileReport.fSeq = tapeFile.fSeq;
diff --git a/scheduler/OStoreDB/OStoreDBTest.cpp b/scheduler/OStoreDB/OStoreDBTest.cpp
index 7b4850953b5deea983fcee402b4e55f4027e30bf..9c43727c95862b23afcb8d8beb3d04ebe075e6fa 100644
--- a/scheduler/OStoreDB/OStoreDBTest.cpp
+++ b/scheduler/OStoreDB/OStoreDBTest.cpp
@@ -198,7 +198,7 @@ TEST_P(OStoreDBTest, MemQueuesSharedAddToArchiveQueue) {
       aReq.initialize();
       cta::common::dataStructures::ArchiveFile aFile;
       cta::common::dataStructures::MountPolicy mountPolicy;
-      cta::common::dataStructures::UserIdentity requester;
+      cta::common::dataStructures::RequesterIdentity requester;
       cta::common::dataStructures::EntryLog entryLog;
       aFile.archiveFileID = i;
       aReq.setArchiveFile(aFile);
diff --git a/scheduler/Scheduler.cpp b/scheduler/Scheduler.cpp
index 4a356161ae67de90c45c2f629a8bceabd11cd576..2633cd015a1b10339ac5800e0cbe5e70c0f7b39f 100644
--- a/scheduler/Scheduler.cpp
+++ b/scheduler/Scheduler.cpp
@@ -101,7 +101,7 @@ void Scheduler::authorizeAdmin(const common::dataStructures::SecurityIdentity &c
 // checkAndGetNextArchiveFileId
 //------------------------------------------------------------------------------
 uint64_t Scheduler::checkAndGetNextArchiveFileId(const std::string &instanceName,
-  const std::string &storageClassName, const common::dataStructures::UserIdentity &user, log::LogContext &lc) {
+  const std::string &storageClassName, const common::dataStructures::RequesterIdentity &user, log::LogContext &lc) {
   cta::utils::Timer t;
   const uint64_t archiveFileId = m_catalogue.checkAndGetNextArchiveFileId(instanceName, storageClassName, user);
   const auto catalogueTime = t.secs();
@@ -157,8 +157,8 @@ void Scheduler::queueArchiveWithGivenId(const uint64_t archiveFileId, const std:
      .add("policyArchivePriority", catalogueInfo.mountPolicy.archivePriority)
      .add("policyMaxDrives", catalogueInfo.mountPolicy.maxDrivesAllowed)
      .add("diskFilePath", request.diskFileInfo.path)
-     .add("diskFileOwner", request.diskFileInfo.owner)
-     .add("diskFileGroup", request.diskFileInfo.group)
+     .add("diskFileOwnerUid", request.diskFileInfo.owner_uid)
+     .add("diskFileGid", request.diskFileInfo.gid)
      .add("checksumValue", request.checksumValue)
      .add("checksumType", request.checksumType)
      .add("archiveReportURL", midEllipsis(request.archiveReportURL, 50, 15))
@@ -218,8 +218,8 @@ void Scheduler::queueRetrieve(
   spc.add("fileId", request.archiveFileID)
      .add("instanceName", instanceName)
      .add("diskFilePath", request.diskFileInfo.path)
-     .add("diskFileOwner", request.diskFileInfo.owner)
-     .add("diskFileGroup", request.diskFileInfo.group)
+     .add("diskFileOwnerUid", request.diskFileInfo.owner_uid)
+     .add("diskFileGid", request.diskFileInfo.gid)
      .add("dstURL", request.dstURL)
      .add("errorReportURL", request.errorReportURL)
      .add("creationHost", request.creationLog.host)
@@ -233,7 +233,7 @@ void Scheduler::queueRetrieve(
      .add("criteriaCreationTime", queueCriteria.archiveFile.creationTime)
      .add("criteriaDiskFileId", queueCriteria.archiveFile.diskFileId)
      .add("criteriaDiskFilePath", queueCriteria.archiveFile.diskFileInfo.path)
-     .add("criteriaDiskFileOwner", queueCriteria.archiveFile.diskFileInfo.owner)
+     .add("criteriaDiskFileOwnerUid", queueCriteria.archiveFile.diskFileInfo.owner_uid)
      .add("criteriaDiskInstance", queueCriteria.archiveFile.diskInstance)
      .add("criteriaFileSize", queueCriteria.archiveFile.fileSize)
      .add("reconciliationTime", queueCriteria.archiveFile.reconciliationTime)
diff --git a/scheduler/Scheduler.hpp b/scheduler/Scheduler.hpp
index 5cddb3c05e23cd21744967f7b3db27f150eddd21..d891df5fd370efe129620481a03e29c7daef6fc3 100644
--- a/scheduler/Scheduler.hpp
+++ b/scheduler/Scheduler.hpp
@@ -119,7 +119,7 @@ public:
   uint64_t checkAndGetNextArchiveFileId(
     const std::string &diskInstanceName,
     const std::string &storageClassName,
-    const common::dataStructures::UserIdentity &user,
+    const common::dataStructures::RequesterIdentity &user,
     log::LogContext &lc);
 
   /** 
diff --git a/scheduler/SchedulerDatabaseTest.cpp b/scheduler/SchedulerDatabaseTest.cpp
index 3617fd07949434f2163711b0bfd84429f27600d5..208df4c98cad08a19caf8cc73b78f7f62bd2faef 100644
--- a/scheduler/SchedulerDatabaseTest.cpp
+++ b/scheduler/SchedulerDatabaseTest.cpp
@@ -18,7 +18,6 @@
 
 #include "objectstore/BackendRadosTestSwitch.hpp"
 #include "tests/TestsCompileTimeSwitches.hpp"
-#include "common/UserIdentity.hpp"
 #include "scheduler/SchedulerDatabase.hpp"
 #include "scheduler/SchedulerDatabaseFactory.hpp"
 #include "common/dataStructures/SecurityIdentity.hpp"
@@ -36,6 +35,9 @@
 
 namespace unitTests {
 
+const uint32_t DISK_FILE_OWNER_UID = 9751;
+const uint32_t DISK_FILE_GID = 9752;
+
 /**
  * This structure is used to parameterize scheduler database tests.
  */
@@ -172,8 +174,8 @@ TEST_P(SchedulerDatabaseTest, createManyArchiveJobs) {
       uuid_unparse(fileUUID, fileUUIDStr);
       ar.diskFileID = fileUUIDStr;
       ar.diskFileInfo.path = std::string("/uuid/")+fileUUIDStr;
-      ar.diskFileInfo.owner = "user";
-      ar.diskFileInfo.group = "group";
+      ar.diskFileInfo.owner_uid = DISK_FILE_OWNER_UID;
+      ar.diskFileInfo.gid = DISK_FILE_GID;
       ar.fileSize = 1000;
       ar.requester = { "user", "group" };
       ar.srcURL = std::string("root:/") + ar.diskFileInfo.path;
@@ -252,8 +254,8 @@ TEST_P(SchedulerDatabaseTest, createManyArchiveJobs) {
       uuid_unparse(fileUUID, fileUUIDStr);
       ar.diskFileID = fileUUIDStr;
       ar.diskFileInfo.path = std::string("/uuid/")+fileUUIDStr;
-      ar.diskFileInfo.owner = "user";
-      ar.diskFileInfo.group = "group";
+      ar.diskFileInfo.owner_uid = DISK_FILE_OWNER_UID;
+      ar.diskFileInfo.gid = DISK_FILE_GID;
       ar.fileSize = 1000;
       ar.requester = { "user", "group" };
       ar.srcURL = std::string("root:/") + ar.diskFileInfo.path;
diff --git a/scheduler/SchedulerTest.cpp b/scheduler/SchedulerTest.cpp
index 23a12f93be7afe1e2641e4e4a4b45669fce19d83..7f98323c7881586dbdff7c32b842143a7164c6f8 100644
--- a/scheduler/SchedulerTest.cpp
+++ b/scheduler/SchedulerTest.cpp
@@ -57,6 +57,11 @@
 
 namespace unitTests {
 
+const uint32_t CMS_USER = 9751;
+const uint32_t GROUP_2  = 9752;
+const uint32_t PUBLIC_OWNER_UID = 9753;
+const uint32_t PUBLIC_GID = 9754;
+
 namespace {
 
 /**
@@ -189,7 +194,6 @@ public:
     ASSERT_EQ(mountPolicyComment, group.comment);
 
     const std::string ruleComment = "create requester mount-rule";
-    cta::common::dataStructures::UserIdentity userIdentity;
     catalogue.createRequesterMountRule(s_adminOnAdminHost, mountPolicyName, s_diskInstance, s_userName, ruleComment);
 
     const std::list<common::dataStructures::RequesterMountRule> rules = catalogue.getRequesterMountRules();
@@ -264,8 +268,8 @@ TEST_P(SchedulerTest, archive_to_new_file) {
   creationLog.time=0;
   creationLog.username="admin1";
   cta::common::dataStructures::DiskFileInfo diskFileInfo;
-  diskFileInfo.group="group2";
-  diskFileInfo.owner="cms_user";
+  diskFileInfo.gid=GROUP_2;
+  diskFileInfo.owner_uid=CMS_USER;
   diskFileInfo.path="path/to/file";
   cta::common::dataStructures::ArchiveRequest request;
   request.checksumType="ADLER32";
@@ -274,7 +278,7 @@ TEST_P(SchedulerTest, archive_to_new_file) {
   request.diskFileInfo=diskFileInfo;
   request.diskFileID="diskFileID";
   request.fileSize=100*1000*1000;
-  cta::common::dataStructures::UserIdentity requester;
+  cta::common::dataStructures::RequesterIdentity requester;
   requester.name = s_userName;
   requester.group = "userGroup";
   request.requester = requester;
@@ -325,8 +329,8 @@ TEST_P(SchedulerTest, archive_to_new_file) {
 //  creationLog.time=0;
 //  creationLog.username="admin1";
 //  cta::common::dataStructures::DiskFileInfo diskFileInfo;
-//  diskFileInfo.group="group2";
-//  diskFileInfo.owner="cms_user";
+//  diskFileInfo.gid=GROUP_2;
+//  diskFileInfo.owner_uid=CMS_USER;
 //  diskFileInfo.path="path/to/file";
 //  cta::common::dataStructures::ArchiveRequest request;
 //  request.checksumType="ADLER32";
@@ -335,7 +339,7 @@ TEST_P(SchedulerTest, archive_to_new_file) {
 //  request.diskFileInfo=diskFileInfo;
 //  request.diskFileID="diskFileID";
 //  request.fileSize=100*1000*1000;
-//  cta::common::dataStructures::UserIdentity requester;
+//  cta::common::dataStructures::RequesterIdentity requester;
 //  requester.name = s_userName;
 //  requester.group = "userGroup";
 //  request.requester = requester;
@@ -399,8 +403,8 @@ TEST_P(SchedulerTest, archive_report_and_retrieve_new_file) {
     creationLog.time=0;
     creationLog.username="admin1";
     cta::common::dataStructures::DiskFileInfo diskFileInfo;
-    diskFileInfo.group="group2";
-    diskFileInfo.owner="cms_user";
+    diskFileInfo.gid=GROUP_2;
+    diskFileInfo.owner_uid=CMS_USER;
     diskFileInfo.path="path/to/file";
     cta::common::dataStructures::ArchiveRequest request;
     request.checksumType="ADLER32";
@@ -409,7 +413,7 @@ TEST_P(SchedulerTest, archive_report_and_retrieve_new_file) {
     request.diskFileInfo=diskFileInfo;
     request.diskFileID="diskFileID";
     request.fileSize=100*1000*1000;
-    cta::common::dataStructures::UserIdentity requester;
+    cta::common::dataStructures::RequesterIdentity requester;
     requester.name = s_userName;
     requester.group = "userGroup";
     request.requester = requester;
@@ -509,8 +513,8 @@ TEST_P(SchedulerTest, archive_report_and_retrieve_new_file) {
     creationLog.time=0;
     creationLog.username="admin1";
     cta::common::dataStructures::DiskFileInfo diskFileInfo;
-    diskFileInfo.group="group2";
-    diskFileInfo.owner="cms_user";
+    diskFileInfo.gid=GROUP_2;
+    diskFileInfo.owner_uid=CMS_USER;
     diskFileInfo.path="path/to/file";
     cta::common::dataStructures::RetrieveRequest request;
     request.archiveFileID = archiveFileId;
@@ -599,8 +603,8 @@ TEST_P(SchedulerTest, archive_and_retrieve_failure) {
     creationLog.time=0;
     creationLog.username="admin1";
     cta::common::dataStructures::DiskFileInfo diskFileInfo;
-    diskFileInfo.group="group2";
-    diskFileInfo.owner="cms_user";
+    diskFileInfo.gid=GROUP_2;
+    diskFileInfo.owner_uid=CMS_USER;
     diskFileInfo.path="path/to/file";
     cta::common::dataStructures::ArchiveRequest request;
     request.checksumType="ADLER32";
@@ -609,7 +613,7 @@ TEST_P(SchedulerTest, archive_and_retrieve_failure) {
     request.diskFileInfo=diskFileInfo;
     request.diskFileID="diskFileID";
     request.fileSize=100*1000*1000;
-    cta::common::dataStructures::UserIdentity requester;
+    cta::common::dataStructures::RequesterIdentity requester;
     requester.name = s_userName;
     requester.group = "userGroup";
     request.requester = requester;
@@ -709,8 +713,8 @@ TEST_P(SchedulerTest, archive_and_retrieve_failure) {
     creationLog.time=0;
     creationLog.username="admin1";
     cta::common::dataStructures::DiskFileInfo diskFileInfo;
-    diskFileInfo.group="group2";
-    diskFileInfo.owner="cms_user";
+    diskFileInfo.gid=GROUP_2;
+    diskFileInfo.owner_uid=CMS_USER;
     diskFileInfo.path="path/to/file";
     cta::common::dataStructures::RetrieveRequest request;
     request.archiveFileID = archiveFileId;
@@ -850,8 +854,8 @@ TEST_P(SchedulerTest, archive_and_retrieve_report_failure) {
     creationLog.time=0;
     creationLog.username="admin1";
     cta::common::dataStructures::DiskFileInfo diskFileInfo;
-    diskFileInfo.group="group2";
-    diskFileInfo.owner="cms_user";
+    diskFileInfo.gid=GROUP_2;
+    diskFileInfo.owner_uid=CMS_USER;
     diskFileInfo.path="path/to/file";
     cta::common::dataStructures::ArchiveRequest request;
     request.checksumType="ADLER32";
@@ -860,7 +864,7 @@ TEST_P(SchedulerTest, archive_and_retrieve_report_failure) {
     request.diskFileInfo=diskFileInfo;
     request.diskFileID="diskFileID";
     request.fileSize=100*1000*1000;
-    cta::common::dataStructures::UserIdentity requester;
+    cta::common::dataStructures::RequesterIdentity requester;
     requester.name = s_userName;
     requester.group = "userGroup";
     request.requester = requester;
@@ -960,8 +964,8 @@ TEST_P(SchedulerTest, archive_and_retrieve_report_failure) {
     creationLog.time=0;
     creationLog.username="admin1";
     cta::common::dataStructures::DiskFileInfo diskFileInfo;
-    diskFileInfo.group="group2";
-    diskFileInfo.owner="cms_user";
+    diskFileInfo.gid=GROUP_2;
+    diskFileInfo.owner_uid=CMS_USER;
     diskFileInfo.path="path/to/file";
     cta::common::dataStructures::RetrieveRequest request;
     request.archiveFileID = archiveFileId;
@@ -1107,8 +1111,8 @@ TEST_P(SchedulerTest, retry_archive_until_max_reached) {
     creationLog.time=0;
     creationLog.username="admin1";
     cta::common::dataStructures::DiskFileInfo diskFileInfo;
-    diskFileInfo.group="group2";
-    diskFileInfo.owner="cms_user";
+    diskFileInfo.gid=GROUP_2;
+    diskFileInfo.owner_uid=CMS_USER;
     diskFileInfo.path="path/to/file";
     cta::common::dataStructures::ArchiveRequest request;
     request.checksumType="ADLER32";
@@ -1117,7 +1121,7 @@ TEST_P(SchedulerTest, retry_archive_until_max_reached) {
     request.diskFileInfo=diskFileInfo;
     request.diskFileID="diskFileID";
     request.fileSize=100*1000*1000;
-    cta::common::dataStructures::UserIdentity requester;
+    cta::common::dataStructures::RequesterIdentity requester;
     requester.name = s_userName;
     requester.group = "userGroup";
     request.requester = requester;
@@ -1190,8 +1194,8 @@ TEST_P(SchedulerTest, retrieve_non_existing_file) {
     creationLog.time=0;
     creationLog.username="admin1";
     cta::common::dataStructures::DiskFileInfo diskFileInfo;
-    diskFileInfo.group="group2";
-    diskFileInfo.owner="cms_user";
+    diskFileInfo.gid=GROUP_2;
+    diskFileInfo.owner_uid=CMS_USER;
     diskFileInfo.path="path/to/file";
     cta::common::dataStructures::RetrieveRequest request;
     request.archiveFileID = 12345;
@@ -1222,8 +1226,8 @@ TEST_P(SchedulerTest, showqueues) {
     creationLog.time=0;
     creationLog.username="admin1";
     cta::common::dataStructures::DiskFileInfo diskFileInfo;
-    diskFileInfo.group="group2";
-    diskFileInfo.owner="cms_user";
+    diskFileInfo.gid=GROUP_2;
+    diskFileInfo.owner_uid=CMS_USER;
     diskFileInfo.path="path/to/file";
     cta::common::dataStructures::ArchiveRequest request;
     request.checksumType="ADLER32";
@@ -1232,7 +1236,7 @@ TEST_P(SchedulerTest, showqueues) {
     request.diskFileInfo=diskFileInfo;
     request.diskFileID="diskFileID";
     request.fileSize=100*1000*1000;
-    cta::common::dataStructures::UserIdentity requester;
+    cta::common::dataStructures::RequesterIdentity requester;
     requester.name = s_userName;
     requester.group = "userGroup";
     request.requester = requester;
@@ -1453,8 +1457,8 @@ TEST_P(SchedulerTest, expandRepackRequest) {
         fileWritten.diskInstance = storageClass.diskInstance;
         fileWritten.diskFileId = diskFileId.str();
         fileWritten.diskFilePath = diskFilePath.str();
-        fileWritten.diskFileUser = diskFileUser;
-        fileWritten.diskFileGroup = diskFileGroup;
+        fileWritten.diskFileOwnerUid = PUBLIC_OWNER_UID;
+        fileWritten.diskFileGid = PUBLIC_GID;
         fileWritten.size = archiveFileSize;
         fileWritten.checksumType = checksumType;
         fileWritten.checksumValue = checksumValue;
diff --git a/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp b/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp
index 0c34053b6e62f3b9ae73ca63e2fe3c99d2993faf..b35c6e321fb9a1f0c03fe43236c53d4f94176cf3 100644
--- a/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp
+++ b/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp
@@ -71,6 +71,11 @@ using namespace castor::tape::tapeserver::daemon;
 
 namespace unitTests {
 
+const uint32_t DISK_FILE_OWNER_UID = 9751;
+const uint32_t DISK_FILE_GID = 9752;
+const uint32_t DISK_FILE_SOME_USER = 9753;
+const uint32_t DISK_FILE_SOME_GROUP = 9754;
+
 namespace {
 
 /**
@@ -442,8 +447,8 @@ TEST_P(DataTransferSessionTest, DataTransferSessionGooddayRecall) {
       tapeFileWritten.diskInstance = s_diskInstance;
       tapeFileWritten.diskFileId = fseq;
       tapeFileWritten.diskFilePath = remoteFilePath.str();
-      tapeFileWritten.diskFileUser = s_userName;
-      tapeFileWritten.diskFileGroup = "someGroup";
+      tapeFileWritten.diskFileOwnerUid = DISK_FILE_SOME_USER;
+      tapeFileWritten.diskFileGid = DISK_FILE_SOME_GROUP;
       tapeFileWritten.storageClassName = s_storageClassName;
       tapeFileWritten.tapeDrive = "drive0";
       catalogue.filesWrittenToTape(tapeFileWrittenSet);
@@ -623,8 +628,8 @@ TEST_P(DataTransferSessionTest, DataTransferSessionWrongRecall) {
         tapeFileWritten.diskInstance = s_diskInstance;
         tapeFileWritten.diskFileId = std::to_string(fseq);
         tapeFileWritten.diskFilePath = "/somefile";
-        tapeFileWritten.diskFileUser = s_userName;
-        tapeFileWritten.diskFileGroup = "someGroup";
+        tapeFileWritten.diskFileOwnerUid = DISK_FILE_SOME_USER;
+        tapeFileWritten.diskFileGid = DISK_FILE_SOME_GROUP;
         tapeFileWritten.storageClassName = s_storageClassName;
         tapeFileWritten.tapeDrive = "drive0";
         catalogue.filesWrittenToTape(tapeFileWrittenSet);
@@ -647,8 +652,8 @@ TEST_P(DataTransferSessionTest, DataTransferSessionWrongRecall) {
         tapeFileWritten.diskInstance = s_diskInstance;
         tapeFileWritten.diskFileId = std::to_string(fseq + 1);
         tapeFileWritten.diskFilePath = remoteFilePath.str();
-        tapeFileWritten.diskFileUser = s_userName;
-        tapeFileWritten.diskFileGroup = "someGroup";
+        tapeFileWritten.diskFileOwnerUid = DISK_FILE_SOME_USER;
+        tapeFileWritten.diskFileGid = DISK_FILE_SOME_GROUP;
         tapeFileWritten.storageClassName = s_storageClassName;
         tapeFileWritten.tapeDrive = "drive0";
         catalogue.filesWrittenToTape(tapeFileWrittenSet);
@@ -822,8 +827,8 @@ TEST_P(DataTransferSessionTest, DataTransferSessionRAORecall) {
       tapeFileWritten.diskInstance = s_diskInstance;
       tapeFileWritten.diskFileId = fseq;
       tapeFileWritten.diskFilePath = remoteFilePath.str();
-      tapeFileWritten.diskFileUser = s_userName;
-      tapeFileWritten.diskFileGroup = "someGroup";
+      tapeFileWritten.diskFileOwnerUid = DISK_FILE_SOME_USER;
+      tapeFileWritten.diskFileGid = DISK_FILE_SOME_GROUP;
       tapeFileWritten.storageClassName = s_storageClassName;
       tapeFileWritten.tapeDrive = "drive0";
       catalogue.filesWrittenToTape(tapeFileWrittenSet);
@@ -1032,8 +1037,8 @@ TEST_P(DataTransferSessionTest, DataTransferSessionNoSuchDrive) {
       tapeFileWritten.diskInstance = s_diskInstance;
       tapeFileWritten.diskFileId = fseq;
       tapeFileWritten.diskFilePath = remoteFilePath.str();
-      tapeFileWritten.diskFileUser = s_userName;
-      tapeFileWritten.diskFileGroup = "someGroup";
+      tapeFileWritten.diskFileOwnerUid = DISK_FILE_SOME_USER;
+      tapeFileWritten.diskFileGid = DISK_FILE_SOME_GROUP;
       tapeFileWritten.storageClassName = s_storageClassName;
       tapeFileWritten.tapeDrive = "drive0";
       catalogue.filesWrittenToTape(tapeFileWrittenSet);
@@ -1179,8 +1184,8 @@ TEST_P(DataTransferSessionTest, DataTransferSessionFailtoMount) {
       tapeFileWritten.diskInstance = s_diskInstance;
       tapeFileWritten.diskFileId = fseq;
       tapeFileWritten.diskFilePath = remoteFilePath.str();
-      tapeFileWritten.diskFileUser = s_userName;
-      tapeFileWritten.diskFileGroup = "someGroup";
+      tapeFileWritten.diskFileOwnerUid = DISK_FILE_SOME_USER;
+      tapeFileWritten.diskFileGid = DISK_FILE_SOME_GROUP;
       tapeFileWritten.storageClassName = s_storageClassName;
       tapeFileWritten.tapeDrive = "drive0";
       catalogue.filesWrittenToTape(tapeFileWrittenSet);
@@ -1320,8 +1325,8 @@ TEST_P(DataTransferSessionTest, DataTransferSessionGooddayMigration) {
       ar.fileSize = 1000;
       ar.diskFileID = std::to_string(fseq);
       ar.diskFileInfo.path = "y";
-      ar.diskFileInfo.owner = "z";
-      ar.diskFileInfo.group = "g";
+      ar.diskFileInfo.owner_uid = DISK_FILE_OWNER_UID;
+      ar.diskFileInfo.gid = DISK_FILE_GID;
       const auto archiveFileId = scheduler.checkAndGetNextArchiveFileId(s_diskInstance, ar.storageClass, ar.requester, logContext);
       archiveFileIds.push_back(archiveFileId);
       scheduler.queueArchiveWithGivenId(archiveFileId,s_diskInstance,ar,logContext);
@@ -1464,8 +1469,8 @@ TEST_P(DataTransferSessionTest, DataTransferSessionMissingFilesMigration) {
       ar.diskFileID = "x";
       ar.diskFileID += std::to_string(fseq);
       ar.diskFileInfo.path = "y";
-      ar.diskFileInfo.owner = "z";
-      ar.diskFileInfo.group = "g";
+      ar.diskFileInfo.owner_uid = DISK_FILE_OWNER_UID;
+      ar.diskFileInfo.gid = DISK_FILE_GID;
       const auto archiveFileId = scheduler.checkAndGetNextArchiveFileId(s_diskInstance, ar.storageClass, ar.requester, logContext);
       archiveFileIds.push_back(archiveFileId);
       scheduler.queueArchiveWithGivenId(archiveFileId,s_diskInstance,ar,logContext);
@@ -1623,8 +1628,8 @@ TEST_P(DataTransferSessionTest, DataTransferSessionTapeFullMigration) {
       ar.fileSize = 1000;
       ar.diskFileID = std::to_string(fseq);
       ar.diskFileInfo.path = "y";
-      ar.diskFileInfo.owner = "z";
-      ar.diskFileInfo.group = "g";
+      ar.diskFileInfo.owner_uid = DISK_FILE_OWNER_UID;
+      ar.diskFileInfo.gid = DISK_FILE_GID;
       const auto archiveFileId = scheduler.checkAndGetNextArchiveFileId(s_diskInstance, ar.storageClass, ar.requester, logContext);
       archiveFileIds.push_back(archiveFileId);
       scheduler.queueArchiveWithGivenId(archiveFileId,s_diskInstance,ar,logContext);
@@ -1781,8 +1786,8 @@ TEST_P(DataTransferSessionTest, DataTransferSessionTapeFullOnFlushMigration) {
       ar.fileSize = 1000;
       ar.diskFileID = std::to_string(fseq);
       ar.diskFileInfo.path = "y";
-      ar.diskFileInfo.owner = "z";
-      ar.diskFileInfo.group = "g";
+      ar.diskFileInfo.owner_uid = DISK_FILE_OWNER_UID;
+      ar.diskFileInfo.gid = DISK_FILE_GID;
       const auto archiveFileId = scheduler.checkAndGetNextArchiveFileId(s_diskInstance, ar.storageClass, ar.requester, logContext);
       archiveFileIds.push_back(archiveFileId);
       scheduler.queueArchiveWithGivenId(archiveFileId,s_diskInstance,ar,logContext);
diff --git a/xroot_plugins/XrdCtaArchiveFileLs.hpp b/xroot_plugins/XrdCtaArchiveFileLs.hpp
index addab744d9c7dab1907d38bfbee48fe3f696609d..622f139826d446c93e8c2b4e48434f1c79357af7 100644
--- a/xroot_plugins/XrdCtaArchiveFileLs.hpp
+++ b/xroot_plugins/XrdCtaArchiveFileLs.hpp
@@ -70,16 +70,16 @@ ArchiveFileLsStream::ArchiveFileLsStream(const RequestMessage &requestMsg,
 
     // Get the search criteria from the optional options
 
-    m_searchCriteria.archiveFileId  = requestMsg.getOptional(OptionUInt64::ARCHIVE_FILE_ID, &has_any);
-    m_searchCriteria.tapeFileCopyNb = requestMsg.getOptional(OptionUInt64::COPY_NUMBER,     &has_any);
-    m_searchCriteria.diskFileId     = requestMsg.getOptional(OptionString::DISKID,          &has_any);
-    m_searchCriteria.vid            = requestMsg.getOptional(OptionString::VID,             &has_any);
-    m_searchCriteria.tapePool       = requestMsg.getOptional(OptionString::TAPE_POOL,       &has_any);
-    m_searchCriteria.diskFileUser   = requestMsg.getOptional(OptionString::OWNER,           &has_any);
-    m_searchCriteria.diskFileGroup  = requestMsg.getOptional(OptionString::GROUP,           &has_any);
-    m_searchCriteria.storageClass   = requestMsg.getOptional(OptionString::STORAGE_CLASS,   &has_any);
-    m_searchCriteria.diskFilePath   = requestMsg.getOptional(OptionString::PATH,            &has_any);
-    m_searchCriteria.diskInstance   = requestMsg.getOptional(OptionString::INSTANCE,        &has_any);
+    m_searchCriteria.archiveFileId    = requestMsg.getOptional(OptionUInt64::ARCHIVE_FILE_ID, &has_any);
+    m_searchCriteria.tapeFileCopyNb   = requestMsg.getOptional(OptionUInt64::COPY_NUMBER,     &has_any);
+    m_searchCriteria.diskFileId       = requestMsg.getOptional(OptionString::DISKID,          &has_any);
+    m_searchCriteria.vid              = requestMsg.getOptional(OptionString::VID,             &has_any);
+    m_searchCriteria.tapePool         = requestMsg.getOptional(OptionString::TAPE_POOL,       &has_any);
+    m_searchCriteria.diskFileOwnerUid = requestMsg.getOptional(OptionUInt64::OWNER_UID,       &has_any);
+    m_searchCriteria.diskFileGid      = requestMsg.getOptional(OptionUInt64::GID,             &has_any);
+    m_searchCriteria.storageClass     = requestMsg.getOptional(OptionString::STORAGE_CLASS,   &has_any);
+    m_searchCriteria.diskFilePath     = requestMsg.getOptional(OptionString::PATH,            &has_any);
+    m_searchCriteria.diskInstance     = requestMsg.getOptional(OptionString::INSTANCE,        &has_any);
 
     if(!has_any) {
       throw cta::exception::UserError("Must specify at least one search option, or --all");
diff --git a/xroot_plugins/XrdCtaListPendingQueue.hpp b/xroot_plugins/XrdCtaListPendingQueue.hpp
index e5f2b8124fc046739728a173e15ec15717daf8be..1a0d1008aad73bab5f1540bdcb53cc05b4ee1370 100644
--- a/xroot_plugins/XrdCtaListPendingQueue.hpp
+++ b/xroot_plugins/XrdCtaListPendingQueue.hpp
@@ -156,8 +156,8 @@ bool ListPendingQueueStream<OStoreDB::ArchiveQueueItor_t>::pushRecord(XrdSsiPb::
   af->mutable_cs()->set_type(job.request.checksumType);
   af->mutable_cs()->set_value(job.request.checksumValue);         
   af->set_storage_class(job.request.storageClass);
-  af->mutable_df()->set_owner(job.request.requester.name);
-  af->mutable_df()->set_group(job.request.requester.group);
+  af->mutable_df()->mutable_owner_id()->set_uid(job.request.diskFileInfo.owner_uid);
+  af->mutable_df()->mutable_owner_id()->set_gid(job.request.diskFileInfo.gid);
   af->mutable_df()->set_path(job.request.diskFileInfo.path);
 
   return streambuf->Push(record);
@@ -214,8 +214,8 @@ bool ListPendingQueueStream<OStoreDB::RetrieveQueueItor_t>::pushRecord(XrdSsiPb:
     auto af = record.mutable_lpr_item()->mutable_af();
     af->set_archive_id(job.request.archiveFileID);
     af->set_size(job.fileSize);
-    af->mutable_df()->set_owner(job.request.requester.name);
-    af->mutable_df()->set_group(job.request.requester.group);
+    af->mutable_df()->mutable_owner_id()->set_uid(job.request.diskFileInfo.owner_uid);
+    af->mutable_df()->mutable_owner_id()->set_gid(job.request.diskFileInfo.gid);
     af->mutable_df()->set_path(job.request.diskFileInfo.path);
 
     // Tape file
diff --git a/xroot_plugins/XrdSsiCtaRequestMessage.cpp b/xroot_plugins/XrdSsiCtaRequestMessage.cpp
index 049366a0dd3806d3df09acc192195b24c0d236d7..d31ef30825a45b989531e469a274c86f868b0161 100644
--- a/xroot_plugins/XrdSsiCtaRequestMessage.cpp
+++ b/xroot_plugins/XrdSsiCtaRequestMessage.cpp
@@ -314,9 +314,9 @@ void RequestMessage::processCREATE(const cta::eos::Notification &notification, c
    checkIsNotEmptyString(notification.cli().user().groupname(), "notification.cli.user.groupname");
 
    // Unpack message
-   cta::common::dataStructures::UserIdentity originator;
-   originator.name  = notification.cli().user().username();
-   originator.group = notification.cli().user().groupname();
+   cta::common::dataStructures::RequesterIdentity requester;
+   requester.name  = notification.cli().user().username();
+   requester.group = notification.cli().user().groupname();
 
    const auto storageClassItor = notification.file().xattr().find("CTA_StorageClass");
    if(notification.file().xattr().end() == storageClassItor) {
@@ -329,7 +329,7 @@ void RequestMessage::processCREATE(const cta::eos::Notification &notification, c
 
    cta::utils::Timer t;
 
-   const uint64_t archiveFileId = m_scheduler.checkAndGetNextArchiveFileId(m_cliIdentity.username, storageClass, originator, m_lc);
+   const uint64_t archiveFileId = m_scheduler.checkAndGetNextArchiveFileId(m_cliIdentity.username, storageClass, requester, m_lc);
 
    // Create a log entry
    cta::log::ScopedParamContainer params(m_lc);
@@ -356,22 +356,11 @@ void RequestMessage::processCLOSEW(const cta::eos::Notification &notification, c
    // Validate received protobuf
    checkIsNotEmptyString(notification.cli().user().username(),    "notification.cli.user.username");
    checkIsNotEmptyString(notification.cli().user().groupname(),   "notification.cli.user.groupname");
-   checkIsNotEmptyString(notification.file().owner().username(),  "notification.file.owner.username");
-   checkIsNotEmptyString(notification.file().owner().groupname(), "notification.file.owner.groupname");
    checkIsNotEmptyString(notification.file().lpath(),             "notification.file.lpath");
    checkIsNotEmptyString(notification.wf().instance().url(),      "notification.wf.instance.url");
    checkIsNotEmptyString(notification.transport().report_url(),   "notification.transport.report_url");
 
    // Unpack message
-   cta::common::dataStructures::UserIdentity originator;
-   originator.name    = notification.cli().user().username();
-   originator.group   = notification.cli().user().groupname();
-
-   cta::common::dataStructures::DiskFileInfo diskFileInfo;
-   diskFileInfo.owner = notification.file().owner().username();
-   diskFileInfo.group = notification.file().owner().groupname();
-   diskFileInfo.path  = notification.file().lpath();
-
    std::string checksumtype(notification.file().cks().type());
    if(checksumtype == "adler") checksumtype = "ADLER32";   // replace this with an enum!
 
@@ -384,19 +373,22 @@ void RequestMessage::processCLOSEW(const cta::eos::Notification &notification, c
    }
 
    cta::common::dataStructures::ArchiveRequest request;
-   request.checksumType         = checksumtype;
-   request.checksumValue        = checksumvalue;
-   request.diskFileInfo         = diskFileInfo;
-   request.diskFileID           = std::to_string(notification.file().fid());
-   request.fileSize             = notification.file().size();
-   request.requester            = originator;
-   request.srcURL               = notification.wf().instance().url();
-   request.storageClass         = storageClassItor->second;
-   request.archiveReportURL     = notification.transport().report_url();
-   request.archiveErrorReportURL = notification.transport().error_report_url();
-   request.creationLog.host     = m_cliIdentity.host;
-   request.creationLog.username = m_cliIdentity.username;
-   request.creationLog.time     = time(nullptr);
+   request.checksumType           = checksumtype;
+   request.checksumValue          = checksumvalue;
+   request.diskFileInfo.owner_uid = notification.file().owner().uid();
+   request.diskFileInfo.gid       = notification.file().owner().gid();
+   request.diskFileInfo.path      = notification.file().lpath();
+   request.diskFileID             = std::to_string(notification.file().fid());
+   request.fileSize               = notification.file().size();
+   request.requester.name         = notification.cli().user().username();
+   request.requester.group        = notification.cli().user().groupname();
+   request.srcURL                 = notification.wf().instance().url();
+   request.storageClass           = storageClassItor->second;
+   request.archiveReportURL       = notification.transport().report_url();
+   request.archiveErrorReportURL  = notification.transport().error_report_url();
+   request.creationLog.host       = m_cliIdentity.host;
+   request.creationLog.username   = m_cliIdentity.username;
+   request.creationLog.time       = time(nullptr);
 
    // CTA Archive ID is an EOS extended attribute, i.e. it is stored as a string, which
    // must be converted to a valid uint64_t
@@ -433,30 +425,21 @@ void RequestMessage::processPREPARE(const cta::eos::Notification &notification,
    // Validate received protobuf
    checkIsNotEmptyString(notification.cli().user().username(),    "notification.cli.user.username");
    checkIsNotEmptyString(notification.cli().user().groupname(),   "notification.cli.user.groupname");
-   checkIsNotEmptyString(notification.file().owner().username(),  "notification.file.owner.username");
-   checkIsNotEmptyString(notification.file().owner().groupname(), "notification.file.owner.groupname");
    checkIsNotEmptyString(notification.file().lpath(),             "notification.file.lpath");
    checkIsNotEmptyString(notification.transport().dst_url(),      "notification.transport.dst_url");
 
    // Unpack message
-   cta::common::dataStructures::UserIdentity originator;
-   originator.name              = notification.cli().user().username();
-   originator.group             = notification.cli().user().groupname();
-
-   cta::common::dataStructures::DiskFileInfo diskFileInfo;
-   diskFileInfo.owner           = notification.file().owner().username();
-   diskFileInfo.group           = notification.file().owner().groupname();
-   diskFileInfo.path            = notification.file().lpath();
-
    cta::common::dataStructures::RetrieveRequest request;
-   request.requester            = originator;
-   request.dstURL               = notification.transport().dst_url();
-   request.errorReportURL       = notification.transport().error_report_url();
-   request.diskFileInfo         = diskFileInfo;
-   request.creationLog.host     = m_cliIdentity.host;
-   request.creationLog.username = m_cliIdentity.username;
-   request.creationLog.time     = time(nullptr);
-
+   request.requester.name         = notification.cli().user().username();
+   request.requester.group        = notification.cli().user().groupname();
+   request.dstURL                 = notification.transport().dst_url();
+   request.errorReportURL         = notification.transport().error_report_url();
+   request.diskFileInfo.owner_uid = notification.file().owner().uid();
+   request.diskFileInfo.gid       = notification.file().owner().gid();
+   request.diskFileInfo.path      = notification.file().lpath();
+   request.creationLog.host       = m_cliIdentity.host;
+   request.creationLog.username   = m_cliIdentity.username;
+   request.creationLog.time       = time(nullptr);
 
    // CTA Archive ID is an EOS extended attribute, i.e. it is stored as a string, which must be
    // converted to a valid uint64_t
@@ -502,13 +485,9 @@ void RequestMessage::processABORT_PREPARE(const cta::eos::Notification &notifica
    checkIsNotEmptyString(notification.cli().user().groupname(),   "notification.cli.user.groupname");
 
    // Unpack message
-   cta::common::dataStructures::UserIdentity originator;
-   originator.name   = notification.cli().user().username();
-   originator.group  = notification.cli().user().groupname();
-
    cta::common::dataStructures::DeleteArchiveRequest request;
-   request.requester = originator;
-
+   request.requester.name   = notification.cli().user().username();
+   request.requester.group  = notification.cli().user().groupname();
 
    // CTA Archive ID is an EOS extended attribute, i.e. it is stored as a string, which must be
    // converted to a valid uint64_t
@@ -547,12 +526,9 @@ void RequestMessage::processDELETE(const cta::eos::Notification &notification, c
    checkIsNotEmptyString(notification.cli().user().groupname(),   "notification.cli.user.groupname");
 
    // Unpack message
-   cta::common::dataStructures::UserIdentity originator;
-   originator.name          = notification.cli().user().username();
-   originator.group         = notification.cli().user().groupname();
-
    cta::common::dataStructures::DeleteArchiveRequest request;
-   request.requester        = originator;
+   request.requester.name    = notification.cli().user().username();
+   request.requester.group   = notification.cli().user().groupname();
 
    // CTA Archive ID is an EOS extended attribute, i.e. it is stored as a string, which
    // must be converted to a valid uint64_t