diff --git a/catalogue/1.2/mysql_catalogue_schema.sql b/catalogue/2.0/mysql_catalogue_schema.sql
similarity index 99%
rename from catalogue/1.2/mysql_catalogue_schema.sql
rename to catalogue/2.0/mysql_catalogue_schema.sql
index 5ad52db9ebe2d570dbfc3e2b45230391e05b9234..20e616f977bce6a24e9fab16c92c823d764a4e17 100644
--- a/catalogue/1.2/mysql_catalogue_schema.sql
+++ b/catalogue/2.0/mysql_catalogue_schema.sql
@@ -90,11 +90,10 @@ CREATE TABLE STORAGE_CLASS(
 CREATE TABLE TAPE_POOL(
   TAPE_POOL_ID            BIGINT UNSIGNED      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,
   TAPE_POOL_NAME          VARCHAR(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,
-  VO                      VARCHAR(100)    CONSTRAINT TAPE_POOL_VO_NN   NOT NULL,
+  VIRTUAL_ORGANIZATION_ID BIGINT UNSIGNED      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,
   NB_PARTIAL_TAPES        BIGINT UNSIGNED      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,
   IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,
   SUPPLY                  VARCHAR(100),
-  VIRTUAL_ORGANIZATION_ID BIGINT UNSIGNED,
   USER_COMMENT            VARCHAR(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,
   CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,
   CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,
@@ -317,8 +316,8 @@ INSERT INTO CTA_CATALOGUE(
   SCHEMA_VERSION_MINOR,
   STATUS)
 VALUES(
-  1,
   2,
+  0,
   'PRODUCTION');
 ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT 
   CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (STATUS='UPGRADING'));
\ No newline at end of file
diff --git a/catalogue/1.2/oracle_catalogue_schema.sql b/catalogue/2.0/oracle_catalogue_schema.sql
similarity index 99%
rename from catalogue/1.2/oracle_catalogue_schema.sql
rename to catalogue/2.0/oracle_catalogue_schema.sql
index a5c6235fb447a0cb3d34381c8aaa22ef1b654c87..8514158c3924f180a1fb2013366c1155a6ef7b45 100644
--- a/catalogue/1.2/oracle_catalogue_schema.sql
+++ b/catalogue/2.0/oracle_catalogue_schema.sql
@@ -116,11 +116,10 @@ CREATE TABLE STORAGE_CLASS(
 CREATE TABLE TAPE_POOL(
   TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,
   TAPE_POOL_NAME          VARCHAR2(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,
-  VO                      VARCHAR2(100)    CONSTRAINT TAPE_POOL_VO_NN   NOT NULL,
+  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,
   NB_PARTIAL_TAPES        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,
   IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,
   SUPPLY                  VARCHAR2(100),
-  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0),
   USER_COMMENT            VARCHAR2(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,
   CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,
   CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,
@@ -343,8 +342,8 @@ INSERT INTO CTA_CATALOGUE(
   SCHEMA_VERSION_MINOR,
   STATUS)
 VALUES(
-  1,
   2,
+  0,
   'PRODUCTION');
 ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (NEXT_SCHEMA_VERSION_MAJOR IS NOT NULL AND NEXT_SCHEMA_VERSION_MINOR IS NOT NULL AND STATUS='UPGRADING')) INITIALLY DEFERRED;
 
diff --git a/catalogue/1.2/postgres_catalogue_schema.sql b/catalogue/2.0/postgres_catalogue_schema.sql
similarity index 99%
rename from catalogue/1.2/postgres_catalogue_schema.sql
rename to catalogue/2.0/postgres_catalogue_schema.sql
index 52d9a1115d65ee13119fb68460d68728ba4d288b..626a945d57c1c24be6656ca3c04c30fdd54c6841 100644
--- a/catalogue/1.2/postgres_catalogue_schema.sql
+++ b/catalogue/2.0/postgres_catalogue_schema.sql
@@ -100,11 +100,10 @@ CREATE TABLE STORAGE_CLASS(
 CREATE TABLE TAPE_POOL(
   TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,
   TAPE_POOL_NAME          VARCHAR(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,
-  VO                      VARCHAR(100)    CONSTRAINT TAPE_POOL_VO_NN   NOT NULL,
+  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,
   NB_PARTIAL_TAPES        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,
   IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,
   SUPPLY                  VARCHAR(100),
-  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0),
   USER_COMMENT            VARCHAR(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,
   CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,
   CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,
@@ -327,8 +326,8 @@ INSERT INTO CTA_CATALOGUE(
   SCHEMA_VERSION_MINOR,
   STATUS)
 VALUES(
-  1,
   2,
+  0,
   'PRODUCTION');
 ALTER TABLE ARCHIVE_FILE DROP CONSTRAINT
   ARCHIVE_FILE_DIN_DFI_UN;
diff --git a/catalogue/1.2/sqlite_catalogue_schema.sql b/catalogue/2.0/sqlite_catalogue_schema.sql
similarity index 99%
rename from catalogue/1.2/sqlite_catalogue_schema.sql
rename to catalogue/2.0/sqlite_catalogue_schema.sql
index 81e7f07d9e44b7830ed164fe97bb1035d911b73b..621ecf12a1cd42e55de8e82f7396f1f27fcf5824 100644
--- a/catalogue/1.2/sqlite_catalogue_schema.sql
+++ b/catalogue/2.0/sqlite_catalogue_schema.sql
@@ -80,11 +80,10 @@ CREATE TABLE STORAGE_CLASS(
 CREATE TABLE TAPE_POOL(
   TAPE_POOL_ID            INTEGER      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,
   TAPE_POOL_NAME          VARCHAR(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,
-  VO                      VARCHAR(100)    CONSTRAINT TAPE_POOL_VO_NN   NOT NULL,
+  VIRTUAL_ORGANIZATION_ID INTEGER      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,
   NB_PARTIAL_TAPES        INTEGER      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,
   IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,
   SUPPLY                  VARCHAR(100),
-  VIRTUAL_ORGANIZATION_ID INTEGER,
   USER_COMMENT            VARCHAR(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,
   CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,
   CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,
@@ -307,6 +306,6 @@ INSERT INTO CTA_CATALOGUE(
   SCHEMA_VERSION_MINOR,
   STATUS)
 VALUES(
-  1,
   2,
+  0,
   'PRODUCTION');
diff --git a/catalogue/AllCatalogueSchema.hpp b/catalogue/AllCatalogueSchema.hpp
index c4d80239c55473ceddfb121bd3c7361ee77b3aa6..65310e02df3a592c8061a18901020d48cf112bd0 100644
--- a/catalogue/AllCatalogueSchema.hpp
+++ b/catalogue/AllCatalogueSchema.hpp
@@ -2464,7 +2464,7 @@ namespace catalogue{
   "  CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (STATUS='UPGRADING'));"
       },
     }  },
-  {"1.2",
+  {"2.0",
     {
       {"oracle",  "CREATE SEQUENCE ARCHIVE_FILE_ID_SEQ"
   "  INCREMENT BY 1"
@@ -2584,11 +2584,10 @@ namespace catalogue{
   "CREATE TABLE TAPE_POOL("
   "  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,"
   "  TAPE_POOL_NAME          VARCHAR2(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,"
-  "  VO                      VARCHAR2(100)    CONSTRAINT TAPE_POOL_VO_NN   NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,"
   "  NB_PARTIAL_TAPES        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,"
   "  IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,"
   "  SUPPLY                  VARCHAR2(100),"
-  "  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0),"
   "  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,"
   "  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,"
   "  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,"
@@ -2811,8 +2810,8 @@ namespace catalogue{
   "  SCHEMA_VERSION_MINOR,"
   "  STATUS)"
   "VALUES("
-  "  1,"
   "  2,"
+  "  0,"
   "  'PRODUCTION');"
   "ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (NEXT_SCHEMA_VERSION_MAJOR IS NOT NULL AND NEXT_SCHEMA_VERSION_MINOR IS NOT NULL AND STATUS='UPGRADING')) INITIALLY DEFERRED;"
   ""
@@ -2910,11 +2909,10 @@ namespace catalogue{
   "CREATE TABLE TAPE_POOL("
   "  TAPE_POOL_ID            BIGINT UNSIGNED      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,"
   "  TAPE_POOL_NAME          VARCHAR(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,"
-  "  VO                      VARCHAR(100)    CONSTRAINT TAPE_POOL_VO_NN   NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_ID BIGINT UNSIGNED      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,"
   "  NB_PARTIAL_TAPES        BIGINT UNSIGNED      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,"
   "  IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,"
   "  SUPPLY                  VARCHAR(100),"
-  "  VIRTUAL_ORGANIZATION_ID BIGINT UNSIGNED,"
   "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,"
   "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,"
   "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,"
@@ -3137,8 +3135,8 @@ namespace catalogue{
   "  SCHEMA_VERSION_MINOR,"
   "  STATUS)"
   "VALUES("
-  "  1,"
   "  2,"
+  "  0,"
   "  'PRODUCTION');"
   "ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT "
   "  CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (STATUS='UPGRADING'));"
@@ -3225,11 +3223,10 @@ namespace catalogue{
   "CREATE TABLE TAPE_POOL("
   "  TAPE_POOL_ID            INTEGER      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,"
   "  TAPE_POOL_NAME          VARCHAR(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,"
-  "  VO                      VARCHAR(100)    CONSTRAINT TAPE_POOL_VO_NN   NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_ID INTEGER      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,"
   "  NB_PARTIAL_TAPES        INTEGER      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,"
   "  IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,"
   "  SUPPLY                  VARCHAR(100),"
-  "  VIRTUAL_ORGANIZATION_ID INTEGER,"
   "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,"
   "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,"
   "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,"
@@ -3452,8 +3449,8 @@ namespace catalogue{
   "  SCHEMA_VERSION_MINOR,"
   "  STATUS)"
   "VALUES("
-  "  1,"
   "  2,"
+  "  0,"
   "  'PRODUCTION');"
       },
   {"postgres",  "CREATE SEQUENCE ARCHIVE_FILE_ID_SEQ"
@@ -3558,11 +3555,10 @@ namespace catalogue{
   "CREATE TABLE TAPE_POOL("
   "  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,"
   "  TAPE_POOL_NAME          VARCHAR(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,"
-  "  VO                      VARCHAR(100)    CONSTRAINT TAPE_POOL_VO_NN   NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,"
   "  NB_PARTIAL_TAPES        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,"
   "  IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,"
   "  SUPPLY                  VARCHAR(100),"
-  "  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0),"
   "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,"
   "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,"
   "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,"
@@ -3785,8 +3781,8 @@ namespace catalogue{
   "  SCHEMA_VERSION_MINOR,"
   "  STATUS)"
   "VALUES("
-  "  1,"
   "  2,"
+  "  0,"
   "  'PRODUCTION');"
   "ALTER TABLE ARCHIVE_FILE DROP CONSTRAINT"
   "  ARCHIVE_FILE_DIN_DFI_UN;"
diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp
index 18a19b82eb7609197a6376f03a06ce8a2832e781..9a2d2178b65325a509638a6e90ee256ac6fdd381 100644
--- a/catalogue/CatalogueTest.cpp
+++ b/catalogue/CatalogueTest.cpp
@@ -317,6 +317,14 @@ std::map<std::string, cta::catalogue::TapePool> cta_catalogue_CatalogueTest::tap
   }
 }
 
+void cta_catalogue_CatalogueTest::createVo(const std::string &voName){
+  using namespace cta;
+  common::dataStructures::VirtualOrganization vo;
+  vo.name = voName;
+  vo.comment = "comment";
+  m_catalogue->createVirtualOrganization(m_admin,vo);
+}
+
 TEST_P(cta_catalogue_CatalogueTest, createAdminUser) {
   using namespace cta;
 
@@ -878,6 +886,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   ASSERT_TRUE(m_catalogue->tapePoolExists(tapePoolName));
@@ -888,7 +897,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool) {
       
   const auto &pool = pools.front();
   ASSERT_EQ(tapePoolName, pool.name);
-  ASSERT_EQ(vo, pool.vo);
+  ASSERT_EQ(vo, pool.vo.name);
   ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
   ASSERT_EQ(isEncrypted, pool.encryption);
   ASSERT_TRUE((bool)pool.supply);
@@ -923,6 +932,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_null_supply) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply;
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   ASSERT_TRUE(m_catalogue->tapePoolExists(tapePoolName));
@@ -933,7 +943,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_null_supply) {
       
   const auto &pool = pools.front();
   ASSERT_EQ(tapePoolName, pool.name);
-  ASSERT_EQ(vo, pool.vo);
+  ASSERT_EQ(vo, pool.vo.name);
   ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
   ASSERT_EQ(isEncrypted, pool.encryption);
   ASSERT_FALSE((bool)pool.supply);
@@ -961,11 +971,25 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_same_twice) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
   ASSERT_THROW(m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment),
     exception::UserError);
 }
 
+TEST_P(cta_catalogue_CatalogueTest, createTapePool_vo_does_not_exist) {
+  using namespace cta;
+  
+  const std::string tapePoolName = "tape_pool";
+  const std::string vo = "vo";
+  const uint64_t nbPartialTapes = 2;
+  const bool isEncrypted = true;
+  const cta::optional<std::string> supply("value for the supply pool mechanism");
+  const std::string comment = "Create tape pool";
+  ASSERT_THROW(m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment),
+    exception::UserError);
+}
+
 TEST_P(cta_catalogue_CatalogueTest, deleteTapePool) {
   using namespace cta;
 
@@ -977,6 +1001,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTapePool) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   const auto pools = m_catalogue->getTapePools();
@@ -985,7 +1010,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTapePool) {
 
   const auto &pool = pools.front();
   ASSERT_EQ(tapePoolName, pool.name);
-  ASSERT_EQ(vo, pool.vo);
+  ASSERT_EQ(vo, pool.vo.name);
   ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
   ASSERT_EQ(isEncrypted, pool.encryption);
   ASSERT_EQ(0, pool.nbTapes);
@@ -1032,7 +1057,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTapePool_notEmpty) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled,
     "Create logical library");
-
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -1040,7 +1065,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTapePool_notEmpty) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -1088,7 +1113,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTapePool_notEmpty) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(1, pool.nbTapes);
     ASSERT_EQ(capacityInBytes, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -1110,6 +1135,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_emptyStringTapePoolName) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   ASSERT_THROW(m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment),
     catalogue::UserSpecifiedAnEmptyStringTapePoolName);
 }
@@ -1146,6 +1172,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_emptyStringComment) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "";
+  createVo(vo);
   ASSERT_THROW(m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment),
     catalogue::UserSpecifiedAnEmptyStringComment);
 }
@@ -1168,6 +1195,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   {
@@ -1177,7 +1205,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1195,6 +1223,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo) {
   }
 
   const std::string modifiedVo = "modified_vo";
+  createVo(modifiedVo);
   m_catalogue->modifyTapePoolVo(m_admin, tapePoolName, modifiedVo);
 
   {
@@ -1204,7 +1233,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(modifiedVo, pool.vo);
+    ASSERT_EQ(modifiedVo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1241,6 +1270,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo_emptyStringVo) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   {
@@ -1250,7 +1280,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo_emptyStringVo) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1272,6 +1302,49 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo_emptyStringVo) {
     catalogue::UserSpecifiedAnEmptyStringVo);
 }
 
+TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo_VoDoesNotExist) {
+  using namespace cta;
+
+  ASSERT_TRUE(m_catalogue->getTapePools().empty());
+
+  const std::string tapePoolName = "tape_pool";
+  const std::string vo = "vo";
+  const uint64_t nbPartialTapes = 2;
+  const bool isEncrypted = true;
+  const cta::optional<std::string> supply("value for the supply pool mechanism");
+  const std::string comment = "Create tape pool";
+  createVo(vo);
+  m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
+
+  {
+    const auto pools = m_catalogue->getTapePools();
+
+    ASSERT_EQ(1, pools.size());
+
+    const auto &pool = pools.front();
+    ASSERT_EQ(tapePoolName, pool.name);
+    ASSERT_EQ(vo, pool.vo.name);
+    ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
+    ASSERT_EQ(isEncrypted, pool.encryption);
+    ASSERT_EQ(0, pool.nbTapes);
+    ASSERT_EQ(0, pool.capacityBytes);
+    ASSERT_EQ(0, pool.dataBytes);
+    ASSERT_EQ(0, pool.nbPhysicalFiles);
+    ASSERT_EQ(comment, pool.comment);
+
+    const common::dataStructures::EntryLog creationLog = pool.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+
+    const common::dataStructures::EntryLog lastModificationLog = pool.lastModificationLog;
+    ASSERT_EQ(creationLog, lastModificationLog);
+  }
+
+  const std::string modifiedVo = "DoesNotExists";
+  ASSERT_THROW(m_catalogue->modifyTapePoolVo(m_admin, tapePoolName, modifiedVo),
+    exception::UserError);
+}
+
 TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolNbPartialTapes) {
   using namespace cta;
       
@@ -1283,6 +1356,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolNbPartialTapes) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   {
@@ -1292,7 +1366,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolNbPartialTapes) {
       
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1319,7 +1393,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolNbPartialTapes) {
       
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(modifiedNbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1367,6 +1441,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolComment) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   {
@@ -1376,7 +1451,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolComment) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1403,7 +1478,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolComment) {
       
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1440,6 +1515,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolComment_emptyStringComment) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   {
@@ -1449,7 +1525,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolComment_emptyStringComment) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1492,6 +1568,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapePoolEncryption) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   {
@@ -1501,7 +1578,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapePoolEncryption) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1528,7 +1605,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapePoolEncryption) {
       
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(modifiedIsEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1564,6 +1641,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   {
@@ -1573,7 +1651,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_TRUE((bool)supply);
@@ -1603,7 +1681,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply) {
       
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_TRUE((bool)supply);
@@ -1642,6 +1720,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply_emptyStringSupply) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   {
@@ -1651,7 +1730,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply_emptyStringSupply) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_TRUE((bool)supply);
@@ -1681,7 +1760,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply_emptyStringSupply) {
       
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_FALSE((bool)pool.supply);
@@ -1726,6 +1805,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute) {
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   ASSERT_TRUE(m_catalogue->getArchiveRoutes(storageClass.name, tapePoolName).empty());
@@ -1785,6 +1865,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolName) {
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   {
@@ -1794,7 +1875,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolName) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1821,7 +1902,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolName) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(newTapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1858,6 +1939,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolName_emptyStringNewTapePoolNam
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
   const std::string comment = "Create tape pool";
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
 
   {
@@ -1867,7 +1949,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolName_emptyStringNewTapePoolNam
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes);
     ASSERT_EQ(isEncrypted, pool.encryption);
     ASSERT_EQ(0, pool.nbTapes);
@@ -1908,6 +1990,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_emptyStringStorageClassNa
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const std::string storageClassName = "";
@@ -1936,6 +2019,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_zeroCopyNb) {
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 0;
@@ -1984,6 +2068,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_emptyStringComment) {
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -2007,6 +2092,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_non_existent_storage_clas
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -2057,6 +2143,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_same_twice) {
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -2085,6 +2172,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_two_routes_same_pool) {
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb1 = 1;
@@ -2116,6 +2204,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveRoute) {
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -2169,6 +2258,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_deleteStorageClass) {
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -2219,6 +2309,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyArchiveRouteTapePoolName) {
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const std::string anotherTapePoolName = "another_tape_pool";
@@ -2287,6 +2378,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyArchiveRouteTapePoolName_nonExistentAr
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -2313,6 +2405,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyArchiveRouteComment) {
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -2379,6 +2472,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyArchiveRouteComment_nonExistentArchive
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -2645,6 +2739,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteLogicalLibrary_non_empty) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName,
     capacityInBytes, disabledValue, fullValue, readOnlyValue, 
@@ -2870,7 +2965,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
-
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -2878,7 +2973,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -2926,7 +3021,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(1, pool.nbTapes);
     ASSERT_EQ(capacityInBytes, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -2957,7 +3052,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringVid) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
-
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -2965,7 +3060,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringVid) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -2999,6 +3094,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringMediaType) {
   const bool readOnlyValue = true;
   const std::string comment = "Create tape";
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -3006,7 +3102,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringMediaType) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3041,6 +3137,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringVendor) {
   
   const std::string comment = "Create tape";
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -3048,7 +3145,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringVendor) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3082,6 +3179,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringLogicalLibraryName) {
   const bool readOnlyValue = true;
   const std::string comment = "Create tape";
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -3089,7 +3187,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringLogicalLibraryName) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3153,6 +3251,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_zeroCapacity) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -3160,7 +3259,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_zeroCapacity) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3197,6 +3296,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringComment) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -3204,7 +3304,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringComment) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3235,6 +3335,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_non_existent_logical_library) {
   const bool readOnlyValue = true;
   const std::string comment = "Create tape";
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   ASSERT_THROW(m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName,
     capacityInBytes, disabledValue, fullValue, readOnlyValue, comment), exception::UserError);
