diff --git a/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditor.java b/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditor.java
index 74b696fb196e3bdcae71957dcc25ff5b7ed9027a..7d2d41aae43ce04197df26d9a55bea9b1b7c9946 100644
--- a/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditor.java
+++ b/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditor.java
@@ -70,13 +70,13 @@ public class FileEditor implements DocEditor {
 	}
 
 	@Override
-	public boolean isSupportingFormat(String suffix, Mode mode) {
+	public boolean isSupportingFormat(String suffix, Mode mode, boolean hasMeta) {
 		// Both the HTML editor and the text editor supports view and edit
 		return HTML_EDITOR_SUFFIX.contains(suffix) || TEXT_EDITOR_SUFFIX.contains(suffix)? true: false;
 	}
 
 	@Override
-	public boolean isLockedForMe(VFSLeaf vfsLeaf, Mode mode, Identity identity) {
+	public boolean isLockedForMe(VFSLeaf vfsLeaf, Identity identity, Mode mode) {
 		if (Mode.EDIT.equals(mode)) {
 			return lockManager.isLockedForMe(vfsLeaf, identity, VFSLockApplicationType.vfs, null);
 		}
diff --git a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java
index de6661007953f72758524d08346f81071b36a1a3..a092b8770562219b4aeccaff168b991d44f95f45 100644
--- a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java
+++ b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java
@@ -29,7 +29,6 @@ import java.util.List;
 
 import org.olat.core.commons.editor.htmleditor.HTMLEditorConfig;
 import org.olat.core.commons.modules.bc.FolderEvent;
-import org.olat.core.commons.modules.bc.FolderLicenseHandler;
 import org.olat.core.commons.modules.bc.components.FolderComponent;
 import org.olat.core.commons.services.doceditor.DocEditor;
 import org.olat.core.commons.services.doceditor.DocEditorConfigs;
@@ -39,11 +38,8 @@ import org.olat.core.commons.services.doceditor.DocTemplates;
 import org.olat.core.commons.services.doceditor.DocumentEditorService;
 import org.olat.core.commons.services.doceditor.ui.CreateDocumentController;
 import org.olat.core.commons.services.doceditor.ui.DocEditorFullscreenController;
-import org.olat.core.commons.services.license.LicenseModule;
-import org.olat.core.commons.services.license.LicenseService;
 import org.olat.core.commons.services.notifications.NotificationsManager;
 import org.olat.core.commons.services.notifications.SubscriptionContext;
-import org.olat.core.commons.services.vfs.VFSRepositoryService;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.control.Controller;
@@ -81,14 +77,6 @@ public class CmdCreateFile extends BasicController implements FolderCommand {
 	
 	private VFSLeaf vfsLeaf;
 	
-	@Autowired
-	private LicenseService licenseService;
-	@Autowired
-	private LicenseModule licenseModule;
-	@Autowired
-	private FolderLicenseHandler licenseHandler;
-	@Autowired
-	private VFSRepositoryService vfsRepositoryService;
 	@Autowired
 	private DocumentEditorService docEditorService;
 
@@ -113,7 +101,8 @@ public class CmdCreateFile extends BasicController implements FolderCommand {
 			return null;
 		}
 		
-		DocTemplates docTemplates = DocTemplates.editables(getLocale()).build();
+		boolean hasMeta = folderComponent.getCurrentContainer().canMeta() == VFSConstants.YES;
+		DocTemplates docTemplates = DocTemplates.editables(getLocale(), hasMeta).build();
 		createCtrl = new CreateDocumentController(ureq, wControl, folderComponent.getCurrentContainer(), docTemplates);
 		listenTo(createCtrl);
 		
@@ -164,8 +153,11 @@ public class CmdCreateFile extends BasicController implements FolderCommand {
 	}
 	
 	private void doEdit(UserRequest ureq) {
+		VFSContainer currentContainer = folderComponent.getCurrentContainer();
+		boolean hasMeta = currentContainer.canMeta() == VFSConstants.YES;
+		
 		String suffix = FileUtils.getFileSuffix(vfsLeaf.getName());
-		List<DocEditor> editors = docEditorService.getEditors(suffix, DocEditor.Mode.EDIT);
+		List<DocEditor> editors = docEditorService.getEditors(suffix, DocEditor.Mode.EDIT, hasMeta);
 		// Not able to decide which editor to use -> show the folder list
 		if (editors.size() != 1) {
 			fireEvent(ureq, new FolderEvent(FolderEvent.NEW_FILE_EVENT, fileName));
@@ -175,6 +167,7 @@ public class CmdCreateFile extends BasicController implements FolderCommand {
 		
 		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder()
 				.withMode(DocEditor.Mode.EDIT)
+				.withHasMeta(hasMeta)
 				.withVersionControlled(true)
 				.build();
 		HTMLEditorConfig htmlEditorConfig = getHtmlEditorConfig();
diff --git a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java
index 95f798b810dfabf68b82ad2e208325a2c46cec7a..868eda8ce31092c649b628c3178c593f23d49df0 100644
--- a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java
+++ b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java
@@ -38,6 +38,7 @@ import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.StringHelper;
+import org.olat.core.util.vfs.VFSConstants;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
@@ -103,12 +104,8 @@ public class CmdOpenContent extends BasicController implements FolderCommand {
 		}
 		
 		VFSLeaf vfsLeaf = (VFSLeaf) currentItem;
-		VFSContainer container = VFSManager.findInheritingSecurityCallbackContainer(folderComponent.getCurrentContainer());
-		VFSSecurityCallback containerSecCallback = container.getLocalSecurityCallback();
-		DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder()
-				.withMode(getMode(vfsLeaf, containerSecCallback.canWrite()))
-				.withVersionControlled(true)
-				.build();
+		
+		DocEditorSecurityCallback secCallback = getDocEditorSecCallback(vfsLeaf);
 		HTMLEditorConfig htmlEditorConfig = getHtmlEditorConfig(vfsLeaf);
 		DocEditorConfigs configs = DocEditorConfigs.builder()
 				.addConfig(htmlEditorConfig)
@@ -119,9 +116,26 @@ public class CmdOpenContent extends BasicController implements FolderCommand {
 		return this;
 	}
 	
-	private DocEditor.Mode getMode(VFSLeaf vfsLeaf, boolean canWrite) {
-		if (canWrite && docEditorService.hasEditor(vfsLeaf, DocEditor.Mode.EDIT, getIdentity())) {
-			return DocEditor.Mode.EDIT;
+	private DocEditorSecurityCallback getDocEditorSecCallback(VFSLeaf vfsLeaf) {
+		VFSContainer currentContainer = folderComponent.getCurrentContainer();
+		boolean hasMeta = currentContainer.canMeta() == VFSConstants.YES;
+		VFSContainer container = VFSManager.findInheritingSecurityCallbackContainer(currentContainer);
+		boolean canWrite = container.getLocalSecurityCallback().canWrite();
+		
+		DocEditorSecurityCallbackBuilder secCallbackBuilder = DocEditorSecurityCallbackBuilder.builder()
+				.withVersionControlled(true)
+				.withHasMeta(hasMeta);
+		DocEditor.Mode mode = getMode(vfsLeaf, canWrite, secCallbackBuilder);
+		secCallbackBuilder.withMode(mode);
+		return secCallbackBuilder.build();
+	}
+	
+	private DocEditor.Mode getMode(VFSLeaf vfsLeaf, boolean canWrite, DocEditorSecurityCallbackBuilder secCallbackBuilder) {
+		if (canWrite) {
+			DocEditorSecurityCallback editSecCallback = secCallbackBuilder.withMode(DocEditor.Mode.EDIT).build();
+			if (docEditorService.hasEditor(vfsLeaf, getIdentity(), editSecCallback)) {
+				return DocEditor.Mode.EDIT;
+			}
 		}
 		return DocEditor.Mode.VIEW;
 	}
diff --git a/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java b/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java
index fd7e28d4a7dd4b41cb11d08c2d8a623aa55ca5c9..4c8b99219154e50ad26829306a4d3470d2eb2ae1 100644
--- a/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java
+++ b/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java
@@ -38,6 +38,8 @@ import org.olat.core.commons.modules.bc.FileSelection;
 import org.olat.core.commons.modules.bc.FolderLicenseHandler;
 import org.olat.core.commons.modules.bc.FolderManager;
 import org.olat.core.commons.services.doceditor.DocEditor.Mode;
+import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback;
+import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder;
 import org.olat.core.commons.services.doceditor.DocumentEditorService;
 import org.olat.core.commons.services.license.License;
 import org.olat.core.commons.services.license.LicenseHandler;
@@ -513,9 +515,15 @@ public class ListRenderer {
 	private String getOpenIconCss(VFSItem child, boolean canWrite, Identity identity) {
 		if (child instanceof VFSLeaf) {
 			VFSLeaf vfsLeaf = (VFSLeaf) child;
-			if (canWrite && docEditorService.hasEditor(vfsLeaf, Mode.EDIT, identity)) {
+			boolean hasMeta = vfsLeaf.canMeta() == VFSConstants.YES;
+			DocEditorSecurityCallbackBuilder secCallbackBuilder = DocEditorSecurityCallbackBuilder.builder()
+					.withVersionControlled(true)
+					.withHasMeta(hasMeta);
+			DocEditorSecurityCallback editSecCallback = secCallbackBuilder.withMode(Mode.EDIT).build();
+			DocEditorSecurityCallback viewSecCallback = secCallbackBuilder.withMode(Mode.VIEW).build();
+			if (canWrite && docEditorService.hasEditor(vfsLeaf, identity, editSecCallback)) {
 				return "o_icon_edit";
-			} else if (docEditorService.hasEditor(vfsLeaf, Mode.VIEW, identity)) {
+			} else if (docEditorService.hasEditor(vfsLeaf, identity, viewSecCallback)) {
 				return "o_icon_preview";
 			}
 		}
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/DocEditor.java b/src/main/java/org/olat/core/commons/services/doceditor/DocEditor.java
index 3720ab016f355b11c5fa812d52ef50f9f0d1d8dd..3f518075c31a8c06234cf60196aa74ed526f400b 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/DocEditor.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/DocEditor.java
@@ -48,19 +48,20 @@ public interface DocEditor {
 	 *
 	 * @param suffix
 	 * @param mode
+	 * @param hasMeta 
 	 * @return
 	 */
-	boolean isSupportingFormat(String suffix, Mode mode);
+	boolean isSupportingFormat(String suffix, Mode mode, boolean hasMeta);
 	
 	/**
 	 * Checks whether a file is locked for this identity and editor.
 	 * 
 	 * @param vfsLeaf
-	 * @param mode
 	 * @param identity
+	 * @param mode
 	 * @return true if the file is locked and therefore the identity is not able to edit the vfsLeaf with this editor.
 	 */
-	boolean isLockedForMe(VFSLeaf vfsLeaf, Mode mode, Identity identity);
+	boolean isLockedForMe(VFSLeaf vfsLeaf, Identity identity, Mode mode);
 	
 	Controller getRunController(UserRequest ureq, WindowControl wControl, Identity identity, VFSLeaf vfsLeaf,
 			DocEditorSecurityCallback securityCallback, DocEditorConfigs configs);
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallback.java b/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallback.java
index b100e62146d852040b9434e21814100210d5bfac..0b7ef142970fa9a03ed3016bdb7ffddc48b3b9d3 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallback.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallback.java
@@ -30,9 +30,11 @@ import org.olat.core.commons.services.doceditor.DocEditor.Mode;
 public interface DocEditorSecurityCallback {
 	
 	Mode getMode();
+
+	boolean hasMeta();
 	
 	boolean isVersionControlled();
-
+	
 	boolean canClose();
 	
 }
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallbackBuilder.java b/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallbackBuilder.java
index a82c7db4013b7c4889b2a78c6fc146d4bdc4ea70..c26b37f6fd4bd75688bbb47e8cc0ea9262a93b93 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallbackBuilder.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallbackBuilder.java
@@ -30,6 +30,7 @@ import org.olat.core.commons.services.doceditor.DocEditor.Mode;
 public class DocEditorSecurityCallbackBuilder {
 	
 	private Mode mode = Mode.VIEW;
+	private boolean hasMeta = true;
 	private boolean versionControlled = false;
 	private boolean canClose = true;
 	
@@ -44,6 +45,17 @@ public class DocEditorSecurityCallbackBuilder {
 		return this;
 	}
 	
+	/**
+	 * Default: true
+	 *
+	 * @param hasMeta
+	 * @return
+	 */
+	public DocEditorSecurityCallbackBuilder withHasMeta(boolean hasMeta) {
+		this.hasMeta = hasMeta;
+		return this;
+	}
+	
 	/**
 	 * Default: false
 	 *
@@ -69,6 +81,7 @@ public class DocEditorSecurityCallbackBuilder {
 	public DocEditorSecurityCallback build() {
 		VFSLeafEditorSecurityCallbackImpl secCallback = new VFSLeafEditorSecurityCallbackImpl();
 		secCallback.setMode(this.mode);
+		secCallback.setHasMeta(this.hasMeta);
 		secCallback.setVersionControlled(this.versionControlled);
 		secCallback.setCanClose(this.canClose);
 		return secCallback;
@@ -81,6 +94,7 @@ public class DocEditorSecurityCallbackBuilder {
 	public static DocEditorSecurityCallbackBuilder clone(DocEditorSecurityCallback secCallback) {
 		return builder()
 				.withMode(secCallback.getMode())
+				.withHasMeta(secCallback.hasMeta())
 				.withVersionControlled(secCallback.isVersionControlled())
 				.canClose(secCallback.canClose());
 	}
@@ -91,6 +105,7 @@ public class DocEditorSecurityCallbackBuilder {
 	private static class VFSLeafEditorSecurityCallbackImpl implements DocEditorSecurityCallback {
 
 		private Mode mode;
+		private boolean hasMeta;
 		private boolean versionControlled;
 		private boolean canClose;
 
@@ -103,6 +118,15 @@ public class DocEditorSecurityCallbackBuilder {
 			this.mode = mode;
 		}
 
+		@Override
+		public boolean hasMeta() {
+			return hasMeta;
+		}
+		
+		private void setHasMeta(boolean hasMeta) {
+			this.hasMeta = hasMeta;
+		}
+
 		@Override
 		public boolean isVersionControlled() {
 			return versionControlled;
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/DocTemplates.java b/src/main/java/org/olat/core/commons/services/doceditor/DocTemplates.java
index b03bbc79e5139ac001446635d35b108d5fd82491..be40c55a462ccf6f6ee6e421da06dd380a39ab8a 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/DocTemplates.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/DocTemplates.java
@@ -56,27 +56,27 @@ public class DocTemplates {
 		return docTemplates.isEmpty();
 	}
 	
-	public static Builder editables(Locale locale) {
+	public static Builder editables(Locale locale, boolean hasMeta) {
 		Builder builder = new Builder(locale);
 		
 		DocumentEditorService docEditorService = CoreSpringFactory.getImpl(DocumentEditorService.class);
 		
-		if (docEditorService.hasEditor("txt", EDIT)) {
+		if (docEditorService.hasEditor("txt", EDIT, hasMeta)) {
 			builder.addTxt();
 		}
-		if (docEditorService.hasEditor("html", EDIT)) {
+		if (docEditorService.hasEditor("html", EDIT, hasMeta)) {
 			builder.addHtml();
 		}
-		if (docEditorService.hasEditor("css", EDIT)) {
+		if (docEditorService.hasEditor("css", EDIT, hasMeta)) {
 			builder.addCss();
 		}
-		if (docEditorService.hasEditor("docx", EDIT)) {
+		if (docEditorService.hasEditor("docx", EDIT, hasMeta)) {
 			builder.addDocx();
 		}
-		if (docEditorService.hasEditor("xlsx", EDIT)) {
+		if (docEditorService.hasEditor("xlsx", EDIT, hasMeta)) {
 			builder.addXlsx();
 		}
-		if (docEditorService.hasEditor("pptx", EDIT)) {
+		if (docEditorService.hasEditor("pptx", EDIT, hasMeta)) {
 			builder.addPptx();
 		}
 			
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/DocumentEditorService.java b/src/main/java/org/olat/core/commons/services/doceditor/DocumentEditorService.java
index 0b79e2d75fa9805778254838a32f82a711a704db..0780c89a4c63d02a11df264b34ac4544460d134e 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/DocumentEditorService.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/DocumentEditorService.java
@@ -39,18 +39,20 @@ public interface DocumentEditorService {
 	 *
 	 * @param suffix
 	 * @param mode
+	 * @param hasMeta
 	 * @return
 	 */
-	public boolean hasEditor(String suffix, Mode mode);
+	public boolean hasEditor(String suffix, Mode mode, boolean hasMeta);
 	
 	/**
-	 * Get all enabled editors which support a file with a specific suffix. Support means usually edit or read.
+	 * Get all enabled editors which support a file with a specific suffix.
 	 *
 	 * @param suffix
 	 * @param mode
+	 * @param hasMeta
 	 * @return
 	 */
-	public List<DocEditor> getEditors(String suffix, Mode mode);
+	public List<DocEditor> getEditors(String suffix, Mode mode, boolean hasMeta);
 	
 	/**
 	 * Get the editor of a specific type.
@@ -63,13 +65,13 @@ public interface DocumentEditorService {
 	/**
 	 * Checks whether a vfsLeaf can be opened in any editor by a user and in a
 	 * specific mode. This method checks not only if a file format is supported but
-	 * also if the vfsLeaf is not locked by an other editor or user.
+	 * also e.g. if the vfsLeaf is not locked by an other editor or user.
 	 *
 	 * @param vfsLeaf
-	 * @param mode
 	 * @param identity
+	 * @param secCallback
 	 * @return
 	 */
-	public boolean hasEditor(VFSLeaf vfsLeaf, Mode mode, Identity identity);
+	public boolean hasEditor(VFSLeaf vfsLeaf, Identity identity, DocEditorSecurityCallback secCallback);
 	
 }
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraEditor.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraEditor.java
index ee71e6b32a823ed6c12807566958d730d9deb17a..9b99d38b9a59ebe0b53e2e0aa2c8ef41974aa234 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraEditor.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraEditor.java
@@ -66,12 +66,12 @@ public class CollaboraEditor implements DocEditor {
 	}
 
 	@Override
-	public boolean isSupportingFormat(String suffix, Mode mode) {
-		return collaboraService.accepts(suffix, mode);
+	public boolean isSupportingFormat(String suffix, Mode mode, boolean hasMeta) {
+		return hasMeta && collaboraService.accepts(suffix, mode);
 	}
 
 	@Override
-	public boolean isLockedForMe(VFSLeaf vfsLeaf, Mode mode, Identity identity) {
+	public boolean isLockedForMe(VFSLeaf vfsLeaf, Identity identity, Mode mode) {
 		if (collaboraService.isLockNeeded(mode)) {
 			return collaboraService.isLockedForMe(vfsLeaf, identity);
 		}
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraEditorController.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraEditorController.java
index f46bbe79da89e11a8bfb269e11bff6b6d161d9d8..3be987c5dd4592d1ddc400a31331231ab9f6e661 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraEditorController.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraEditorController.java
@@ -19,11 +19,12 @@
  */
 package org.olat.core.commons.services.doceditor.collabora.ui;
 
+import org.olat.core.commons.services.doceditor.DocEditor.Mode;
 import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback;
 import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder;
-import org.olat.core.commons.services.doceditor.DocEditor.Mode;
 import org.olat.core.commons.services.doceditor.collabora.CollaboraService;
 import org.olat.core.commons.services.doceditor.wopi.Access;
+import org.olat.core.commons.services.vfs.VFSMetadata;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.velocity.VelocityContainer;
@@ -67,18 +68,22 @@ public class CollaboraEditorController extends BasicController {
 				lock = collaboraService.lock(vfsLeaf, getIdentity());
 			}
 		}
-		this.access = collaboraService.createAccess(vfsLeaf.getMetaInfo(), getIdentity(), secCallback);
-		
 		VelocityContainer mainVC = createVelocityContainer("collabora");
-		
-		String url = CollaboraEditorUrlBuilder
-				.builder(access.getFileId(), access.getToken())
-				.withLang(ureq.getLocale().getLanguage())
-				.withCloseButton(access.canClose())
-				.build();
-		
-		mainVC.contextPut("id", "o_" + CodeHelper.getRAMUniqueID());
-		mainVC.contextPut("url", url);
+
+		VFSMetadata vfsMetadata = vfsLeaf.getMetaInfo();
+		if (vfsMetadata == null) {
+			mainVC.contextPut("warning", translate("editor.warning.no.metadata"));
+		} else {
+			this.access = collaboraService.createAccess(vfsMetadata, getIdentity(), secCallback);
+			String url = CollaboraEditorUrlBuilder
+					.builder(access.getFileId(), access.getToken())
+					.withLang(ureq.getLocale().getLanguage())
+					.withCloseButton(access.canClose())
+					.build();
+			
+			mainVC.contextPut("id", "o_" + CodeHelper.getRAMUniqueID());
+			mainVC.contextPut("url", url);
+		}
 		
 		putInitialPanel(mainVC);
 	}
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_content/collabora.html b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_content/collabora.html
index 2186c33be094d50dab9ee8350336c9462d16827f..3d21dadf1a138b7faf459a9fe27395a8d9ca99be 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_content/collabora.html
+++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_content/collabora.html
@@ -1,23 +1,29 @@
 <div class="o_collabora">
-	<iframe id="$id" src="$url" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe>
-	<script type="text/javascript">
-	/* <![CDATA[ */
-		jQuery('$id').ready(function(){
-			window.addEventListener('message', function(e){
-				try {
-					var msg = JSON.parse(e.data);
-					var msgId = msg.MessageId;
-					var args = msg.Values;
-					var deprecated = !!args.Deprecated;
-				} catch(exc) {
-					msgId = e.data;
-				}
-				
-				if (msgId === 'UI_Close' || msgId === 'close' /* deprecated */) {
-					$r.openJavaScriptCommand("close"));
-				}
+	#if($r.notNull($warning))
+		<div class="o_warning">
+			$warning
+		</div>
+	#else
+		<iframe id="$id" src="$url" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe>
+		<script type="text/javascript">
+		/* <![CDATA[ */
+			jQuery('$id').ready(function(){
+				window.addEventListener('message', function(e){
+					try {
+						var msg = JSON.parse(e.data);
+						var msgId = msg.MessageId;
+						var args = msg.Values;
+						var deprecated = !!args.Deprecated;
+					} catch(exc) {
+						msgId = e.data;
+					}
+					
+					if (msgId === 'UI_Close' || msgId === 'close' /* deprecated */) {
+						$r.openJavaScriptCommand("close"));
+					}
+				});
 			});
-		});
-	/* ]]> */
-	</script>
+		/* ]]> */
+		</script>
+	#end
 </div>
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_de.properties
index e3c05f86be29ade552dc780c50228a6cfcd8e9ab..a66c8a053efd7567486d19e3c59cf3b650d00d43 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_de.properties
@@ -7,4 +7,5 @@ admin.url=URL
 admin.test=Test
 admin.title=Collabora Online
 editor.display.name=Collabora Online
-editor.warning.locked=Das Dokument wird bereits in einem anderen Editor bearbeitet und kann deshalb in Collabora Online nicht mehr bearbeitet werden.
\ No newline at end of file
+editor.warning.locked=Das Dokument wird bereits in einem anderen Editor bearbeitet und kann deshalb in Collabora Online nicht mehr bearbeitet werden.
+editor.warning.no.metadata=Dieses Dokument kann nicht angezeigt werden!
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_en.properties
index 8f490c027cde0c05102239d3998435f870ab68c7..f3eb23101becaaf4fafa16068132337b7e7c354d 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_en.properties
@@ -7,4 +7,5 @@ admin.url=URL
 admin.test=Test
 admin.title=Collabora Online
 editor.display.name=Collabora Online
-editor.warning.locked=That document is already edited in another editor and therefore it is displayed in a read-onyl view.
\ No newline at end of file
+editor.warning.locked=That document is already edited in another editor and therefore it is displayed in a read-onyl view.
+editor.warning.no.metadata=It is not possible to display that document.
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/manager/DocumentEditorServiceImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/manager/DocumentEditorServiceImpl.java
index e94be29f5584cf3314ee3a118864567525837850..2078998887a292470146799df80f617450a3969d 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/manager/DocumentEditorServiceImpl.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/manager/DocumentEditorServiceImpl.java
@@ -24,8 +24,9 @@ import java.util.Optional;
 import java.util.stream.Collectors;
 
 import org.olat.core.commons.services.doceditor.DocEditor;
-import org.olat.core.commons.services.doceditor.DocumentEditorService;
 import org.olat.core.commons.services.doceditor.DocEditor.Mode;
+import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback;
+import org.olat.core.commons.services.doceditor.DocumentEditorService;
 import org.olat.core.id.Identity;
 import org.olat.core.util.FileUtils;
 import org.olat.core.util.vfs.VFSLeaf;
@@ -45,21 +46,21 @@ public class DocumentEditorServiceImpl implements DocumentEditorService {
 	private List<DocEditor> editors;
 	
 	@Override
-	public boolean hasEditor(String suffix, Mode mode) {
+	public boolean hasEditor(String suffix, Mode mode, boolean hasMeta) {
 		if (mode == null) return false;
 		
 		return editors.stream()
 				.filter(DocEditor::isEnable)
-				.filter(editor -> editor.isSupportingFormat(suffix, mode))
+				.filter(editor -> editor.isSupportingFormat(suffix, mode, hasMeta))
 				.findFirst()
 				.isPresent();
 	}
 
 	@Override
-	public List<DocEditor> getEditors(String suffix, Mode mode) {
+	public List<DocEditor> getEditors(String suffix, Mode mode, boolean hasMeta) {
 		return editors.stream()
 				.filter(DocEditor::isEnable)
-				.filter(editor -> editor.isSupportingFormat(suffix, mode))
+				.filter(editor -> editor.isSupportingFormat(suffix, mode, hasMeta))
 				.collect(Collectors.toList());
 	}
 
@@ -72,17 +73,14 @@ public class DocumentEditorServiceImpl implements DocumentEditorService {
 	}
 	
 	@Override
-	public boolean hasEditor(VFSLeaf vfsLeaf, Mode mode, Identity identity) {
-		if (mode == null) return false;
-		
+	public boolean hasEditor(VFSLeaf vfsLeaf, Identity identity, DocEditorSecurityCallback secCallback) {
 		String suffix = FileUtils.getFileSuffix(vfsLeaf.getName());
 		return editors.stream()
 				.filter(DocEditor::isEnable)
-				.filter(editor -> editor.isSupportingFormat(suffix, mode))
-				.filter(editor -> !editor.isLockedForMe(vfsLeaf, mode, identity))
+				.filter(editor -> editor.isSupportingFormat(suffix, secCallback.getMode(), secCallback.hasMeta()))
+				.filter(editor -> !editor.isLockedForMe(vfsLeaf, identity, secCallback.getMode()))
 				.findFirst()
 				.isPresent();
-		
 	}
 
 }
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorConfigController.java b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorConfigController.java
index 7ba262e4cdf34ea23af630037ddc6f885fe5d02f..c34c132099ab3af46d95b365e89d20580545d7db 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorConfigController.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorConfigController.java
@@ -67,7 +67,7 @@ public class DocEditorConfigController extends BasicController implements Activa
 		super(ureq, wControl);
 		this.guiEditorKey = getGuiPrefixKey(vfsLeaf);
 		String suffix = FileUtils.getFileSuffix(vfsLeaf.getName());
-		editors = editorService.getEditors(suffix, secCallback.getMode());
+		editors = editorService.getEditors(suffix, secCallback.getMode(), secCallback.hasMeta());
 		
 		VelocityContainer mainVC = createVelocityContainer("editor_config");
 		
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAUIFactory.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAUIFactory.java
index ba3c345b977c20f9a1768fa615144597865b84e3..104e9f7643cf10105d61b7eefffc550b6aff9722 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTAUIFactory.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAUIFactory.java
@@ -26,10 +26,12 @@ import java.util.Locale;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.editor.htmleditor.HTMLEditorConfig;
 import org.olat.core.commons.services.doceditor.DocEditor.Mode;
-import org.olat.core.commons.services.doceditor.DocTemplates;
 import org.olat.core.commons.services.doceditor.DocEditorConfigs;
-import org.olat.core.commons.services.doceditor.DocumentEditorService;
+import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback;
+import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder;
+import org.olat.core.commons.services.doceditor.DocTemplates;
 import org.olat.core.commons.services.doceditor.DocTemplates.Builder;
+import org.olat.core.commons.services.doceditor.DocumentEditorService;
 import org.olat.core.id.Identity;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSLeaf;
@@ -46,9 +48,11 @@ class GTAUIFactory {
 	
 	static Mode getOpenMode(VFSLeaf vfsLeaf, Identity identity, boolean readOnly) {
 		DocumentEditorService docEditorService = CoreSpringFactory.getImpl(DocumentEditorService.class);
-		if (!readOnly && docEditorService.hasEditor(vfsLeaf, Mode.EDIT, identity)) {
+		DocEditorSecurityCallback editSC = DocEditorSecurityCallbackBuilder.builder().withMode(Mode.EDIT).build();
+		DocEditorSecurityCallback viewSC = DocEditorSecurityCallbackBuilder.builder().withMode(Mode.VIEW).build();
+		if (!readOnly && docEditorService.hasEditor(vfsLeaf, identity, editSC)) {
 			return Mode.EDIT;
-		} else if (docEditorService.hasEditor(vfsLeaf, Mode.VIEW, identity)) {
+		} else if (docEditorService.hasEditor(vfsLeaf, identity, viewSC)) {
 			return Mode.VIEW;
 		}
 		return null;
@@ -72,16 +76,16 @@ class GTAUIFactory {
 	static DocTemplates htmlOffice(Locale locale) {
 		DocumentEditorService docEditorService = CoreSpringFactory.getImpl(DocumentEditorService.class);
 		Builder builder = DocTemplates.builder(locale);
-		if (docEditorService.hasEditor("html", EDIT)) {
+		if (docEditorService.hasEditor("html", EDIT, true)) {
 			builder.addHtml();
 		}
-		if (docEditorService.hasEditor("docx", EDIT)) {
+		if (docEditorService.hasEditor("docx", EDIT, true)) {
 			builder.addDocx();
 		}
-		if (docEditorService.hasEditor("xlsx", EDIT)) {
+		if (docEditorService.hasEditor("xlsx", EDIT, true)) {
 			builder.addXlsx();
 		}
-		if (docEditorService.hasEditor("pptx", EDIT)) {
+		if (docEditorService.hasEditor("pptx", EDIT, true)) {
 			builder.addPptx();
 		}
 		return builder.build();
diff --git a/src/main/java/org/olat/modules/portfolio/handler/CreateFileHandler.java b/src/main/java/org/olat/modules/portfolio/handler/CreateFileHandler.java
index 4053153fe37a1dd7ba30e6da344f143bbe058edb..f2a58e3c0cd98d00b9d1adf9679ef0d35e3d3b9a 100644
--- a/src/main/java/org/olat/modules/portfolio/handler/CreateFileHandler.java
+++ b/src/main/java/org/olat/modules/portfolio/handler/CreateFileHandler.java
@@ -43,13 +43,13 @@ public class CreateFileHandler extends FileHandler {
 	public static DocTemplates getEditableTemplates(Locale locale) {
 		DocumentEditorService docEditorService = CoreSpringFactory.getImpl(DocumentEditorService.class);
 		Builder builder = DocTemplates.builder(locale);
-		if (docEditorService.hasEditor("docx", EDIT)) {
+		if (docEditorService.hasEditor("docx", EDIT, true)) {
 			builder.addDocx();
 		}
-		if (docEditorService.hasEditor("xlsx", EDIT)) {
+		if (docEditorService.hasEditor("xlsx", EDIT, true)) {
 			builder.addXlsx();
 		}
-		if (docEditorService.hasEditor("pptx", EDIT)) {
+		if (docEditorService.hasEditor("pptx", EDIT, true)) {
 			builder.addPptx();
 		}
 		return builder.build();
diff --git a/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java b/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java
index 39325491296d1f12b563c0fe5eb8297c4ebaf01f..c2f72f736151e46a25bbd2cbf4c32e205d47db94 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java
@@ -806,7 +806,7 @@ public class PageRunController extends BasicController implements TooledControll
 		private boolean isCreateFilePossible() {
 			List<DocTemplate> editableTemplates = CreateFileHandler.getEditableTemplates(getLocale()).getTemplates();
 			for (DocTemplate docTemplate: editableTemplates) {
-				if (vfsRepositoryService.hasEditor(docTemplate.getSuffix(), Mode.EDIT)) {
+				if (vfsRepositoryService.hasEditor(docTemplate.getSuffix(), Mode.EDIT, true)) {
 					return true;
 				}
 			}
diff --git a/src/main/java/org/olat/modules/portfolio/ui/media/FileMediaController.java b/src/main/java/org/olat/modules/portfolio/ui/media/FileMediaController.java
index fb492c9f32a5c7cd0584c883a03104683719bd52..4790429ac0c20a52caec42779695d40466286930 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/media/FileMediaController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/media/FileMediaController.java
@@ -140,13 +140,13 @@ public class FileMediaController extends BasicController implements PageElementE
 		if (editLink != null) mainVC.remove(editLink);
 		
 		if (vfsLeaf != null && !hints.isToPdf()) {
-			Mode mode = getOpenMode();
-			if (docEditorService.hasEditor(vfsLeaf, mode, getIdentity())) {
+			DocEditorSecurityCallback secCallback = getSecurityCallback();
+			if (secCallback != null) {
 				editLink = LinkFactory.createCustomLink("edit", "edit", "", Link.NONTRANSLATED | Link.LINK, mainVC,
 						this);
-				String editIcon = Mode.EDIT.equals(mode)? "o_icon_edit": "o_icon_preview";
+				String editIcon = Mode.EDIT.equals(secCallback.getMode())? "o_icon_edit": "o_icon_preview";
 				editLink.setIconLeftCSS("o_icon " + editIcon);
-				editLink.setUserObject(mode);
+				editLink.setUserObject(secCallback);
 			}
 		}
 	}
@@ -162,13 +162,15 @@ public class FileMediaController extends BasicController implements PageElementE
 		updateUI();
 	}
 	
-	private Mode getOpenMode() {
+	private DocEditorSecurityCallback getSecurityCallback() {
+		DocEditorSecurityCallback editSC = DocEditorSecurityCallbackBuilder.builder().withMode(Mode.EDIT).build();
+		DocEditorSecurityCallback viewSC = DocEditorSecurityCallbackBuilder.builder().withMode(Mode.VIEW).build();
 		if (isEditingExcluded()) {
 			return null;
-		} else if (editMode && docEditorService.hasEditor(vfsLeaf, Mode.EDIT, getIdentity())) {
-			return Mode.EDIT;
-		} else if (docEditorService.hasEditor(vfsLeaf, Mode.VIEW, getIdentity())) {
-			return Mode.VIEW;
+		} else if (editMode && docEditorService.hasEditor(vfsLeaf, getIdentity(), editSC)) {
+			return editSC;
+		} else if (docEditorService.hasEditor(vfsLeaf, getIdentity(), viewSC)) {
+			return viewSC;
 		}
 		return null;
 	}
@@ -181,8 +183,8 @@ public class FileMediaController extends BasicController implements PageElementE
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
 		if (source == editLink) {
-			Mode mode = (Mode)editLink.getUserObject();
-			doOpen(ureq, mode);
+			DocEditorSecurityCallback secCallback = (DocEditorSecurityCallback)editLink.getUserObject();
+			doOpen(ureq, secCallback);
 		}
 	}
 
@@ -201,15 +203,12 @@ public class FileMediaController extends BasicController implements PageElementE
 		docEditorCtrl = null;
 	}
 
-	private void doOpen(UserRequest ureq, Mode mode) {
+	private void doOpen(UserRequest ureq, DocEditorSecurityCallback secCallback) {
 		VFSContainer container = fileStorage.getMediaContainer(media);
 		VFSItem vfsItem = container.resolve(media.getRootFilename());
 		if(vfsItem == null || !(vfsItem instanceof VFSLeaf)) {
 			showError("error.missing.file");
 		} else {
-			DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder()
-					.withMode(mode)
-					.build();
 			DocEditorConfigs configs = DocEditorConfigs.builder().build();
 			docEditorCtrl = new DocEditorFullscreenController(ureq, getWindowControl(), (VFSLeaf)vfsItem, secCallback, configs);
 			listenTo(docEditorCtrl);
diff --git a/src/main/java/org/olat/repository/handlers/DocumentEditorDelegate.java b/src/main/java/org/olat/repository/handlers/DocumentEditorDelegate.java
index fb0553ae9642b6a57dd75ab2d3dd5b4a8dab227c..8860b59066c181f382937fa14035b3b9eab0f907 100644
--- a/src/main/java/org/olat/repository/handlers/DocumentEditorDelegate.java
+++ b/src/main/java/org/olat/repository/handlers/DocumentEditorDelegate.java
@@ -79,7 +79,7 @@ public class DocumentEditorDelegate implements WebDocumentCreateDelegate, WebDoc
 
 	private boolean canEdit() {
 		DocumentEditorService docEditorService = CoreSpringFactory.getImpl(DocumentEditorService.class);
-		return docEditorService.hasEditor(type.getSuffix(), Mode.EDIT);
+		return docEditorService.hasEditor(type.getSuffix(), Mode.EDIT, true);
 	}
 	
 	@Override
diff --git a/src/main/java/org/olat/repository/ui/WebDocumentRunController.java b/src/main/java/org/olat/repository/ui/WebDocumentRunController.java
index 37e147a97bb4ce9a022a6db9b1c280828bbee0eb..46ca748a839d12997d2d61e7648bb1d260dc4627 100644
--- a/src/main/java/org/olat/repository/ui/WebDocumentRunController.java
+++ b/src/main/java/org/olat/repository/ui/WebDocumentRunController.java
@@ -102,7 +102,7 @@ public class WebDocumentRunController extends BasicController {
 					mainVC.contextPut("height", 480);
 					mainVC.contextPut("width", 640);
 				}
-			} else if (docEditorService.hasEditor(extension, Mode.VIEW)) {
+			} else if (docEditorService.hasEditor(extension, Mode.VIEW, true)) {
 				DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder()
 						.withMode(Mode.VIEW)
 						.canClose(false)