diff --git a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java
index 491aba1d4b5112e6d2f67376558b6c36d382c3d8..b144de31737328c73f84d312382c853ccaef4fe6 100644
--- a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java
+++ b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java
@@ -70,6 +70,7 @@ public class VFSXStream {
 		mystream.omitField(RevisionFileImpl.class, "file");
 		mystream.omitField(VFSMetadataImpl.class, "originFile");
 		mystream.omitField(VFSMetadataImpl.class, "metaFile");
+		mystream.omitField(VFSMetadataImpl.class, "lockedByIdentKey");
 		mystream.aliasAttribute(VFSMetadataImpl.class, "cannotGenerateThumbnails", "cannotGenerateThumbnail");
 		mystream.aliasAttribute(VFSMetadataImpl.class, "author", "authorIdentKey");
 		mystream.aliasAttribute(VFSMetadataImpl.class, "licenseType", "licenseTypeKey");
diff --git a/src/test/java/org/olat/core/commons/services/vfs/manager/VFSXStreamTest.java b/src/test/java/org/olat/core/commons/services/vfs/manager/VFSXStreamTest.java
index c724f0e95cd873589278745d1d5e9b5a698b49e3..6ce8c325c56f843ad4905a81baf9e31251dbd3fd 100644
--- a/src/test/java/org/olat/core/commons/services/vfs/manager/VFSXStreamTest.java
+++ b/src/test/java/org/olat/core/commons/services/vfs/manager/VFSXStreamTest.java
@@ -50,7 +50,19 @@ public class VFSXStreamTest extends OlatTestCase {
 			log.error("", e);
 			throw e;
 		}
-		
+		Assert.assertNotNull(versions);
+	}
+	
+	@Test
+	public void readOldVersions_locked() throws IOException {
+		VersionsFileImpl versions = null;
+		try(InputStream in = VFSXStreamTest.class.getResourceAsStream("docx.versions.docx.xml")) {
+			versions = (VersionsFileImpl)VFSXStream.read(in);
+			
+		} catch(IOException | OLATRuntimeException e) {
+			log.error("", e);
+			throw e;
+		}
 		Assert.assertNotNull(versions);
 	}
 
diff --git a/src/test/java/org/olat/core/commons/services/vfs/manager/docx.versions.docx.xml b/src/test/java/org/olat/core/commons/services/vfs/manager/docx.versions.docx.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a8d7e80b72604405c84de3323a71916869c63cc1
--- /dev/null
+++ b/src/test/java/org/olat/core/commons/services/vfs/manager/docx.versions.docx.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<versions>
+  <versioned>true</versioned>
+  <author>openolat</author>
+  <creator>openolat</creator>
+  <revisionNr>2</revisionNr>
+  <revisions>
+    <revision>
+      <author>openolat</author>
+      <name>17C.docx</name>
+      <uuid>2a97afdc-c069-4946-b056-3ebabbfc1342</uuid>
+      <lastModified>1558539284000</lastModified>
+      <revisionNr>1</revisionNr>
+      <filename>8f201ef7-996e-4ba5-aa39-6091e52d905e_17C.docx</filename>
+      <metadata class="metadata">
+        <uuid>7a34d2ee982845f4930ffa5524b140b8</uuid>
+        <authorIdentKey>455737485</authorIdentKey>
+        <lockedByIdentKey>455737485</lockedByIdentKey>
+        <comment></comment>
+        <lockedDate>2019-05-22 15:35:56.817 UTC</lockedDate>
+        <downloadCount>1</downloadCount>
+        <locked>true</locked>
+        <originFile>/this/bcroot/course/95832818319926/foldernodes/88120182050795/2. Lehrjahr/Probe-VA/Schlussprodukt/17C.docx</originFile>
+        <metaFile>/this/bcroot/.meta/course/95832818319926/foldernodes/88120182050795/2. Lehrjahr/Probe-VA/Schlussprodukt/17C.docx.xml</metaFile>
+        <cannotGenerateThumbnail>false</cannotGenerateThumbnail>
+        <thumbnails/>
+      </metadata>
+    </revision>
+  </revisions>
+</versions>
\ No newline at end of file
diff --git a/src/test/java/org/olat/selenium/PortfolioV2Test.java b/src/test/java/org/olat/selenium/PortfolioV2Test.java
index 6dafc706657b8df597afd42121ca1cb928f0828b..56d6993018660096d6c21533e0ad1fac23353a54 100644
--- a/src/test/java/org/olat/selenium/PortfolioV2Test.java
+++ b/src/test/java/org/olat/selenium/PortfolioV2Test.java
@@ -31,7 +31,6 @@ import org.jboss.arquillian.drone.api.annotation.Drone;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Assert;
-import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.olat.selenium.page.LoginPage;
@@ -62,7 +61,6 @@ import org.olat.test.JunitTestHelper;
 import org.olat.test.rest.UserRestClient;
 import org.olat.user.restapi.UserVO;
 import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.firefox.FirefoxDriver;
 
 import com.dumbster.smtp.SmtpMessage;
 