@@ -3286,6 +3387,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_9_exabytes_capacity) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -3293,7 +3395,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_9_exabytes_capacity) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3339,7 +3441,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_9_exabytes_capacity) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(1, pool.nbTapes);
     ASSERT_EQ(capacityInBytes, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3368,6 +3470,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_same_twice) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -3375,7 +3478,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_same_twice) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3391,7 +3494,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_same_twice) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(1, pool.nbTapes);
     ASSERT_EQ(capacityInBytes, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3408,7 +3511,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_same_twice) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(1, pool.nbTapes);
     ASSERT_EQ(capacityInBytes, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3438,6 +3541,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_many_tapes) {
   m_catalogue->createLogicalLibrary(m_admin, logicalLibrary, logicalLibraryIsDisabled, "Create logical library");
 
   ASSERT_TRUE(m_catalogue->getTapePools().empty());
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -3445,7 +3549,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_many_tapes) {
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3468,7 +3572,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_many_tapes) {
 
       const auto &pool = pools.front();
       ASSERT_EQ(tapePoolName, pool.name);
-      ASSERT_EQ(vo, pool.vo);
+      ASSERT_EQ(vo, pool.vo.name);
       ASSERT_EQ(i, pool.nbTapes);
       ASSERT_EQ(i * capacityInBytes, pool.capacityBytes);
       ASSERT_EQ(0, pool.dataBytes);
@@ -3759,6 +3863,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_1_tape_with_write_log_1_tape_with
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   {
@@ -3767,7 +3872,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_1_tape_with_write_log_1_tape_with
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(0, pool.nbTapes);
     ASSERT_EQ(0, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3815,7 +3920,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_1_tape_with_write_log_1_tape_with
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(1, pool.nbTapes);
     ASSERT_EQ(capacityInBytes, pool.capacityBytes);
     ASSERT_EQ(0, pool.dataBytes);
@@ -3865,7 +3970,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_1_tape_with_write_log_1_tape_with
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(1, pool.nbTapes);
     ASSERT_EQ(capacityInBytes, pool.capacityBytes);
     ASSERT_EQ(fileSize, pool.dataBytes);
@@ -3913,7 +4018,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_1_tape_with_write_log_1_tape_with
 
     const auto &pool = pools.front();
     ASSERT_EQ(tapePoolName, pool.name);
-    ASSERT_EQ(vo, pool.vo);
+    ASSERT_EQ(vo, pool.vo.name);
     ASSERT_EQ(2, pool.nbTapes);
     ASSERT_EQ(2*capacityInBytes, pool.capacityBytes);
     ASSERT_EQ(fileSize, pool.dataBytes);
@@ -3943,6 +4048,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTape) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName,
     capacityInBytes, disabledValue, fullValue, readOnlyValue, 
@@ -4011,6 +4117,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteNonEmptyTape) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue,
     readOnlyValue, comment);
