diff --git a/src/main/java/org/olat/core/commons/services/doceditor/collabora/manager/CollaboraServiceImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/manager/CollaboraServiceImpl.java
index 22f03d071489ad350041f560d0e2e33ae2a73134..b92f6119257df1c0f1b8a81507726ab6900cd675 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/collabora/manager/CollaboraServiceImpl.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/manager/CollaboraServiceImpl.java
@@ -62,6 +62,8 @@ public class CollaboraServiceImpl implements CollaboraService, GenericEventListe
 
 	private static final OLog log = Tracing.createLoggerFor(CollaboraServiceImpl.class);
 	
+	private static final String LOCK_APP = "collabora";
+
 	private Discovery discovery;
 	
 	@Autowired
@@ -85,7 +87,7 @@ public class CollaboraServiceImpl implements CollaboraService, GenericEventListe
 
 	@Override
 	public Access createAccess(VFSMetadata vfsMetadata, Identity identity, DocEditorSecurityCallback secCallback) {
-		return wopiService.getOrCreateAccess(vfsMetadata, identity, secCallback, null);
+		return wopiService.getOrCreateAccess(vfsMetadata, identity, secCallback, LOCK_APP, null);
 	}
 
 	@Override
@@ -142,7 +144,10 @@ public class CollaboraServiceImpl implements CollaboraService, GenericEventListe
 		if (discovery == null) {
 			String discoveryUrl = getDiscoveryUrl();
 			discovery = wopiService.getDiscovery(discoveryUrl);
-			log.info("Recieved new WOPI discovery from " + discoveryUrl);
+			if (discovery != null) {
+				log.info("Recieved new WOPI discovery from " + discoveryUrl);
+			}
+				log.warn("Not able to fetch new WOPI discovery from " + discoveryUrl);
 		}
 		return discovery;
 	}