@@ -640,7 +638,6 @@ public class PortfolioV2Test extends Deployments {
 	@RunAsClient
 	public void binderAssessment(@Drone @User WebDriver reiBrowser)
 			throws IOException, URISyntaxException {
-		Assume.assumeFalse(reiBrowser instanceof FirefoxDriver);
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("rei");
diff --git a/src/test/java/org/olat/selenium/page/core/ContactPage.java b/src/test/java/org/olat/selenium/page/core/ContactPage.java
index d3e87f6e67e82afc75621f7d5101a6eb87eaea94..be03b12295ad631b3e7d5075016504df02e3f223 100644
--- a/src/test/java/org/olat/selenium/page/core/ContactPage.java
+++ b/src/test/java/org/olat/selenium/page/core/ContactPage.java
@@ -26,7 +26,6 @@ import org.olat.selenium.page.graphene.OOGraphene;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
-import org.openqa.selenium.firefox.FirefoxDriver;
 
 /**
  * 
@@ -54,10 +53,10 @@ public class ContactPage {
 	public ContactPage setContent(String subject, String body) {
 		By subjectBy = By.cssSelector("div.o_sel_contact_subject  input[type='text']");
 		OOGraphene.waitElement(subjectBy, browser);
-		browser.findElement(subjectBy).sendKeys(subject);
+		OOGraphene.waitTinymce(browser);
 		
+		browser.findElement(subjectBy).sendKeys(subject);
 		String containerCssSelector = "div.o_sel_contact_body";
-		OOGraphene.waitTinymce(browser);
 		OOGraphene.tinymce(body, containerCssSelector, browser);
 		return this;
 	}
@@ -65,13 +64,11 @@ public class ContactPage {
 	public ContactPage send() {
 		By buttonsBy = By.xpath("//div[contains(@class,'o_sel_contact_buttons')]");
 		OOGraphene.scrollTo(buttonsBy, browser);
-		if(browser instanceof FirefoxDriver) {
-			OOGraphene.waitingALittleLonger();
-		}
+
 		By sendBy = By.cssSelector("fieldset.o_sel_contact_form button.btn-primary");
 		browser.findElement(sendBy).click();
 		By disabledBy = By.cssSelector("fieldset.o_sel_contact_form div.o_sel_contact_body div.o_disabled");
-		OOGraphene.waitElementSlowly(disabledBy, 10, browser);
+		OOGraphene.waitElement(disabledBy, browser);
 		
 		OOGraphene.moveTop(browser);
 		OOGraphene.waitAndCloseBlueMessageWindow(browser);
diff --git a/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java b/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java
index 5279b7b15f184a3f6dc64552599dc1fc4776fd91..1626fc3374ab84fa1970f1163ade7d23f46d6c5a 100644
--- a/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java
+++ b/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java
@@ -21,9 +21,7 @@ package org.olat.selenium.page.course;
 
 import java.util.List;
 
-import org.apache.logging.log4j.Logger;
 import org.junit.Assert;
-import org.olat.core.logging.Tracing;
 import org.olat.selenium.page.graphene.OOGraphene;
 import org.olat.user.restapi.UserVO;
 import org.openqa.selenium.By;
@@ -37,8 +35,7 @@ import org.openqa.selenium.WebElement;
  *
  */
 public class AssessmentToolPage {
-	private static final Logger log = Tracing.createLoggerFor(AssessmentToolPage.class);
-	
+
 	private final WebDriver browser;
 	
 	public AssessmentToolPage(WebDriver browser) {
diff --git a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
index 05a615b6572fc7bf87683b0ee6f2eca24c7a743b..12a30e22ba82bcb6c3f1c7885f14704867a99fdb 100644
--- a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
@@ -73,13 +73,13 @@ public class CourseEditorPageFragment {
 	}
 	
 	public static CourseEditorPageFragment getEditor(WebDriver browser) {
-		OOGraphene.waitElement(editorBy, 5, browser);
+		OOGraphene.waitElement(editorBy, browser);
 		OOGraphene.closeBlueMessageWindow(browser);
 		return new CourseEditorPageFragment(browser);
 	}
 	
 	public CourseEditorPageFragment assertOnEditor() {
-		OOGraphene.waitElement(editorBy, 5, browser);
+		OOGraphene.waitElement(editorBy, browser);
 		List<WebElement> editorEls = browser.findElements(editorBy);
 		Assert.assertFalse(editorEls.isEmpty());
 		Assert.assertTrue(editorEls.get(0).isDisplayed());
@@ -88,7 +88,7 @@ public class CourseEditorPageFragment {
 	
 	public CourseEditorPageFragment assertOnWarning() {
 		By warningBy = By.cssSelector("div.modal-dialog div.alert.alert-warning");
-		OOGraphene.waitElement(warningBy, 2, browser);
+		OOGraphene.waitElement(warningBy, browser);
 		List<WebElement> warningEls = browser.findElements(warningBy);
 		Assert.assertFalse(warningEls.isEmpty());
 		OOGraphene.closeModalDialogWindow(browser);
diff --git a/src/test/java/org/olat/selenium/page/repository/ScormPage.java b/src/test/java/org/olat/selenium/page/repository/ScormPage.java
index 64cb93599299499ca92e6af4acfa25f59d43858d..91b2c25a4d6d01ee7c348546765815fd05a3d4d0 100644
--- a/src/test/java/org/olat/selenium/page/repository/ScormPage.java
+++ b/src/test/java/org/olat/selenium/page/repository/ScormPage.java
@@ -21,7 +21,6 @@ package org.olat.selenium.page.repository;
 
 import java.util.List;
 
-import org.junit.Assert;
 import org.olat.selenium.page.graphene.OOGraphene;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
@@ -43,12 +42,13 @@ public class ScormPage {
 	}
 	
 	public static ScormPage getScormPage(WebDriver browser) {
-		WebElement main = browser.findElement(By.id("o_main_wrapper"));
-		Assert.assertTrue(main.isDisplayed());
+		By mainBy = By.id("o_main_wrapper");
+		OOGraphene.waitElement(mainBy, browser);
 		return new ScormPage(browser);
 	}
 	
 	public ScormPage start() {
+		assertOnStart();
 		By startBy = By.cssSelector("button.o_sel_start_scorm");
 		browser.findElement(startBy).click();
 		OOGraphene.waitBusy(browser);
diff --git a/src/test/java/org/olat/selenium/page/user/EfficiencyStatementPage.java b/src/test/java/org/olat/selenium/page/user/EfficiencyStatementPage.java
index b5779aae87eb9ed6b860d10ccb66a3c1ac0682f7..4a370be2023fdfb7a3b76055ba0d14ebb6dc32d5 100644
--- a/src/test/java/org/olat/selenium/page/user/EfficiencyStatementPage.java
+++ b/src/test/java/org/olat/selenium/page/user/EfficiencyStatementPage.java
@@ -70,18 +70,11 @@ public class EfficiencyStatementPage {
 	 * @return
 	 */
 	public EfficiencyStatementPage assertOnCertificateAndStatements(String courseTitle) {
-		WebElement rowToAssert = getStatementRow(courseTitle);
-		boolean found = false;
-		for(int i=0; i<20; i++) {
-			By certificateDownloadBy = By.cssSelector("a i.o_icon.o_filetype_pdf");
-			List<WebElement> certificateDownloadEls = rowToAssert.findElements(certificateDownloadBy);
-			if(certificateDownloadEls.size() > 0) {
-				found = true;
-				break;
-			}
-			OOGraphene.waitingALittleLonger();
+		if(courseTitle.length() > 25) {
+			courseTitle = courseTitle.substring(0, 25);
 		}
-		Assert.assertTrue(found);
+		By courseCertificateBy = By.xpath("//div[contains(@class,'o_sel_certificates_table')]//table//tr[td[contains(text(),'" + courseTitle + "')]]/td//a/i[contains(@class,'o_filetype_pdf')]");
+		OOGraphene.waitElementSlowly(courseCertificateBy, 30, browser);
 		return this;
 	}
 	
@@ -94,15 +87,12 @@ public class EfficiencyStatementPage {
 	 * @return
 	 */
 	public EfficiencyStatementPage assertOnStatement(String courseTitle, boolean passed) {
-		WebElement rowToAssert = getStatementRow(courseTitle);
-		Assert.assertNotNull(rowToAssert);
-		if(passed) {
-			By passedBy = By.cssSelector(".o_state.o_passed");
-			browser.findElement(passedBy);	
-		} else {
-			By failedBy = By.cssSelector(".o_state.o_failed");
-			browser.findElement(failedBy);
+		if(courseTitle.length() > 25) {
+			courseTitle = courseTitle.substring(0, 25);
 		}
+		String passedCss = passed ? "o_passed" : "o_failed";
+		By courseCertificateBy = By.xpath("//div[contains(@class,'o_sel_certificates_table')]//table//tr[td[contains(text(),'" + courseTitle + "')]]/td/span[contains(@class,'o_state')][contains(@class,'" + passedCss + "')]");
+		OOGraphene.waitElement(courseCertificateBy, browser);
 		return this;
 	}
 	
@@ -140,31 +130,14 @@ public class EfficiencyStatementPage {
 	 * @return
 	 */
 	public EfficiencyStatementPage selectStatement(String courseTitle) {
-		WebElement rowToAssert = getStatementRow(courseTitle);
-		By courseCertificateBy = By.xpath("//td//a[contains(@href,'cmd.show')]");
-		rowToAssert.findElement(courseCertificateBy).click();
-		OOGraphene.waitBusy(browser);
-		return this;
-	}
-	
-	private WebElement getStatementRow(String courseTitle) {
-		By courseCertificateBy = By.xpath("//div[contains(@class,'o_sel_certificates_table')]//table//tr");
-		
-		WebElement rowToAssert = null;
-		List<WebElement> rowsEl = browser.findElements(courseCertificateBy);
-		a_a:
-		for(WebElement rowEl:rowsEl) {
-			for(WebElement col:rowEl.findElements(By.tagName("td"))) {
-				String text = col.getText();
-				if(courseTitle.contains(text) || text.contains(courseTitle)) {
-					rowToAssert = rowEl;
-					break a_a;
-				}
-			}
+		if(courseTitle.length() > 25) {
+			courseTitle = courseTitle.substring(0, 25);
 		}
-		
-		Assert.assertNotNull(rowToAssert);
-		return rowToAssert;
+		By courseCertificateBy = By.xpath("//div[contains(@class,'o_sel_certificates_table')]//table//tr[td[contains(text(),'" + courseTitle + "')]]/td//a[contains(@href,'cmd.show')]");
+		OOGraphene.waitElement(courseCertificateBy, browser);
+		browser.findElement(courseCertificateBy).click();
+ 		OOGraphene.waitBusy(browser);
+		return this;
 	}
 
 	public EfficiencyStatementPage selectStatementSegment() {
@@ -177,8 +150,7 @@ public class EfficiencyStatementPage {
 	public MediaPage addAsMediaInList(String courseTitle) {
 		if(courseTitle.length() > 25) {
 			courseTitle = courseTitle.substring(0, 25);
-		}//
-		
+		}
 		By collectBy = By.xpath("//div[contains(@class,'o_sel_certificates_table')]//table//tr[td[contains(text(),'" + courseTitle + "')]]/td/a[contains(@href,'cmd.MEDIA')]");
 		OOGraphene.waitElement(collectBy, browser);
 		OOGraphene.scrollTo(collectBy, browser);