@@ -4136,7 +4243,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeMediaType) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
-
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -4224,6 +4331,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeVendor) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -4314,6 +4422,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeLogicalLibraryName) {
   m_catalogue->createLogicalLibrary(m_admin, anotherLogicalLibraryName, logicalLibraryIsDisabled,
     "Create another logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -4416,6 +4525,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeTapePoolName) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTapePool(m_admin, anotherTapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create another tape pool");
 
@@ -4497,6 +4607,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeTapePoolName_nonExistentTape) {
   const cta::optional<std::string> supply("value for the supply pool mechanism");
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   ASSERT_THROW(m_catalogue->modifyTapeTapePoolName(m_admin, vid, tapePoolName), exception::UserError);
@@ -4524,7 +4635,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeCapacityInBytes) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
-
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -4625,6 +4736,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeEncryptionKeyName) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -4715,6 +4827,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeEncryptionKeyName_emptyStringEncry
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -4816,6 +4929,7 @@ TEST_P(cta_catalogue_CatalogueTest, tapeLabelled) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -4917,6 +5031,7 @@ TEST_P(cta_catalogue_CatalogueTest, tapeMountedForArchive) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -5056,6 +5171,7 @@ TEST_P(cta_catalogue_CatalogueTest, tapeMountedForRetrieve) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -5195,6 +5311,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapeFull) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -5293,6 +5410,7 @@ TEST_P(cta_catalogue_CatalogueTest, noSpaceLeftOnTape) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -5391,6 +5509,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapeReadOnly) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -5518,6 +5637,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapeReadOnlyOnError) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -5616,6 +5736,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapeDisabled) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -5704,6 +5825,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapeIsFromCastorInUnitTests) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
@@ -5841,6 +5963,7 @@ TEST_P(cta_catalogue_CatalogueTest, getTapesForWriting) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
    disabledValue, fullValue, readOnlyValue, comment);