@@ -189,12 +194,12 @@ public class CollaboraServiceImpl implements CollaboraService, GenericEventListe
 
 	@Override
 	public boolean isLockedForMe(VFSLeaf vfsLeaf, Identity identity) {
-		return lockManager.isLockedForMe(vfsLeaf, identity, VFSLockApplicationType.collaboration, "collabora");
+		return lockManager.isLockedForMe(vfsLeaf, identity, VFSLockApplicationType.collaboration, LOCK_APP);
 	}
 
 	@Override
 	public LockResult lock(VFSLeaf vfsLeaf, Identity identity) {
-		return lockManager.lock(vfsLeaf, identity, VFSLockApplicationType.collaboration, "collabora");
+		return lockManager.lock(vfsLeaf, identity, VFSLockApplicationType.collaboration, LOCK_APP);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/office365/manager/Office365ServiceImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/office365/manager/Office365ServiceImpl.java
index 0d0ece0ed0a4c69707d42c6d8ed768406c7ff6a8..560d111930576c702887d40f42cf6be0151f5ca2 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/office365/manager/Office365ServiceImpl.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/office365/manager/Office365ServiceImpl.java
@@ -101,7 +101,7 @@ public class Office365ServiceImpl implements Office365Service, GenericEventListe
 	@Override
 	public Access createAccess(VFSMetadata vfsMetadata, Identity identity, DocEditorSecurityCallback secCallback) {
 		Date expiresIn24Hours = Date.from(Instant.now().plus(Duration.ofHours(24)));
-		return wopiService.getOrCreateAccess(vfsMetadata, identity, secCallback, expiresIn24Hours);
+		return wopiService.getOrCreateAccess(vfsMetadata, identity, secCallback, LOCK_APP, expiresIn24Hours);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiService.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiService.java
index 22ee15e7f396e98fd2de8d77392a70e8b900d8f4..b50719e7c8f7413c1689ecedb928525d3c21a95e 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiService.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiService.java
@@ -61,10 +61,12 @@ public interface WopiService {
 	 * @param vfsMetadata
 	 * @param identity
 	 * @param secCallback
+	 * @param app 
 	 * @param expiresAt (optional) date when the access expires
 	 * @return
 	 */
-	Access getOrCreateAccess(VFSMetadata vfsMetadata, Identity identity, DocEditorSecurityCallback secCallback, Date expiresAt);
+	Access getOrCreateAccess(VFSMetadata vfsMetadata, Identity identity, DocEditorSecurityCallback secCallback,
+			String app, Date expiresAt);
 
 	Access getAccess(String accessToken);
 
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAO.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAO.java
index 29f3188386929939c8b618fef84a8f4ca7c1fba2..2e182747dd5cd4cc1534e978dd279d34c3a4e5c1 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAO.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAO.java
@@ -52,11 +52,12 @@ class AccessDAO {
 		dbInstance.commitAndCloseSession();
 	}
 
-	Access createAccess(VFSMetadata metadata, Identity identity, String token, boolean canEdit,
+	Access createAccess(VFSMetadata metadata, Identity identity, String app, String token, boolean canEdit,
 			boolean canClose, boolean versionControlled, Date expiresAt) {
 		AccessImpl access = new AccessImpl();
 		access.setCreationDate(new Date());
 		access.setLastModified(access.getCreationDate());
+		access.setApp(app);
 		access.setToken(token);
 		access.setCanEdit(canEdit);
 		access.setCanClose(canClose);
@@ -95,7 +96,7 @@ class AccessDAO {
 		return accesses.isEmpty() ? null : accesses.get(0);
 	}
 
-	Access loadAccess(VFSMetadata metadata, Identity identity) {
+	Access loadAccess(VFSMetadata metadata, Identity identity, String app) {
 		if (metadata == null || identity == null) return null;
 		
 		QueryBuilder sb = new QueryBuilder();
@@ -105,11 +106,13 @@ class AccessDAO {
 		sb.append("       join fetch access.identity identity");
 		sb.and().append("access.metadata.key = :metadataKey");
 		sb.and().append("access.identity.key = :identityKey");
+		sb.and().append("access.app = :app");
 
 		List<Access> accesses = dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), Access.class)
 				.setParameter("metadataKey", metadata.getKey())
 				.setParameter("identityKey", identity.getKey())
+				.setParameter("app", app)
 				.getResultList();
 		return accesses.isEmpty() ? null : accesses.get(0);
 	}
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImpl.java
index bef4f7c7d7d831b05c64a8f3bbf2989b01786a9c..7f67adbe47e45126a05daaf36f4e2b1ad0bfdece 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImpl.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImpl.java
@@ -119,8 +119,9 @@ public class WopiServiceImpl implements WopiService {
 	}
 
 	@Override
-	public Access getOrCreateAccess(VFSMetadata vfsMetadata, Identity identity, DocEditorSecurityCallback secCallback, Date expiresAt) {
-		Access access = accessDao.loadAccess(vfsMetadata, identity);
+	public Access getOrCreateAccess(VFSMetadata vfsMetadata, Identity identity, DocEditorSecurityCallback secCallback,
+			String app, Date expiresAt) {
+		Access access = accessDao.loadAccess(vfsMetadata, identity, app);
 		if (access != null) {
 			if (accessUnchanged(access, secCallback) && !expired(access)) {
 				access = accessDao.updateExpiresAt(access, expiresAt);
@@ -129,7 +130,8 @@ public class WopiServiceImpl implements WopiService {
 			accessDao.deleteAccess(access.getToken());
 		}
 		
-		return accessDao.createAccess(vfsMetadata, identity, createToke(), getCanEdit(secCallback), secCallback.canClose(), secCallback.isVersionControlled(), expiresAt);
+		return accessDao.createAccess(vfsMetadata, identity, app, createToke(), getCanEdit(secCallback),
+				secCallback.canClose(), secCallback.isVersionControlled(), expiresAt);
 	}
 
 	private boolean accessUnchanged(Access access, DocEditorSecurityCallback secCallback) {
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/AccessImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/AccessImpl.java
index 7a1e7e604572048625c8ea2a68cf38b3153be539..cb508ad7d949d064a02a34338a02e47970080f9b 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/AccessImpl.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/AccessImpl.java
@@ -66,6 +66,8 @@ public class AccessImpl implements Access, Persistable {
 
 	@Column(name="o_token", nullable=false, insertable=true, updatable=false)
 	private String token;
+	@Column(name="o_app", nullable=false, insertable=true, updatable=false)
+	private String app;
 	@Column(name="o_expires_at", nullable=true, insertable=true, updatable=true)
 	private Date expiresAt;
 	@Column(name="o_can_edit", nullable=false, insertable=true, updatable=false)
@@ -119,6 +121,14 @@ public class AccessImpl implements Access, Persistable {
 		this.token = token;
 	}
 
+	public String getApp() {
+		return app;
+	}
+
+	public void setApp(String app) {
+		this.app = app;
+	}
+
 	@Override
 	public Date getExpiresAt() {
 		return expiresAt;
diff --git a/src/main/resources/database/mysql/alter_13_2_x_to_13_3_0.sql b/src/main/resources/database/mysql/alter_13_2_x_to_13_3_0.sql
index 26476bca2b9865ffd09a7af8851abc7d215528fe..f3b30b1fb27601db36baab55e7f514fd30060211 100644
--- a/src/main/resources/database/mysql/alter_13_2_x_to_13_3_0.sql
+++ b/src/main/resources/database/mysql/alter_13_2_x_to_13_3_0.sql
@@ -114,6 +114,7 @@ create table o_wopi_access (
    id bigint not null auto_increment,
    creationdate datetime not null,
    lastmodified datetime not null,
+   o_app varchar(64) not null,
    o_token varchar(64) not null,
    o_expires_at datetime,
    o_can_edit bool not null,
@@ -127,7 +128,7 @@ create table o_wopi_access (
 alter table o_wopi_access ENGINE = InnoDB;
 
 create unique index idx_wopi_token_idx on o_wopi_access(o_token);
-create unique index idx_wopi_meta_ident_idx on o_wopi_access(fk_metadata, fk_identity);
+create index idx_wopi_ident_meta_idx on o_wopi_access(fk_identity, fk_metadata);
 
 
 -- Adobe Connect
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index 972e0bf3b9197d8111d14b2280d3863dc553d18d..bd469a79139adcd025df63f7608b4277299f320e 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -1800,6 +1800,7 @@ create table o_wopi_access (
    id bigint not null auto_increment,
    creationdate datetime not null,
    lastmodified datetime not null,
+   o_app varchar(64) not null,
    o_token varchar(64) not null,
    o_expires_at datetime,
    o_can_edit bool not null,
@@ -3690,7 +3691,7 @@ alter table o_vfs_metadata add constraint fvers_to_lic_type_idx foreign key (fk_
 
 -- WOPI
 create unique index idx_wopi_token_idx on o_wopi_access(o_token);
-create unique index idx_wopi_meta_ident_idx on o_wopi_access(fk_metadata, fk_identity);
+create index idx_wopi_ident_meta_idx on o_wopi_access(fk_identity, fk_metadata);
 
 -- quality management
 alter table o_qual_data_collection add constraint qual_dc_to_gen_idx foreign key (fk_generator) references o_qual_generator (id);
diff --git a/src/main/resources/database/oracle/alter_13_2_x_to_13_3_0.sql b/src/main/resources/database/oracle/alter_13_2_x_to_13_3_0.sql
index 79d127edc1cdb8491a786ae7d598c739d7182a55..10c0d65e31c3ba49f8d83570739a21994005b57a 100644
--- a/src/main/resources/database/oracle/alter_13_2_x_to_13_3_0.sql
+++ b/src/main/resources/database/oracle/alter_13_2_x_to_13_3_0.sql
@@ -115,6 +115,7 @@ create table o_wopi_access (
    id number(20) generated always as identity,
    creationdate timestamp not null,
    lastmodified timestamp not null,
+   o_app varchar(64) not null,
    o_token varchar(64) not null,
    o_expires_at timestamp,
    o_can_edit number default 0 not null,
@@ -126,7 +127,7 @@ create table o_wopi_access (
 );
 
 create unique index idx_wopi_token_idx on o_wopi_access(o_token);
-create unique index idx_wopi_meta_ident_idx on o_wopi_access(fk_metadata, fk_identity);
+create index idx_wopi_ident_meta_idx on o_wopi_access(fk_identity, fk_metadata);
 
 
 -- Adobe Connect
diff --git a/src/main/resources/database/oracle/setupDatabase.sql b/src/main/resources/database/oracle/setupDatabase.sql
index 6f757e0dcdef61b34574de46f89a4aa1599f9140..f2068a8eb61f142cd4126f3bcb719ffb538bed69 100644
--- a/src/main/resources/database/oracle/setupDatabase.sql
+++ b/src/main/resources/database/oracle/setupDatabase.sql
@@ -1726,6 +1726,7 @@ create table o_wopi_access (
    id number(20) generated always as identity,
    creationdate timestamp not null,
    lastmodified timestamp not null,
+   o_app varchar(64) not null,
    o_token varchar(64) not null,
    o_expires_at timestamp,
    o_can_edit number default 0 not null,
@@ -3719,7 +3720,7 @@ create index idx_fvers_to_lic_type_idx on o_vfs_revision (fk_license_type);
 
 -- WOPI
 create unique index idx_wopi_token_idx on o_wopi_access(o_token);
-create unique index idx_wopi_meta_ident_idx on o_wopi_access(fk_metadata, fk_identity);
+create index idx_wopi_ident_meta_idx on o_wopi_access(fk_identity, fk_metadata);
 
 -- portfolio
 alter table o_pf_binder add constraint pf_binder_resource_idx foreign key (fk_olatresource_id) references o_olatresource (resource_id);
diff --git a/src/main/resources/database/postgresql/alter_13_2_x_to_13_3_0.sql b/src/main/resources/database/postgresql/alter_13_2_x_to_13_3_0.sql
index b3d8e46401f6f9f61eb05614861eff5e96110d89..5695618bceb6fd49ae0a43df12e8b63d7e35d4a5 100644
--- a/src/main/resources/database/postgresql/alter_13_2_x_to_13_3_0.sql
+++ b/src/main/resources/database/postgresql/alter_13_2_x_to_13_3_0.sql
@@ -116,6 +116,7 @@ create table o_wopi_access (
    id bigserial,
    creationdate timestamp not null,
    lastmodified timestamp not null,
+   o_app varchar(64) not null,
    o_token varchar(64) not null,
    o_expires_at timestamp,
    o_can_edit bool not null,
@@ -127,7 +128,7 @@ create table o_wopi_access (
 );
 
 create unique index idx_wopi_token_idx on o_wopi_access(o_token);
-create unique index idx_wopi_meta_ident_idx on o_wopi_access(fk_metadata, fk_identity);
+create index idx_wopi_ident_meta_idx on o_wopi_access(fk_identity, fk_metadata);
 
 -- Adobe Connect
 create table o_aconnect_meeting (
diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql
index b3600043d83907768904f5be5f7f235d8b0891ea..d9b4360f378c0aaffb5f37f7d148d7a01a1e74a4 100644
--- a/src/main/resources/database/postgresql/setupDatabase.sql
+++ b/src/main/resources/database/postgresql/setupDatabase.sql
@@ -1693,6 +1693,7 @@ create table o_wopi_access (
    id bigserial,
    creationdate timestamp not null,
    lastmodified timestamp not null,
+   o_app varchar(64) not null,
    o_token varchar(64) not null,
    o_expires_at timestamp,
    o_can_edit bool not null,
@@ -3684,7 +3685,7 @@ create index idx_fvers_to_lic_type_idx on o_vfs_revision (fk_license_type);
 
 -- WOPI
 create unique index idx_wopi_token_idx on o_wopi_access(o_token);
-create unique index idx_wopi_meta_ident_idx on o_wopi_access(fk_metadata, fk_identity);
+create index idx_wopi_ident_meta_idx on o_wopi_access(fk_identity, fk_metadata);
 
 -- evaluation form
 alter table o_eva_form_survey add constraint eva_surv_to_surv_idx foreign key (fk_series_previous) references o_eva_form_survey (id);
diff --git a/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAOTest.java b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAOTest.java
index efc4aab8e91e8584fc5a2b7608a3de2d4803a591..5f9ed5b77d2970765fde5f334021c2ead03af51b 100644
--- a/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAOTest.java
+++ b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAOTest.java
@@ -64,13 +64,14 @@ public class AccessDAOTest extends OlatTestCase {
 	public void shouldCreateAccess() {
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		VFSMetadata vfsMetadata = vfsMetadataDAO.createMetadata(random(), "relPath", "file.name", new Date(), 1000l, false, "", "file", null);
+		String app = random();
 		String token = random();
 		boolean canEdit = false;
 		boolean canClose = true;
 		boolean versionControlled = true;
 		Date expiresAt = Date.from(Instant.now().plus(Duration.ofHours(23)));
 		
-		Access access = sut.createAccess(vfsMetadata, identity, token, canEdit, canClose, versionControlled, expiresAt);
+		Access access = sut.createAccess(vfsMetadata, identity, app, token, canEdit, canClose, versionControlled, expiresAt);
 		dbInstance.commitAndCloseSession();
 		
 		SoftAssertions softly = new SoftAssertions();
@@ -90,7 +91,7 @@ public class AccessDAOTest extends OlatTestCase {
 	public void shouldUpdateExpiresAt() {
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		VFSMetadata vfsMetadata = vfsMetadataDAO.createMetadata(random(), "relPath", "file.name", new Date(), 1000l, false, "", "file", null);
-		Access access = sut.createAccess(vfsMetadata, identity, random(), true, true, true, null);
+		Access access = sut.createAccess(vfsMetadata, identity, random(), random(), true, true, true, null);
 		dbInstance.commitAndCloseSession();
 		
 		Date expiresIn24Hours = Date.from(Instant.now().plus(Duration.ofHours(24)));
@@ -99,7 +100,6 @@ public class AccessDAOTest extends OlatTestCase {
 		
 		assertThat(access.getExpiresAt()).isCloseTo(expiresIn24Hours, 2000);
 	}
-
 	
 	@Test
 	public void shouldLoadAccessByToken() {
@@ -125,11 +125,12 @@ public class AccessDAOTest extends OlatTestCase {
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		Identity identity2 = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi2");
 		VFSMetadata vfsMetadata = vfsMetadataDAO.createMetadata(random(), "relPath", "file.name", new Date(), 1000l, false, "", "file", null);
-		Access access = sut.createAccess(vfsMetadata, identity, random(), true, true, true, null);
-		sut.createAccess(vfsMetadata, identity2, random(), true, true, true, null);
+		String app = random();
+		Access access = sut.createAccess(vfsMetadata, identity, app, random(), true, true, true, null);
+		sut.createAccess(vfsMetadata, identity2, app, random(), true, true, true, null);
 		dbInstance.commitAndCloseSession();
 		
-		Access reloadedAccess = sut.loadAccess(vfsMetadata, identity);
+		Access reloadedAccess = sut.loadAccess(vfsMetadata, identity, app);
 		
 		assertThat(reloadedAccess).isEqualTo(access);
 	}
@@ -148,11 +149,12 @@ public class AccessDAOTest extends OlatTestCase {
 	private Access createRandomAccess() {
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		VFSMetadata vfsMetadata = vfsMetadataDAO.createMetadata(random(), "relPath", "file.name", new Date(), 1000l, false, "", "file", null);
+		String app = random();
 		String token = random();
 		boolean canEdit = false;
 		boolean canClose = true;
 		boolean versionControlled = true;
 		
-		return sut.createAccess(vfsMetadata, identity, token, canEdit, canClose, versionControlled, null);
+		return sut.createAccess(vfsMetadata, identity, app, token, canEdit, canClose, versionControlled, null);
 	}
 }
diff --git a/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceTest.java b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceTest.java
index 032088511a0d596ec7a9cd5eb6f2cc3738623714..998c7d8da958fc6b39aa1284197d065691e1d098 100644
--- a/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceTest.java
+++ b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceTest.java
@@ -70,25 +70,38 @@ public class WopiServiceTest extends OlatTestCase {
 		VFSMetadata metadata = randomMetadata();
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder().build();
-		Access access = sut.getOrCreateAccess(metadata, identity, secCallback, null);
+		Access access = sut.getOrCreateAccess(metadata, identity, secCallback, "App1", null);
 		dbInstance.commitAndCloseSession();
 		
-		Access secondAccess = sut.getOrCreateAccess(metadata, identity, secCallback, null);
+		Access secondAccess = sut.getOrCreateAccess(metadata, identity, secCallback, "App1", null);
 		dbInstance.commitAndCloseSession();
 		
 		assertThat(secondAccess).isEqualTo(access);
 	}
+	
+	@Test
+	public void shouldHaveFifferentAccessPerApp() {
+		VFSMetadata metadata = randomMetadata();
+		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
+		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder().build();
+		
+		Access access1 = sut.getOrCreateAccess(metadata, identity, secCallback, "App1", null);
+		Access access2 = sut.getOrCreateAccess(metadata, identity, secCallback, "App2", null);
+		dbInstance.commitAndCloseSession();
+		
+		assertThat(access1).isNotEqualTo(access2);
+	}
 
 	@Test
 	public void shouldNotReuseAccessIfModeChanged() {
 		VFSMetadata metadata = randomMetadata();
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder().withMode(Mode.EDIT).build();
-		Access access = sut.getOrCreateAccess(metadata, identity, secCallback, null);
+		Access access = sut.getOrCreateAccess(metadata, identity, secCallback, "App1", null);
 		dbInstance.commitAndCloseSession();
 		
 		DocEditorSecurityCallback secCallbackChanged = DocEditorSecurityCallbackBuilder.builder().withMode(Mode.VIEW).build();
-		Access accessChanged = sut.getOrCreateAccess(metadata, identity, secCallbackChanged, null);
+		Access accessChanged = sut.getOrCreateAccess(metadata, identity, secCallbackChanged, "App1", null);
 		dbInstance.commitAndCloseSession();
 		
 		assertThat(accessChanged).isNotEqualTo(access);
@@ -99,11 +112,11 @@ public class WopiServiceTest extends OlatTestCase {
 		VFSMetadata metadata = randomMetadata();
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder().canClose(true).build();
-		Access access = sut.getOrCreateAccess(metadata, identity, secCallback, null);
+		Access access = sut.getOrCreateAccess(metadata, identity, secCallback, "App1", null);
 		dbInstance.commitAndCloseSession();
 		
 		DocEditorSecurityCallback secCallbackChanged = DocEditorSecurityCallbackBuilder.builder().canClose(false).build();
-		Access accessChanged = sut.getOrCreateAccess(metadata, identity, secCallbackChanged, null);
+		Access accessChanged = sut.getOrCreateAccess(metadata, identity, secCallbackChanged, "App1", null);
 		dbInstance.commitAndCloseSession();
 		
 		assertThat(accessChanged).isNotEqualTo(access);
@@ -114,11 +127,11 @@ public class WopiServiceTest extends OlatTestCase {
 		VFSMetadata metadata = randomMetadata();
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder().withVersionControlled(true).build();
-		Access access = sut.getOrCreateAccess(metadata, identity, secCallback, null);
+		Access access = sut.getOrCreateAccess(metadata, identity, secCallback, "App1", null);
 		dbInstance.commitAndCloseSession();
 		
 		DocEditorSecurityCallback secCallbackChanged = DocEditorSecurityCallbackBuilder.builder().withVersionControlled(false).build();
-		Access accessChanged = sut.getOrCreateAccess(metadata, identity, secCallbackChanged, null);
+		Access accessChanged = sut.getOrCreateAccess(metadata, identity, secCallbackChanged, "App1", null);
 		dbInstance.commitAndCloseSession();
 		
 		assertThat(accessChanged).isNotEqualTo(access);
@@ -129,11 +142,11 @@ public class WopiServiceTest extends OlatTestCase {
 		VFSMetadata metadata = randomMetadata();
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder().build();
-		sut.getOrCreateAccess(metadata, identity, secCallback, null);
+		sut.getOrCreateAccess(metadata, identity, secCallback, "App1", null);
 		dbInstance.commitAndCloseSession();
 		
 		Date expiresIn24Hours = Date.from(Instant.now().plus(Duration.ofHours(24)));
-		Access secondAccess = sut.getOrCreateAccess(metadata, identity, secCallback, expiresIn24Hours);
+		Access secondAccess = sut.getOrCreateAccess(metadata, identity, secCallback, "App1", expiresIn24Hours);
 		dbInstance.commitAndCloseSession();
 		
 		assertThat(secondAccess.getExpiresAt()).isCloseTo(expiresIn24Hours, 2000);
@@ -144,9 +157,9 @@ public class WopiServiceTest extends OlatTestCase {
 		VFSMetadata metadata = randomMetadata();
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder().withMode(Mode.EDIT).build();
-		Access access = sut.getOrCreateAccess(metadata, identity, secCallback, null);
+		Access access = sut.getOrCreateAccess(metadata, identity, secCallback, "App1", null);
 		DocEditorSecurityCallback secCallbackChanged = DocEditorSecurityCallbackBuilder.builder().withMode(Mode.VIEW).build();
-		sut.getOrCreateAccess(metadata, identity, secCallbackChanged, null);
+		sut.getOrCreateAccess(metadata, identity, secCallbackChanged, "App1", null);
 		dbInstance.commitAndCloseSession();
 		
 		Access reloadedAccess = sut.getAccess(access.getToken());
@@ -158,7 +171,7 @@ public class WopiServiceTest extends OlatTestCase {
 	public void shouldGetAccessWithoutExpiredAt() {
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder().build();
-		Access access = sut.getOrCreateAccess(randomMetadata(), identity, secCallback, null);
+		Access access = sut.getOrCreateAccess(randomMetadata(), identity, secCallback, "App1", null);
 		dbInstance.commitAndCloseSession();
 		
 		Access reloadedAccess = sut.getAccess(access.getToken());
@@ -171,7 +184,7 @@ public class WopiServiceTest extends OlatTestCase {
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder().build();
 		Date in24Hours = Date.from(Instant.now().plus(Duration.ofHours(24)));
-		Access access = sut.getOrCreateAccess(randomMetadata(), identity, secCallback, in24Hours);
+		Access access = sut.getOrCreateAccess(randomMetadata(), identity, secCallback, "App1", in24Hours);
 		dbInstance.commitAndCloseSession();
 		
 		Access reloadedAccess = sut.getAccess(access.getToken());
@@ -184,7 +197,7 @@ public class WopiServiceTest extends OlatTestCase {
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi");
 		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder().build();
 		Date expired = Date.from(Instant.now().minus(Duration.ofHours(24)));
-		Access access = sut.getOrCreateAccess(randomMetadata(), identity, secCallback, expired);
+		Access access = sut.getOrCreateAccess(randomMetadata(), identity, secCallback, "App1", expired);
 		dbInstance.commitAndCloseSession();
 		
 		Access reloadedAccess = sut.getAccess(access.getToken());