@@ -5883,6 +6006,7 @@ TEST_P(cta_catalogue_CatalogueTest, getTapesForWriting_disabled_tape) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
    disabledValue, fullValue, readOnlyValue, comment);
@@ -5915,6 +6039,7 @@ TEST_P(cta_catalogue_CatalogueTest, getTapesForWriting_full_tape) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
    disabledValue, fullValue, readOnlyValue, comment);
@@ -5947,6 +6072,7 @@ TEST_P(cta_catalogue_CatalogueTest, getTapesForWriting_read_only_tape) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
    disabledValue, fullValue, readOnlyValue, comment);
@@ -5979,6 +6105,7 @@ TEST_P(cta_catalogue_CatalogueTest, getTapesForWriting_is_from_castor_tape) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
    disabledValue, fullValue, readOnlyValue, comment);
@@ -6016,6 +6143,7 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_getTapesForWriting_no_labelled_tape
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
    disabledValue, fullValue, readOnlyValue, comment);
@@ -7380,6 +7508,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_no_mount_rules)
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -7467,6 +7596,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_requester_mount
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -7558,6 +7688,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_requester_group
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -7668,6 +7799,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_requester_mount
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -7818,6 +7950,7 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_requester_mount_
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -7901,6 +8034,7 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_requester_group_
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -8003,6 +8137,7 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_requester_mount_
   const uint64_t nbPartialTapes = 2;
   const bool isEncrypted = true;
   const cta::optional<std::string> supply("value for the supply pool mechanism");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t copyNb = 1;
@@ -8059,6 +8194,7 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId) {
   const std::string createTapeComment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, createTapeComment);
@@ -8312,6 +8448,7 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId_disa
   const std::string createTapeComment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, createTapeComment);
@@ -8779,6 +8916,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) {
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName1, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -9720,6 +9858,7 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
 
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName1, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   {
     const auto pools = m_catalogue->getTapePools();
@@ -10505,6 +10644,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_1_tape_cop
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -10636,6 +10776,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_1_tape_cop
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -10776,6 +10917,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -11004,6 +11146,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -11226,6 +11369,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -11421,6 +11565,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -11573,6 +11718,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -11757,6 +11903,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -11940,6 +12087,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -12120,6 +12268,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -12426,6 +12575,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile_by_archive_file_id_of_anot
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -12757,6 +12907,7 @@ TEST_P(cta_catalogue_CatalogueTest, getAllTapes_many_tapes) {
   const bool readOnlyValue = true;
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
 
   const uint32_t nbTapes = 10;
@@ -13738,6 +13889,7 @@ TEST_P(cta_catalogue_CatalogueTest, getNbFilesOnTape_no_tape_files) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -13800,6 +13952,7 @@ TEST_P(cta_catalogue_CatalogueTest, getNbFilesOnTape_one_tape_file) {
   const std::string createTapeComment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, createTapeComment);
@@ -13920,6 +14073,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkTapeForLabel_no_tape_files) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -13982,6 +14136,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkTapeForLabel_one_tape_file) {
   const std::string createTapeComment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, createTapeComment);
@@ -14104,6 +14259,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkTapeForLabel_one_tape_file_reclaimed_ta
   const std::string createTapeComment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, createTapeComment);
@@ -14235,6 +14391,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkTapeForLabel_one_tape_file_superseded)
   const std::string createTapeComment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, createTapeComment);
@@ -14454,6 +14611,7 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_0_no_tape_files) {
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -14544,6 +14702,7 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_not_full_lastFSeq_0_no_tape_file
   const std::string comment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, comment);
@@ -14607,6 +14766,7 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_1_no_tape_files) {
   const std::string createTapeComment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, createTapeComment);
@@ -14836,6 +14996,7 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_1_one_tape_file) {
   const std::string createTapeComment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, createTapeComment);
@@ -14998,6 +15159,7 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_1_one_tape_file_su
   const std::string createTapeComment = "Create tape";
 
   m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
+  createVo(vo);
   m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
   m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
     disabledValue, fullValue, readOnlyValue, createTapeComment);
@@ -15343,6 +15505,21 @@ TEST_P(cta_catalogue_CatalogueTest, deleteVirtualOrganization) {
   ASSERT_NO_THROW(m_catalogue->deleteVirtualOrganization(vo.name));
 }
 
+TEST_P(cta_catalogue_CatalogueTest, deleteVirtualOrganizationUsedByTapePool) {
+  using namespace cta;
+
+  const std::string vo = "vo";
+  const std::string tapePoolName = "tape_pool";
+  const uint64_t nbPartialTapes = 2;
+  const bool isEncrypted = true;
+  const cta::optional<std::string> supply("value for the supply pool mechanism");
+  const std::string comment = "Create tape pool";
+  createVo(vo);
+  m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment);
+  
+  ASSERT_THROW(m_catalogue->deleteVirtualOrganization(vo),exception::UserError);
+}
+
 TEST_P(cta_catalogue_CatalogueTest, deleteVirtualOrganizationNameDoesNotExist) {
   using namespace cta;
 
diff --git a/catalogue/CatalogueTest.hpp b/catalogue/CatalogueTest.hpp
index 20e3b3a5e565c2affb17e0e6910cf129089f753d..f3483c5e4f27398d0a677d7ccaba4b8f3b0274bd 100644
--- a/catalogue/CatalogueTest.hpp
+++ b/catalogue/CatalogueTest.hpp
@@ -95,6 +95,8 @@ protected:
    */
   std::map<std::string, cta::catalogue::TapePool> tapePoolListToMap(
     const std::list<cta::catalogue::TapePool> &listOfTapePools);
+  
+  void createVo(const std::string &voName);
 }; // cta_catalogue_CatalogueTest
 
 } // namespace unitTests
diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp
index 2c5ebfa0d4de1c5c81bd47460ff38495044daade..fdc649b02b1a8cd67f5bf5efb5139134b14e69e4 100644
--- a/catalogue/RdbmsCatalogue.cpp
+++ b/catalogue/RdbmsCatalogue.cpp
@@ -403,13 +403,13 @@ void RdbmsCatalogue::deleteVirtualOrganization(const std::string &voName){
     auto conn = m_connPool.getConn();
 
     if(virtualOrganizationIsUsedByStorageClasses(conn, voName)) {
-      throw UserSpecifiedStorageClassUsedByArchiveRoutes(std::string("The ") + voName +
-        " Virtual Organization is being used by one or more storage classes");
+      throw UserSpecifiedStorageClassUsedByArchiveRoutes(std::string("The Virtual Organization ") + voName +
+        " is being used by one or more storage classes");
     }
 
     if(virtualOrganizationIsUsedByTapepools(conn, voName)) {
-      throw UserSpecifiedStorageClassUsedByArchiveFiles(std::string("The ") + voName +
-        " Virtual Organization is being used by one or more Tapepools");
+      throw UserSpecifiedStorageClassUsedByArchiveFiles(std::string("The Virtual Organization ") + voName +
+        " is being used by one or more Tapepools");
     }
 
     const char *const sql =
@@ -1017,13 +1017,17 @@ void RdbmsCatalogue::createTapePool(
       throw exception::UserError(std::string("Cannot create tape pool ") + name +
         " because a tape pool with the same name already exists");
     }
+    if(!virtualOrganizationExists(conn,vo)){
+      throw exception::UserError(std::string("Cannot create tape pool ") + name + \
+        " because vo : "+vo+" does not exist.");
+    }
     const uint64_t tapePoolId = getNextTapePoolId(conn);
     const time_t now = time(nullptr);
     const char *const sql =
       "INSERT INTO TAPE_POOL("
         "TAPE_POOL_ID,"
         "TAPE_POOL_NAME,"
-        "VO,"
+        "VIRTUAL_ORGANIZATION_ID,"
         "NB_PARTIAL_TAPES,"
         "IS_ENCRYPTED,"
         "SUPPLY,"
@@ -1037,10 +1041,10 @@ void RdbmsCatalogue::createTapePool(
         "LAST_UPDATE_USER_NAME,"
         "LAST_UPDATE_HOST_NAME,"
         "LAST_UPDATE_TIME)"
-      "VALUES("
+      "SELECT "
         ":TAPE_POOL_ID,"
         ":TAPE_POOL_NAME,"
-        ":VO,"
+        "VIRTUAL_ORGANIZATION_ID,"
         ":NB_PARTIAL_TAPES,"
         ":IS_ENCRYPTED,"
         ":SUPPLY,"
@@ -1053,7 +1057,11 @@ void RdbmsCatalogue::createTapePool(
 
         ":LAST_UPDATE_USER_NAME,"
         ":LAST_UPDATE_HOST_NAME,"
-        ":LAST_UPDATE_TIME)";
+        ":LAST_UPDATE_TIME "
+      "FROM "
+        "VIRTUAL_ORGANIZATION "
+      "WHERE "
+        "VIRTUAL_ORGANIZATION_NAME = :VO";
     auto stmt = conn.createStmt(sql);
 
     stmt.bindUint64(":TAPE_POOL_ID", tapePoolId);
@@ -1324,7 +1332,7 @@ std::list<TapePool> RdbmsCatalogue::getTapePools() const {
     const char *const sql =
       "SELECT "
         "TAPE_POOL.TAPE_POOL_NAME AS TAPE_POOL_NAME,"
-        "COALESCE(TAPE_POOL.VO, 'NONE') AS VO," // TBD Remove COALESCE
+        "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME AS VO,"
         "TAPE_POOL.NB_PARTIAL_TAPES AS NB_PARTIAL_TAPES,"
         "TAPE_POOL.IS_ENCRYPTED AS IS_ENCRYPTED,"
         "TAPE_POOL.SUPPLY AS SUPPLY,"
@@ -1345,11 +1353,13 @@ std::list<TapePool> RdbmsCatalogue::getTapePools() const {
         "TAPE_POOL.LAST_UPDATE_TIME AS LAST_UPDATE_TIME "
       "FROM "
         "TAPE_POOL "
+      "INNER JOIN VIRTUAL_ORGANIZATION ON "
+        "TAPE_POOL.VIRTUAL_ORGANIZATION_ID = VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_ID "
       "LEFT OUTER JOIN TAPE ON "
         "TAPE_POOL.TAPE_POOL_ID = TAPE.TAPE_POOL_ID "
       "GROUP BY "
         "TAPE_POOL.TAPE_POOL_NAME,"
-        "TAPE_POOL.VO,"
+        "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME,"
         "TAPE_POOL.NB_PARTIAL_TAPES,"
         "TAPE_POOL.IS_ENCRYPTED,"
         "TAPE_POOL.SUPPLY,"
@@ -1370,7 +1380,7 @@ std::list<TapePool> RdbmsCatalogue::getTapePools() const {
       TapePool pool;
 
       pool.name = rset.columnString("TAPE_POOL_NAME");
-      pool.vo = rset.columnString("VO");
+      pool.vo.name = rset.columnString("VO");
       pool.nbPartialTapes = rset.columnUint64("NB_PARTIAL_TAPES");
       pool.encryption = rset.columnBool("IS_ENCRYPTED");
       pool.supply = rset.columnOptionalString("SUPPLY");
@@ -1416,13 +1426,18 @@ void RdbmsCatalogue::modifyTapePoolVo(const common::dataStructures::SecurityIden
     const time_t now = time(nullptr);
     const char *const sql =
       "UPDATE TAPE_POOL SET "
-        "VO = :VO,"
+        "VIRTUAL_ORGANIZATION_ID = (SELECT VIRTUAL_ORGANIZATION_ID FROM VIRTUAL_ORGANIZATION WHERE VIRTUAL_ORGANIZATION_NAME=:VO),"
         "LAST_UPDATE_USER_NAME = :LAST_UPDATE_USER_NAME,"
         "LAST_UPDATE_HOST_NAME = :LAST_UPDATE_HOST_NAME,"
         "LAST_UPDATE_TIME = :LAST_UPDATE_TIME "
       "WHERE "
         "TAPE_POOL_NAME = :TAPE_POOL_NAME";
     auto conn = m_connPool.getConn();
+    
+    if(!virtualOrganizationExists(conn,vo)){
+      throw exception::UserError(std::string("Cannot modify tape pool ") + name +" because the vo " + vo + " does not exist");
+    }
+    
     auto stmt = conn.createStmt(sql);
     stmt.bindString(":VO", vo);
     stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username);
@@ -2644,7 +2659,7 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co
         "TAPE.VENDOR AS VENDOR,"
         "LOGICAL_LIBRARY.LOGICAL_LIBRARY_NAME AS LOGICAL_LIBRARY_NAME,"
         "TAPE_POOL.TAPE_POOL_NAME AS TAPE_POOL_NAME,"
-        "TAPE_POOL.VO AS VO,"
+        "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME AS VO,"
         "TAPE.ENCRYPTION_KEY_NAME AS ENCRYPTION_KEY_NAME,"
         "TAPE.CAPACITY_IN_BYTES AS CAPACITY_IN_BYTES,"
         "TAPE.DATA_IN_BYTES AS DATA_IN_BYTES,"
@@ -2682,7 +2697,9 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co
       "INNER JOIN TAPE_POOL ON "
         "TAPE.TAPE_POOL_ID = TAPE_POOL.TAPE_POOL_ID "
       "INNER JOIN LOGICAL_LIBRARY ON "
-        "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID";
+        "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID "
+      "INNER JOIN VIRTUAL_ORGANIZATION ON "
+        "TAPE_POOL.VIRTUAL_ORGANIZATION_ID = VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_ID";
 
     if(searchCriteria.vid ||
        searchCriteria.mediaType ||
@@ -2726,7 +2743,7 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co
     }
     if(searchCriteria.vo) {
       if(addedAWhereConstraint) sql += " AND ";
-      sql += " TAPE_POOL.VO = :VO";
+      sql += " VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME = :VO";
       addedAWhereConstraint = true;
     }
     if(searchCriteria.capacityInBytes) {
@@ -2860,7 +2877,7 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getTapesByVid(const std::se
         "TAPE.VENDOR AS VENDOR,"
         "LOGICAL_LIBRARY.LOGICAL_LIBRARY_NAME AS LOGICAL_LIBRARY_NAME,"
         "TAPE_POOL.TAPE_POOL_NAME AS TAPE_POOL_NAME,"
-        "TAPE_POOL.VO AS VO,"
+        "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME AS VO,"
         "TAPE.ENCRYPTION_KEY_NAME AS ENCRYPTION_KEY_NAME,"
         "TAPE.CAPACITY_IN_BYTES AS CAPACITY_IN_BYTES,"
         "TAPE.DATA_IN_BYTES AS DATA_IN_BYTES,"
@@ -2896,7 +2913,9 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getTapesByVid(const std::se
       "INNER JOIN TAPE_POOL ON "
         "TAPE.TAPE_POOL_ID = TAPE_POOL.TAPE_POOL_ID "
       "INNER JOIN LOGICAL_LIBRARY ON "
-        "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID";
+        "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID "
+      "INNER JOIN VIRTUAL_ORGANIZATION ON "
+        "TAPE_POOL.VIRTUAL_ORGANIZATION_ID = VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_ID";
 
     if(!vids.empty()) {
       sql += " WHERE ";
@@ -2988,7 +3007,7 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getAllTapes() const {
         "TAPE.VENDOR AS VENDOR,"
         "LOGICAL_LIBRARY.LOGICAL_LIBRARY_NAME AS LOGICAL_LIBRARY_NAME,"
         "TAPE_POOL.TAPE_POOL_NAME AS TAPE_POOL_NAME,"
-        "TAPE_POOL.VO AS VO,"
+        "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME AS VO,"
         "TAPE.ENCRYPTION_KEY_NAME AS ENCRYPTION_KEY_NAME,"
         "TAPE.CAPACITY_IN_BYTES AS CAPACITY_IN_BYTES,"
         "TAPE.DATA_IN_BYTES AS DATA_IN_BYTES,"
@@ -3024,7 +3043,9 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getAllTapes() const {
       "INNER JOIN TAPE_POOL ON "
         "TAPE.TAPE_POOL_ID = TAPE_POOL.TAPE_POOL_ID "
       "INNER JOIN LOGICAL_LIBRARY ON "
-        "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID";
+        "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID "
+      "INNER JOIN VIRTUAL_ORGANIZATION ON "
+        "TAPE_POOL.VIRTUAL_ORGANIZATION_ID = VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_ID";
 
     auto conn = m_connPool.getConn();
     auto stmt = conn.createStmt(sql);
@@ -6692,7 +6713,7 @@ std::list<TapeForWriting> RdbmsCatalogue::getTapesForWriting(const std::string &
         "TAPE.VENDOR AS VENDOR,"
         "LOGICAL_LIBRARY.LOGICAL_LIBRARY_NAME AS LOGICAL_LIBRARY_NAME,"
         "TAPE_POOL.TAPE_POOL_NAME AS TAPE_POOL_NAME,"
-        "TAPE_POOL.VO AS VO,"
+        "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME AS VO,"
         "TAPE.CAPACITY_IN_BYTES AS CAPACITY_IN_BYTES,"
         "TAPE.DATA_IN_BYTES AS DATA_IN_BYTES,"
         "TAPE.LAST_FSEQ AS LAST_FSEQ "
@@ -6702,6 +6723,8 @@ std::list<TapeForWriting> RdbmsCatalogue::getTapesForWriting(const std::string &
         "TAPE.TAPE_POOL_ID = TAPE_POOL.TAPE_POOL_ID "
       "INNER JOIN LOGICAL_LIBRARY ON "
         "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID "
+      "INNER JOIN VIRTUAL_ORGANIZATION ON "
+        "TAPE_POOL.VIRTUAL_ORGANIZATION_ID = VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_ID "
       "WHERE "
 //      "TAPE.LABEL_DRIVE IS NOT NULL AND " // Set when the tape has been labelled
 //      "TAPE.LABEL_TIME IS NOT NULL AND "  // Set when the tape has been labelled
diff --git a/catalogue/TapePool.cpp b/catalogue/TapePool.cpp
index 008de18ba4772c876fa7b63241727a71e06d8a73..fe8e6178b0cc13448cd14c95514a1b73ac33ef63 100644
--- a/catalogue/TapePool.cpp
+++ b/catalogue/TapePool.cpp
@@ -17,6 +17,7 @@
  */
 
 #include "catalogue/TapePool.hpp"
+#include "common/dataStructures/VirtualOrganization.hpp"
 
 namespace cta {
 namespace catalogue {
@@ -52,7 +53,7 @@ bool TapePool::operator!=(const TapePool &rhs) const {
 //------------------------------------------------------------------------------
 std::ostream &operator<<(std::ostream &os, const TapePool &obj) {
   os << "(name=" << obj.name
-     << " vo=" << obj.vo
+     << " vo=" << obj.vo.name
      << " nbPartialTapes=" << obj.nbPartialTapes
      << " encryption=" << obj.encryption
      << " nbTapes=" << obj.nbTapes
diff --git a/catalogue/TapePool.hpp b/catalogue/TapePool.hpp
index 5de6f27e89aa695668ed74772266eb97ff9ae15a..9eb36cfc66e3f9d55f1df2e0e93c8c449c6c9b78 100644
--- a/catalogue/TapePool.hpp
+++ b/catalogue/TapePool.hpp
@@ -24,6 +24,7 @@
 
 #include "common/dataStructures/EntryLog.hpp"
 #include "common/optional.hpp"
+#include "common/dataStructures/VirtualOrganization.hpp"
 
 namespace cta {
 namespace catalogue {
@@ -62,7 +63,7 @@ struct TapePool {
   /**
    * The virtual organisation of the tape pool.
    */
-  std::string vo;
+  common::dataStructures::VirtualOrganization vo;
 
   /**
    * The desired number of tapes that should be empty or partially filled.
diff --git a/catalogue/common_catalogue_schema.sql b/catalogue/common_catalogue_schema.sql
index 45811d2dc976f42bbf889e6d570a8459161c1564..71594ad7c929bde9c6036a55d6a8394c94a6e308 100644
--- a/catalogue/common_catalogue_schema.sql
+++ b/catalogue/common_catalogue_schema.sql
@@ -65,11 +65,10 @@ CREATE TABLE STORAGE_CLASS(
 CREATE TABLE TAPE_POOL(
   TAPE_POOL_ID            UINT64TYPE      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,
   TAPE_POOL_NAME          VARCHAR(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,
-  VO                      VARCHAR(100)    CONSTRAINT TAPE_POOL_VO_NN   NOT NULL,
+  VIRTUAL_ORGANIZATION_ID UINT64TYPE      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,
   NB_PARTIAL_TAPES        UINT64TYPE      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,
   IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,
   SUPPLY                  VARCHAR(100),
-  VIRTUAL_ORGANIZATION_ID UINT64TYPE,
   USER_COMMENT            VARCHAR(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,
   CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,
   CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,
diff --git a/cmake/CTAVersions.cmake b/cmake/CTAVersions.cmake
index d334925d30151b745b518b24fd6108f7ea6f0db3..1a7abdde17d7d0ea00cae5945c04730b26134034 100644
--- a/cmake/CTAVersions.cmake
+++ b/cmake/CTAVersions.cmake
@@ -3,8 +3,8 @@ set(CTA_VERSION 0)
 set(CTA_RELEASE 1)
 
 # Catalogue Schema Version
-set(CTA_CATALOGUE_SCHEMA_VERSION_MAJOR 1)
-set(CTA_CATALOGUE_SCHEMA_VERSION_MINOR 2)
+set(CTA_CATALOGUE_SCHEMA_VERSION_MAJOR 2)
+set(CTA_CATALOGUE_SCHEMA_VERSION_MINOR 0)
 
 # Shared object internal version (used in SONAME)
 set(CTA_SOVERSION 0)
diff --git a/continuousintegration/orchestration/tests/prepare_tests.sh b/continuousintegration/orchestration/tests/prepare_tests.sh
index f7cc72ad1be2cc118add050f9c7433cee56f15ab..719749ebfcf0687cde877997d9d55de6b6ef54e2 100755
--- a/continuousintegration/orchestration/tests/prepare_tests.sh
+++ b/continuousintegration/orchestration/tests/prepare_tests.sh
@@ -100,6 +100,10 @@ echo "Preparing CTA configuration for tests"
       --name ${TAPEDRIVES_IN_USE[${i}]}                                            \
       --comment "ctasystest library mapped to drive ${TAPEDRIVES_IN_USE[${i}]}"
   done
+
+  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin virtualorganization add  \
+    --vo vo                                                                          \
+    --comment "vo"                                                                   
   kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin tapepool add       \
     --name ctasystest                                                 \
     --vo vo                                                           \
diff --git a/scheduler/SchedulerTest.cpp b/scheduler/SchedulerTest.cpp
index 7e42fcd5ff4134a8c2e518437cc05cc5087f8eb6..e8ec3835a7fb47fc8bc1b1baf453e121f117c75d 100644
--- a/scheduler/SchedulerTest.cpp
+++ b/scheduler/SchedulerTest.cpp
@@ -217,10 +217,13 @@ public:
 
     const uint16_t nbPartialTapes = 1;
     const std::string tapePoolComment = "Tape-pool comment";
-    const std::string vo = "vo";
+    cta::common::dataStructures::VirtualOrganization vo;
+    vo.name = "vo";
+    vo.comment = "comment";
+    m_catalogue->createVirtualOrganization(s_adminOnAdminHost,vo);
     const bool tapePoolEncryption = false;
     const cta::optional<std::string> tapePoolSupply("value for the supply pool mechanism");
-    catalogue.createTapePool(s_adminOnAdminHost, s_tapePoolName, vo, nbPartialTapes, tapePoolEncryption, tapePoolSupply,
+    catalogue.createTapePool(s_adminOnAdminHost, s_tapePoolName, vo.name, nbPartialTapes, tapePoolEncryption, tapePoolSupply,
       tapePoolComment);
     const uint32_t copyNb = 1;
     const std::string archiveRouteComment = "Archive-route comment";
@@ -3412,7 +3415,7 @@ TEST_P(SchedulerTest, expandRepackRequestMoveAndAddCopies){
   std::string tapepool2Name = "tapepool2";
   const cta::optional<std::string> supply;
   catalogue.createTapePool(admin,tapepool2Name,"vo",1,false,supply,"comment");
-  
+
   std::string tapepool3Name = "tapepool3";
   catalogue.createTapePool(admin,tapepool3Name,"vo",1,false,supply,"comment"); 
   
diff --git a/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp b/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp
index 480e7324429bb6886b9441f4314efde3d41c1c8a..8898e8fb26a4b4a58f67ad72b48e5ad889e61a00 100644
--- a/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp
+++ b/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp
@@ -297,10 +297,14 @@ public:
 
     const uint16_t nbPartialTapes = 1;
     const std::string tapePoolComment = "Tape-pool comment";
-    const std::string vo = "vo";
+    cta::common::dataStructures::VirtualOrganization vo;
+    vo.name = "vo";
+    vo.comment = "comment";
+    catalogue.createVirtualOrganization(s_adminOnAdminHost,vo);
     const bool tapePoolEncryption = false;
     const cta::optional<std::string> tapePoolSupply("value for the supply pool mechanism");
-    ASSERT_NO_THROW(catalogue.createTapePool(s_adminOnAdminHost, s_tapePoolName, vo, nbPartialTapes, tapePoolEncryption,
+    
+    ASSERT_NO_THROW(catalogue.createTapePool(s_adminOnAdminHost, s_tapePoolName, vo.name, nbPartialTapes, tapePoolEncryption,
       tapePoolSupply, tapePoolComment));
     const uint32_t copyNb = 1;
     const std::string archiveRouteComment = "Archive-route comment";
diff --git a/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPackerTest.cpp b/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPackerTest.cpp
index f92e086521b7e1089bacfc7a0740c1bf7f6d100f..c82e0c241f76b133d6a45d0042a04a93129b33bd 100644
--- a/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPackerTest.cpp
+++ b/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPackerTest.cpp
@@ -121,17 +121,21 @@ const uint32_t TEST_GROUP_2 = 9754;
     const std::string logicalLibraryName = "logical_library_name";
     const bool logicalLibraryIsDisabled = false;
     const std::string tapePoolName = "tape_pool_name";
-    const std::string vo = "vo";
     const cta::optional<std::string> supply("value for the supply pool mechanism");
     const uint64_t capacityInBytes = (uint64_t)10 * 1000 * 1000 * 1000 * 1000;
     const bool disabledValue = true;
     const bool fullValue = false;
     const bool readOnlyValue = false;
     const std::string createTapeComment = "Create tape";
+    cta::common::dataStructures::VirtualOrganization vo;
+    vo.name = "vo";
+    vo.comment = "comment";
+    
     cta::common::dataStructures::SecurityIdentity admin = cta::common::dataStructures::SecurityIdentity("admin","localhost");
-
+    m_catalogue->createVirtualOrganization(admin,vo);
+    
     m_catalogue->createLogicalLibrary(admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
-    m_catalogue->createTapePool(admin, tapePoolName, vo, 2, true, supply, "Create tape pool");
+    m_catalogue->createTapePool(admin, tapePoolName, vo.name, 2, true, supply, "Create tape pool");
     m_catalogue->createTape(admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
       disabledValue, fullValue, readOnlyValue, createTapeComment);
 
@@ -266,7 +270,6 @@ const uint32_t TEST_GROUP_2 = 9754;
     const std::string logicalLibraryName = "logical_library_name";
     const bool logicalLibraryIsDisabled = false;
     const std::string tapePoolName = "tape_pool_name";
-    const std::string vo = "vo";
     const uint64_t nbPartialTapes = 2;
     const bool isEncrypted = true;
     const cta::optional<std::string> supply("value for the supply pool mechanism");
@@ -277,8 +280,14 @@ const uint32_t TEST_GROUP_2 = 9754;
     const std::string createTapeComment = "Create tape";
     cta::common::dataStructures::SecurityIdentity admin = cta::common::dataStructures::SecurityIdentity("admin","localhost");
 
+    cta::common::dataStructures::VirtualOrganization vo;
+    vo.name = "vo";
+    vo.comment = "comment";
+    
+    m_catalogue->createVirtualOrganization(admin,vo);
+    
     m_catalogue->createLogicalLibrary(admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library");
-    m_catalogue->createTapePool(admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool");
+    m_catalogue->createTapePool(admin, tapePoolName, vo.name, nbPartialTapes, isEncrypted, supply, "Create tape pool");
     m_catalogue->createTape(admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes,
       disabledValue, fullValue, readOnlyValue, createTapeComment);
 
diff --git a/xroot_plugins/XrdCtaTapePoolLs.hpp b/xroot_plugins/XrdCtaTapePoolLs.hpp
index f429df10ea137630f82b7acadb82f1adbb27085b..6ef6cfc9a38c4f75a59c5d9b19f44598b973111b 100644
--- a/xroot_plugins/XrdCtaTapePoolLs.hpp
+++ b/xroot_plugins/XrdCtaTapePoolLs.hpp
@@ -74,7 +74,7 @@ int TapePoolLsStream::fillBuffer(XrdSsiPb::OStreamBuffer<Data> *streambuf) {
     auto  tp_item = record.mutable_tpls_item();
 
     tp_item->set_name(tp.name);
-    tp_item->set_vo(tp.vo);
+    tp_item->set_vo(tp.vo.name);
     tp_item->set_num_tapes(tp.nbTapes);
     tp_item->set_num_partial_tapes(tp.nbPartialTapes);
     tp_item->set_num_physical_files(tp.nbPhysicalFiles);