diff --git a/pom.xml b/pom.xml
index 24228ad7d53332e5f10796fc4a185fef89b3241c..6ab06c3e1a9860d99e5dd514399f81c2dab1f690 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2547,6 +2547,12 @@
 			<artifactId>arquillian-drone-impl</artifactId>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+	        <groupId>org.jboss.arquillian.extension</groupId>
+	        <artifactId>arquillian-drone-webdriver-depchain</artifactId>
+	        <type>pom</type>
+	        <scope>test</scope>
+	    </dependency>
 		<dependency>
 			<groupId>org.eu.ingwar.tools</groupId>
 			<artifactId>arquillian-suite-extension</artifactId>
@@ -2601,7 +2607,7 @@
 			<version>${version.selenium}</version>
 			<scope>test</scope>
 		</dependency>
-		<!--  Driver -->
+		<!-- Driver -->
 		<dependency>
 			<groupId>org.seleniumhq.selenium</groupId>
 			<artifactId>selenium-chrome-driver</artifactId>
@@ -2644,20 +2650,6 @@
 			<version>${version.selenium}</version>
 			<scope>test</scope>
 		</dependency>
-		<dependency>
-			<groupId>org.jboss.arquillian.graphene</groupId>
-			<artifactId>graphene-webdriver</artifactId>
-			<version>2.3.2</version>
-			<type>pom</type>
-			<scope>test</scope>
-			<exclusions>
-				<exclusion>
-					<groupId>org.seleniumhq.selenium</groupId>
-					<artifactId>htmlunit-driver</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
 		<!-- End test dependencies -->
 	</dependencies>
 	
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserRenderer.java
index b49506277190680e2c1bbfb8d296648bf54d3efa..a0ec9189f8ce90fcb754b949586ab22dba8c359b 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserRenderer.java
@@ -82,7 +82,7 @@ class JSDateChooserRenderer extends DefaultComponentRenderer {
 			sb.append("<span class='input-group-addon'>")
 			  .append("<i class='o_icon o_icon_calendar' id=\"").append(triggerId).append("\" title=\"").appendHtmlEscaped(sourceTranslator.translate("calendar.choose")).append("\"")
 			  .append(" onclick=\"jQuery('#").append(receiverId).append("').datepicker('show');\"")
-			  .append("></i></span>")
+			  .append(">\u00A0</i></span>")
 			  .append("</div></div>");//input-group
 			// date chooser javascript
 			sb.append("<script>\n /* <![CDATA[ */ \n")
diff --git a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
index cfb7b07bb4287fb92f7451b5aa0922f5cc5de521..b9b91209e9bd507a8413d06a1893501f03056ff5 100644
--- a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
+++ b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
@@ -76,13 +76,13 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre
 		this.cssClass = cssClass;
 		
 		// Add back link before the bread crumbs, when pressed delegates click to current bread-crumb - 1
-		backLink = LinkFactory.createCustomLink("back", "back", null, Link.NONTRANSLATED + Link.LINK_CUSTOM_CSS, null, this);
+		backLink = LinkFactory.createCustomLink("back", "back", "\u00A0", Link.NONTRANSLATED + Link.LINK_CUSTOM_CSS, null, this);
 		backLink.setIconLeftCSS("o_icon o_icon_back");
 		backLink.setTitle(translator.translate("back"));
 		backLink.setAccessKey("b"); // allow navigation using keyboard
 
 		// Add back link before the bread crumbs, when pressed delegates click to current bread-crumb - 1
-		closeLink = LinkFactory.createCustomLink("close", "close", null, Link.NONTRANSLATED + Link.LINK_CUSTOM_CSS, null, this);
+		closeLink = LinkFactory.createCustomLink("close", "close", "\u00A0", Link.NONTRANSLATED + Link.LINK_CUSTOM_CSS, null, this);
 		closeLink.setIconLeftCSS("o_icon o_icon_close_tool");
 		closeLink.setCustomDisplayText(translator.translate("close"));
 		closeLink.setAccessKey("x"); // allow navigation using keyboard
diff --git a/src/main/java/org/olat/course/editor/ChooseNodeController.java b/src/main/java/org/olat/course/editor/ChooseNodeController.java
index 248e5ea639e285caf61f24caedc8908909695a76..59eed28ef73e57615b5e92671676197d6d8c48f6 100644
--- a/src/main/java/org/olat/course/editor/ChooseNodeController.java
+++ b/src/main/java/org/olat/course/editor/ChooseNodeController.java
@@ -136,7 +136,7 @@ public class ChooseNodeController extends BasicController {
 		createdNode = newNodeConfig.getInstance();
 
 		// Set some default values
-		String title = new String(newNodeConfig.getLinkText(getLocale()));
+		String title = newNodeConfig.getLinkText(getLocale());
 		createdNode.setShortTitle(title);
 		createdNode.setNoAccessExplanation(translate("form.noAccessExplanation.default"));
 		
diff --git a/src/main/java/org/olat/course/member/MembersManagementMainController.java b/src/main/java/org/olat/course/member/MembersManagementMainController.java
index 7974490eaacafdfce7a5cda8df7f751f26e99f38..52da6db3a4117014bacce3c81d7591490bbdaac0 100644
--- a/src/main/java/org/olat/course/member/MembersManagementMainController.java
+++ b/src/main/java/org/olat/course/member/MembersManagementMainController.java
@@ -125,6 +125,7 @@ public class MembersManagementMainController extends MainLayoutBasicController i
 		mainVC = createVelocityContainer("main_members");
 
 		columnLayoutCtr = new LayoutMain3ColsController(ureq, getWindowControl(), menuTree, mainVC, "members-" + repoEntry.getKey());
+		columnLayoutCtr.addCssClassToMain("o_members_mgmt");
 		listenTo(columnLayoutCtr);
 		putInitialPanel(columnLayoutCtr.getInitialComponent());
 		
diff --git a/src/main/java/org/olat/course/nodes/basiclti/LTIConfigForm.java b/src/main/java/org/olat/course/nodes/basiclti/LTIConfigForm.java
index c5a496293c4a436bb66bdc012def7e52eccccb46..5f078b46335be9e1705d02c49a2cc7096ca05825 100644
--- a/src/main/java/org/olat/course/nodes/basiclti/LTIConfigForm.java
+++ b/src/main/java/org/olat/course/nodes/basiclti/LTIConfigForm.java
@@ -422,7 +422,7 @@ public class LTIConfigForm extends FormBasicController {
 		nameEl.setDisplaySize(16);
 		pair.setNameEl(nameEl);
 		
-		SingleSelection typeEl = uifactory.addDropdownSingleselect("typ_" + guid, customParamLayout, customTypeKeys, customTypeValues, null);
+		SingleSelection typeEl = uifactory.addDropdownSingleselect("typ_" + guid, null, customParamLayout, customTypeKeys, customTypeValues, null);
 		typeEl.setUserObject(pair);
 		typeEl.addActionListener(FormEvent.ONCHANGE);
 		pair.setCustomType(typeEl);
@@ -435,7 +435,7 @@ public class LTIConfigForm extends FormBasicController {
 			typeEl.select("free", true);
 		}
 		
-		SingleSelection userPropsChoice = uifactory.addDropdownSingleselect("userprops_" + guid, customParamLayout, userPropKeys, userPropValues, null);
+		SingleSelection userPropsChoice = uifactory.addDropdownSingleselect("userprops_" + guid, null, customParamLayout, userPropKeys, userPropValues, null);
 		userPropsChoice.setUserObject(pair);
 		userPropsChoice.setVisible(userprops);
 		if(userprops) {
diff --git a/src/main/java/org/olat/course/nodes/cal/CalEditController.java b/src/main/java/org/olat/course/nodes/cal/CalEditController.java
index ebb39b6d78ef178d8f0dbd0e68ab4092360231e7..6f702c4b9a99fdf8f4451482f17aa8b7cf1691e7 100644
--- a/src/main/java/org/olat/course/nodes/cal/CalEditController.java
+++ b/src/main/java/org/olat/course/nodes/cal/CalEditController.java
@@ -235,7 +235,7 @@ public class CalEditController extends ActivateableTabbableDefaultController imp
 			boolean autoDate = getAutoDate(config);
 			String[] keys = new String[]{"auto","selected"};
 			String[] values = new String[]{translate("pane.tab.auto_date"),translate("pane.tab.manual_date")};
-			autoDateEl = uifactory.addRadiosVertical("pane.tab_auto_date", formLayout, keys, values);
+			autoDateEl = uifactory.addRadiosVertical("pane.tab_auto_date", null, formLayout, keys, values);
 
 			autoDateEl.setHelpText(translate("fhelp.start_date"));
 			autoDateEl.select(autoDate ? keys[0] : keys[1], autoDate);
diff --git a/src/main/java/org/olat/group/ui/edit/_content/tab_bgGrpMngmnt.html b/src/main/java/org/olat/group/ui/edit/_content/tab_bgGrpMngmnt.html
index 63a10029802d96997404d927fbd82b60d451440c..919488376a01ea2fe1df3b6225631b705ef99868 100644
--- a/src/main/java/org/olat/group/ui/edit/_content/tab_bgGrpMngmnt.html
+++ b/src/main/java/org/olat/group/ui/edit/_content/tab_bgGrpMngmnt.html
@@ -1,4 +1,4 @@
-<fieldset>
+<fieldset class="o_sel_group_members_visibility">
   	<legend>
   		$r.contextHelpWithWrapper("Group Administration#_gruppensystem_members")
   		$r.translate("fieldset.legend.displaymembers")</legend>
@@ -9,7 +9,7 @@
   		$r.translate("fieldset.legend.allow.leaving")</legend>
   	$r.render("configMembers")
 </fieldset>
-<fieldset>
+<fieldset class="o_sel_group_members_mgmt">
 	<legend>
 		$r.translate("group.edit.tab.members")</legend>
 	<div class="o_button_group o_button_group_right">
diff --git a/src/main/java/org/olat/gui/control/_content/topnav.html b/src/main/java/org/olat/gui/control/_content/topnav.html
index 6d496be71440c341cadfe2c75c480686de291d01..17de5981abc86cbd614d7ff86d92fa2f0bf20b5e 100644
--- a/src/main/java/org/olat/gui/control/_content/topnav.html
+++ b/src/main/java/org/olat/gui/control/_content/topnav.html
@@ -10,7 +10,7 @@
 			<a id="o_sel_navbar_my_menu_caret" href="javascript:OPOL.navbar.toggleRight();">
 				$r.render("portrait")
 				<span>$myMenuLabel</span>
-				<b class="caret"></b>
+				<b class="caret"> </b>
 			</a>
 		</li>
 	#elseif(!$isInvitee)
diff --git a/src/main/java/org/olat/modules/webFeed/ui/ItemFormController.java b/src/main/java/org/olat/modules/webFeed/ui/ItemFormController.java
index ebd95a14c0f699a5fcb0da4a3d86613fc85db802..14c8a53ac7f078785577ac0835738555f8553861 100644
--- a/src/main/java/org/olat/modules/webFeed/ui/ItemFormController.java
+++ b/src/main/java/org/olat/modules/webFeed/ui/ItemFormController.java
@@ -130,7 +130,7 @@ public abstract class ItemFormController extends FormBasicController {
 		richTextConfig.disableMedia();
 		content.setVisible(hasContent());
 
-		file = uifactory.addFileElement(getWindowControl(), "file", flc);
+		file = uifactory.addFileElement(getWindowControl(), "file", null, flc);
 		file.setLabel("feed.item.file.label", null);
 		if (hasMandatoryMedia()) {
 			file.setMandatory(true, "feed.item.file.mandatory");
diff --git a/src/test/java/org/olat/selenium/AssessmentTest.java b/src/test/java/org/olat/selenium/AssessmentTest.java
index e6a0edae67a633be6bde98c6600ab0b7714c85bf..0caccd65ce145ea2f8958f9fc228c2fe1ef02f06 100644
--- a/src/test/java/org/olat/selenium/AssessmentTest.java
+++ b/src/test/java/org/olat/selenium/AssessmentTest.java
@@ -29,8 +29,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
-import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Assert;
@@ -79,8 +77,6 @@ public class AssessmentTest extends Deployments {
 	private WebDriver browser;
 	@ArquillianResource
 	private URL deploymentUrl;
-	@Page
-	private NavigationPage navBar;
 	
 	/**
 	 * An author upload a test, create a course with a test course
@@ -92,16 +88,18 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti12Test(@InitialPage LoginPage authorLoginPage)
+	public void qti12Test()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "QTI-Test-1.2-" + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/e4_test.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile);
@@ -184,18 +182,20 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti12CourseWithAssessment(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void qti12CourseWithAssessment(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
-		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
+		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
+		
 		//upload a test
 		String qtiTestTitle = "QTI-Test-1.2-" + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/e4_test.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile);
@@ -245,13 +245,13 @@ public class AssessmentTest extends Deployments {
 			.finish();
 		
 		//Ryomou open the course
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
 		
 		//open the course
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -313,6 +313,7 @@ public class AssessmentTest extends Deployments {
 			.selectUser(ryomou)
 			.assertPassed(ryomou);
 	}
+	
 	/**
 	 * An author upload a SCORM resource, create a course and use the
 	 * SCORM within. It publish the course, add a participant to the
@@ -328,18 +329,20 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void scormCourseWithAssessment(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void scormCourseWithAssessment(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
-		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
+		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
+		
 		//upload a test
 		String scormTitle = "SCORM - " + UUID.randomUUID();
 		URL scormUrl = JunitTestHelper.class.getResource("file_resources/very_simple_scorm.zip");
 		File scormFile = new File(scormUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(scormTitle, scormFile);
@@ -352,7 +355,7 @@ public class AssessmentTest extends Deployments {
 			.clickToolbarBack();
 		
 		//create a course element of type Scorm with the scorm that we create above
-		String scormNodeTitle = "SCORM";
+		String scormNodeTitle = "SCORM-Node";
 		CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser)
 			.edit();
 		courseEditor
@@ -385,13 +388,13 @@ public class AssessmentTest extends Deployments {
 			.finish();
 
 		//Ryomou open the course
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
 		
 		//open the course
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -454,19 +457,22 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void assessmentMode_manual(@InitialPage LoginPage authorLoginPage,
-			@Drone @Student WebDriver ryomouBrowser, @Drone @Participant WebDriver kanuBrowser)
+	public void assessmentMode_manual(@Drone @Student WebDriver ryomouBrowser,
+			@Drone @Participant WebDriver kanuBrowser)
 	throws IOException, URISyntaxException {
 
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
-		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
 		
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
+		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
+		
 		//upload a test
 		String qtiTestTitle = "QTI-Test-1.2-" + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/e4_test.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile);
@@ -510,7 +516,7 @@ public class AssessmentTest extends Deployments {
 		courseRuntime.members().quickAdd(kanu);
 		
 		//Kanu log in 
-		LoginPage kanuLoginPage = LoginPage.getLoginPage(kanuBrowser, deploymentUrl);
+		LoginPage kanuLoginPage = LoginPage.load(kanuBrowser, deploymentUrl);
 		kanuLoginPage
 			.loginAs(kanu.getLogin(), kanu.getPassword())
 			.resume();
@@ -530,7 +536,7 @@ public class AssessmentTest extends Deployments {
 			.confirmStart();
 
 		//Ryomou opens the course
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword());
 		//start the assessment
@@ -597,16 +603,18 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void certificatesManuallyGenerated(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver reiBrowser)
+	public void certificatesManuallyGenerated(@Drone @User WebDriver reiBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
-		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
 		
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
+		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
+		
 		//create a course
 		String courseTitle = "Course-With-Certificates-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		CoursePageFragment courseRuntime = navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -649,7 +657,7 @@ public class AssessmentTest extends Deployments {
 			.generateCertificate();
 		
 		//Participant log in
-		LoginPage reiLoginPage = LoginPage.getLoginPage(reiBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(reiBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
@@ -677,8 +685,7 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void certificatesGeneratedByTest(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver reiBrowser)
+	public void certificatesGeneratedByTest(@Drone @User WebDriver reiBrowser)
 	throws IOException, URISyntaxException {
 		
 		//create an author and a participant
@@ -688,10 +695,12 @@ public class AssessmentTest extends Deployments {
 		URL testUrl = ArquillianDeployments.class.getResource("file_resources/e4_test.zip");
 		String testTitle = "E4Test-" + UUID.randomUUID();
 		new RepositoryRestClient(deploymentUrl, author).deployResource(new File(testUrl.toURI()), "-", testTitle);
-		
+
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		//create a course
 		String courseTitle = "Certif-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -741,13 +750,13 @@ public class AssessmentTest extends Deployments {
 			.clickToolbarBack();
 		
 		//Participant log in
-		LoginPage reiLoginPage = LoginPage.getLoginPage(reiBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(reiBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
 		
 		//open the course
-		NavigationPage reiNavBar = new NavigationPage(reiBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(reiBrowser);
 		reiNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -787,17 +796,18 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void assessmentCourseElement(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void assessmentCourseElement(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
-		
+
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-Assessment-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -851,7 +861,7 @@ public class AssessmentTest extends Deployments {
 			.assertUserPassedCourseNode(assessmentNodeTitle);
 		
 		//Ryomou login
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
@@ -888,19 +898,20 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void taskWithGroupsAndStandardSettings(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser,
+	public void taskWithGroupsAndStandardSettings(@Drone @User WebDriver ryomouBrowser,
 			@Drone @Participant WebDriver kanuBrowser)
 	throws IOException, URISyntaxException {
 			
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
-		
+
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-with-group-task-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -972,10 +983,12 @@ public class AssessmentTest extends Deployments {
 			.nextPermissions()
 			.finish();
 		
-		groupPage.close();
+		groupPage
+			.close();
 		
 		//go to the course
 		CoursePageFragment coursePage = membersPage
+			.assertMembersManagement()
 			.clickToolbarBack();
 		coursePage
 			.publish()// publish the course for the participants
@@ -983,13 +996,13 @@ public class AssessmentTest extends Deployments {
 			.selectWithTitle(gtaNodeTitle);
 		
 		//Participant log in
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou)
 			.resume();
 		
 		//open the course
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -1007,13 +1020,13 @@ public class AssessmentTest extends Deployments {
 			.assertSubmissionAvailable();
 		
 		//Participant 2 log in
-		LoginPage kanuLoginPage = LoginPage.getLoginPage(kanuBrowser, deploymentUrl);
+		LoginPage kanuLoginPage = LoginPage.load(kanuBrowser, deploymentUrl);
 		kanuLoginPage
 			.loginAs(kanu)
 			.resume();
 		
 		//open the course
-		NavigationPage kanuNavBar = new NavigationPage(kanuBrowser);
+		NavigationPage kanuNavBar = NavigationPage.load(kanuBrowser);
 		kanuNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -1082,18 +1095,19 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void taskWithIndividualScoreAndRevision(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void taskWithIndividualScoreAndRevision(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 						
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou");
-		
+
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-with-individual-task-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1155,13 +1169,13 @@ public class AssessmentTest extends Deployments {
 			.selectWithTitle(gtaNodeTitle);
 		
 		//Participant log in
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou)
 			.resume();
 		
 		//open the course
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -1256,18 +1270,19 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void taskWithoutAssignment(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void taskWithoutAssignment(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 						
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou");
-		
+
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-with-task-alt-1-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1317,13 +1332,13 @@ public class AssessmentTest extends Deployments {
 			.selectWithTitle(gtaNodeTitle);
 		
 		//Participant log in
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou)
 			.resume();
 		
 		//open the course
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -1411,18 +1426,19 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void taskWithIndividualScoreNoRevision(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void taskWithIndividualScoreNoRevision(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 						
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou");
-		
+
+		LoginPage authorLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-with-individual-task-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1484,13 +1500,13 @@ public class AssessmentTest extends Deployments {
 			.selectWithTitle(gtaNodeTitle);
 		
 		//Participant log in
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou)
 			.resume();
 		
 		//open the course
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -1551,8 +1567,7 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void bulkAssessment(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver ryomouBrowser,
+	public void bulkAssessment(@Drone @User WebDriver ryomouBrowser,
 			@Drone @Participant WebDriver kanuBrowser)
 	throws IOException, URISyntaxException {
 		
@@ -1560,10 +1575,12 @@ public class AssessmentTest extends Deployments {
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
 		
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-Assessment-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1623,12 +1640,12 @@ public class AssessmentTest extends Deployments {
 			.finish();
 		
 		//Ryomou login
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou)
 			.resume();
 		
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -1640,12 +1657,12 @@ public class AssessmentTest extends Deployments {
 			.selectWithTitle(assessmentNodeTitle);
 		
 		//Second login
-		LoginPage kanuLoginPage = LoginPage.getLoginPage(kanuBrowser, deploymentUrl);
+		LoginPage kanuLoginPage = LoginPage.load(kanuBrowser, deploymentUrl);
 		kanuLoginPage
 			.loginAs(kanu)
 			.resume();
 		
-		NavigationPage kanuNavBar = new NavigationPage(kanuBrowser);
+		NavigationPage kanuNavBar = NavigationPage.load(kanuBrowser);
 		kanuNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -1685,18 +1702,19 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void taskOptionalWithIndividualScore(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void taskOptionalWithIndividualScore(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 						
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou");
-		
+
+		LoginPage authorLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-with-auto-task-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1763,13 +1781,13 @@ public class AssessmentTest extends Deployments {
 			.selectWithTitle(gtaNodeTitle);
 		
 		//Participant log in
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou)
 			.resume();
 		
 		//open the course
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -1833,18 +1851,19 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void taskWithoutSubmission(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void taskWithoutSubmission(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 						
-		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		UserVO author = new UserRestClient(deploymentUrl).createRandomAuthor();
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou");
-		
+
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-with-auto-task-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1911,13 +1930,13 @@ public class AssessmentTest extends Deployments {
 			.assertPassed();
 		
 		//Participant log in
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou)
 			.resume();
 		
 		//open the course
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -1954,18 +1973,19 @@ public class AssessmentTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void taskOptionalWithoutSubmission(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void taskOptionalWithoutSubmission(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 						
-		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		UserVO author = new UserRestClient(deploymentUrl).createRandomAuthor();
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou");
 		
+		LoginPage authorLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-with-auto-task-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -2035,13 +2055,13 @@ public class AssessmentTest extends Deployments {
 			.assertPassed();
 		
 		//Participant log in
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou)
 			.resume();
 		
 		//open the course
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
diff --git a/src/test/java/org/olat/selenium/BusinessGroupTest.java b/src/test/java/org/olat/selenium/BusinessGroupTest.java
index b04669488b983c939e0514d36f1b8385e785a9ec..a31c7ee5284c1eca6fcd5eb5d11b93095ec0e0bd 100644
--- a/src/test/java/org/olat/selenium/BusinessGroupTest.java
+++ b/src/test/java/org/olat/selenium/BusinessGroupTest.java
@@ -28,8 +28,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
-import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Assert;
@@ -72,8 +70,6 @@ public class BusinessGroupTest extends Deployments {
 	private WebDriver browser;
 	@ArquillianResource
 	private URL deploymentUrl;
-	@Page
-	private NavigationPage navBar;
 
 	/**
 	 * Create a group, search it and delete it.
@@ -84,16 +80,18 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createDeleteBusinessGroup(@InitialPage LoginPage loginPage)
+	public void createDeleteBusinessGroup()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		//go to groups
 		String groupName = "Delete-1-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openGroups(browser)
 			.createGroup(groupName, "A very little group to delete");
@@ -118,19 +116,20 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void groupMembersVisibility(@InitialPage LoginPage loginPage,
-			@Drone @Participant WebDriver participantBrowser)
+	public void groupMembersVisibility(@Drone @Participant WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createRandomUser("Selena");
 		UserVO participant = new UserRestClient(deploymentUrl).createRandomUser("Aoi");
-		
+
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		//go to groups
 		String groupName = "Group-1-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		GroupPage group = navBar
 			.openGroups(browser)
 			.createGroup(groupName, "A very little group");
@@ -147,13 +146,13 @@ public class BusinessGroupTest extends Deployments {
 			.nextPermissions()
 			.finish();
 		
-		LoginPage participantLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage participantLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		//tools
 		participantLoginPage
 			.loginAs(participant.getLogin(), participant.getPassword())
 			.resume();
 		
-		NavigationPage participantNavBar = new NavigationPage(participantBrowser);
+		NavigationPage participantNavBar = NavigationPage.load(participantBrowser);
 		participantNavBar
 				.openGroups(participantBrowser)
 				.selectGroup(groupName);
@@ -177,16 +176,18 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void collaborativeTools(@InitialPage LoginPage loginPage)
+	public void collaborativeTools()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createRandomUser("Selena");
-		
+
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		//go to groups
 		String groupName = "Group-1-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		GroupPage group = navBar
 			.openGroups(browser)
 			.createGroup(groupName, "A very little group");
@@ -280,20 +281,21 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createGroupWithWaitingList(@InitialPage LoginPage loginPage,
-			@Drone @Participant WebDriver participantBrowser,
+	public void createGroupWithWaitingList(@Drone @Participant WebDriver participantBrowser,
 			@Drone @Student WebDriver studentBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createRandomUser("Selena");
 		UserVO participant = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		UserVO student = new UserRestClient(deploymentUrl).createRandomUser("Asuka");
-	
+
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		//go to groups
 		String groupName = "Group-1-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		GroupPage group = navBar
 			.openGroups(browser)
 			.createGroup(groupName, "A group with a waiting list")
@@ -322,13 +324,13 @@ public class BusinessGroupTest extends Deployments {
 		
 
 		//participant search published groups
-		LoginPage participantLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage participantLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		//tools
 		participantLoginPage
 			.loginAs(participant.getLogin(), participant.getPassword())
 			.resume();
 		//groups
-		NavigationPage participantNavBar = new NavigationPage(participantBrowser);
+		NavigationPage participantNavBar = NavigationPage.load(participantBrowser);
 		participantNavBar
 				.openGroups(participantBrowser)
 				.publishedGroups()
@@ -340,13 +342,13 @@ public class BusinessGroupTest extends Deployments {
 		
 		
 		//student search published groups
-		LoginPage studentLoginPage = LoginPage.getLoginPage(studentBrowser, deploymentUrl);
+		LoginPage studentLoginPage = LoginPage.load(studentBrowser, deploymentUrl);
 		//tools
 		studentLoginPage
 			.loginAs(student.getLogin(), student.getPassword())
 			.resume();
 		//groups
-		NavigationPage studentNavBar = new NavigationPage(studentBrowser);
+		NavigationPage studentNavBar = NavigationPage.load(studentBrowser);
 		studentNavBar
 				.openGroups(studentBrowser)
 				.publishedGroups()
@@ -384,8 +386,7 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void confirmMembershipByGroup(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver ryomouBrowser,
+	public void confirmMembershipByGroup(@Drone @User WebDriver ryomouBrowser,
 			@Drone @Participant WebDriver participantBrowser,
 			@Drone @Student WebDriver reiBrowser)
 	throws IOException, URISyntaxException {
@@ -395,23 +396,24 @@ public class BusinessGroupTest extends Deployments {
 		
 		//admin make the confirmation of membership mandatory
 		//for groups created by standard users.
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs("administrator", "openolat")
 			.resume();
-		AdministrationPage administration = new NavigationPage(browser)
+		AdministrationPage administration = NavigationPage.load(browser)
 			.openAdministration()
 			.openGroupSettings()
 			.setGroupConfirmationForUser(true);
 		
 		//a standard user create a group
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
 		
 		//go to groups
 		String groupName = "Group-1-" + UUID.randomUUID();
-		NavigationPage rymouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage rymouNavBar = NavigationPage.load(ryomouBrowser);
 		GroupPage group = rymouNavBar
 			.openGroups(ryomouBrowser)
 			.createGroup(groupName, "Confirmation group");
@@ -436,12 +438,12 @@ public class BusinessGroupTest extends Deployments {
 			.finish();
 		
 		//participant login
-		LoginPage participantLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage participantLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		participantLoginPage
 			.loginAs(participant.getLogin(), participant.getPassword())
 			.assertOnMembershipConfirmation()
 			.confirmMembership();
-		NavigationPage participantNavBar = new NavigationPage(participantBrowser);
+		NavigationPage participantNavBar = NavigationPage.load(participantBrowser);
 		participantNavBar
 			.openGroups(participantBrowser)
 			.selectGroup(groupName)
@@ -453,7 +455,7 @@ public class BusinessGroupTest extends Deployments {
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.assertOnMembershipConfirmation()
 			.confirmMembership();
-		NavigationPage reiNavBar = new NavigationPage(reiBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(reiBrowser);
 		reiNavBar
 			.openGroups(reiBrowser)
 			.selectGroup(groupName)
@@ -476,20 +478,21 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void groupChat(@InitialPage LoginPage loginPage,
-			@Drone @Participant WebDriver kanuBrowser,
+	public void groupChat(@Drone @Participant WebDriver kanuBrowser,
 			@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
-		
+
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		//go to groups
 		String groupName = "Group-Chat-1-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		GroupPage group = navBar
 			.openGroups(browser)
 			.createGroup(groupName, "A very little group to chat");
@@ -518,23 +521,23 @@ public class BusinessGroupTest extends Deployments {
 			.finish();
 		
 		//Kanu open the group
-		LoginPage kanuLoginPage = LoginPage.getLoginPage(kanuBrowser, deploymentUrl);
+		LoginPage kanuLoginPage = LoginPage.load(kanuBrowser, deploymentUrl);
 		kanuLoginPage
 			.loginAs(kanu.getLogin(), kanu.getPassword())
 			.resume();
 		
-		NavigationPage kanuNavBar = new NavigationPage(kanuBrowser);
+		NavigationPage kanuNavBar = NavigationPage.load(kanuBrowser);
 		GroupPage kanuGroup = kanuNavBar
 			.openGroups(kanuBrowser)
 			.selectGroup(groupName);
 		
 		//Ryomou open the group
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
 		
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		IMPage ryomouIM = ryomouNavBar
 			.openGroups(ryomouBrowser)
 			.selectGroup(groupName)
@@ -584,15 +587,17 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void groupCalendar_addEditEvent(@InitialPage LoginPage loginPage)
+	public void groupCalendar_addEditEvent()
 	throws IOException, URISyntaxException {
 		UserVO coach = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(coach.getLogin(), coach.getPassword())
 			.resume();
 		
 		//go to groups
 		String groupName = "iCal-1-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		GroupPage group = navBar
 			.openGroups(browser)
 			.createGroup(groupName, "A very little group to delete");
@@ -634,15 +639,17 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void groupCalendar_recurringEvent(@InitialPage LoginPage loginPage)
+	public void groupCalendar_recurringEvent()
 	throws IOException, URISyntaxException {
 		UserVO coach = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(coach.getLogin(), coach.getPassword())
 			.resume();
 		
 		//go to groups
 		String groupName = "iCal-2-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		GroupPage group = navBar
 			.openGroups(browser)
 			.createGroup(groupName, "Calendar with a recurring event");
@@ -702,12 +709,13 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void enrollmentWithWaitingList(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser,
+	public void enrollmentWithWaitingList(@Drone @User WebDriver ryomouBrowser,
 			@Drone @Participant WebDriver reiBrowser,
 			@Drone @Student WebDriver kanuBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("kanu");
@@ -715,13 +723,14 @@ public class BusinessGroupTest extends Deployments {
 		
 		//create a course
 		String courseTitle = "Enrolment-1-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
 			.clickToolbarBack();
 
 		//create a course element of type Enrolment
-		String enNodeTitle = "Enrolment-1";
+		String enNodeTitle = "Enrol-1";
 		CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser)
 			.edit();
 		courseEditor
@@ -756,11 +765,11 @@ public class BusinessGroupTest extends Deployments {
 		};
 		for(Enrollment enrollment:participantDrivers) {
 			WebDriver driver = enrollment.getDriver();
-			LoginPage.getLoginPage(driver, deploymentUrl)
+			LoginPage.load(driver, deploymentUrl)
 				.loginAs(enrollment.getUser())
 				.resume();
 			
-			NavigationPage participantNavBar = new NavigationPage(driver);
+			NavigationPage participantNavBar = NavigationPage.load(driver);
 			participantNavBar
 				.openMyCourses()
 				.openSearch()
@@ -816,23 +825,24 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void enrollmentWithMultiEnrollment(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void enrollmentWithMultiEnrollment(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 		
-		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		UserVO author = new UserRestClient(deploymentUrl).createRandomAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		
 		//create a course
 		String courseTitle = "Enrolment-3-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
 			.clickToolbarBack();
 
 		//create a course element of type Enrolment
-		String enNodeTitle = "Enrolment-3";
+		String enNodeTitle = "Enrol-3";
 		CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser)
 			.edit();
 		courseEditor
@@ -869,11 +879,11 @@ public class BusinessGroupTest extends Deployments {
 		}
 				
 		//Ryomou open the course	
-		LoginPage.getLoginPage(ryomouBrowser, deploymentUrl)
+		LoginPage.load(ryomouBrowser, deploymentUrl)
 			.loginAs(ryomou)
 			.resume();
 		
-		NavigationPage participantNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage participantNavBar = NavigationPage.load(ryomouBrowser);
 		participantNavBar
 			.openMyCourses()
 			.openSearch()
@@ -917,8 +927,7 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void enrollment(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser,
+	public void enrollment(@Drone @User WebDriver ryomouBrowser,
 			@Drone @Participant WebDriver reiBrowser,
 			@Drone @Student WebDriver kanuBrowser)
 	throws IOException, URISyntaxException {
@@ -927,11 +936,13 @@ public class BusinessGroupTest extends Deployments {
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
-		
+
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Enrollment-2-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -983,11 +994,11 @@ public class BusinessGroupTest extends Deployments {
 		};
 		for(Enrollment enrollment:participantDrivers) {
 			WebDriver driver = enrollment.getDriver();
-			LoginPage.getLoginPage(driver, deploymentUrl)
+			LoginPage.load(driver, deploymentUrl)
 				.loginAs(enrollment.getUser())
 				.resume();
 			
-			NavigationPage participantNavBar = new NavigationPage(driver);
+			NavigationPage participantNavBar = NavigationPage.load(driver);
 			participantNavBar
 				.openMyCourses()
 				.openSearch()
@@ -1049,8 +1060,7 @@ public class BusinessGroupTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void enrollmentWithUnlimitedBusinessGroups(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser,
+	public void enrollmentWithUnlimitedBusinessGroups(@Drone @User WebDriver ryomouBrowser,
 			@Drone @Participant WebDriver reiBrowser,
 			@Drone @Student WebDriver kanuBrowser)
 	throws IOException, URISyntaxException {
@@ -1059,11 +1069,13 @@ public class BusinessGroupTest extends Deployments {
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
-		
+
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Enrollment-3-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1115,11 +1127,11 @@ public class BusinessGroupTest extends Deployments {
 		};
 		for(Enrollment enrollment:participantDrivers) {
 			WebDriver driver = enrollment.getDriver();
-			LoginPage.getLoginPage(driver, deploymentUrl)
+			LoginPage.load(driver, deploymentUrl)
 				.loginAs(enrollment.getUser())
 				.resume();
 			
-			NavigationPage participantNavBar = new NavigationPage(driver);
+			NavigationPage participantNavBar = NavigationPage.load(driver);
 			participantNavBar
 				.openMyCourses()
 				.openSearch()
diff --git a/src/test/java/org/olat/selenium/CourseElementTest.java b/src/test/java/org/olat/selenium/CourseElementTest.java
index 88f2d8e9a71921f5f5d18172e576e381bf88d74e..ac0ca70b6022247b23a287fe7d3cc36e8e514eaa 100644
--- a/src/test/java/org/olat/selenium/CourseElementTest.java
+++ b/src/test/java/org/olat/selenium/CourseElementTest.java
@@ -28,8 +28,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
-import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Assert;
@@ -87,8 +85,6 @@ public class CourseElementTest extends Deployments {
 	private WebDriver browser;
 	@ArquillianResource
 	private URL deploymentUrl;
-	@Page
-	private NavigationPage navBar;
 	
 
 	/**
@@ -103,14 +99,16 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithCP(@InitialPage LoginPage loginPage)
+	public void courseWithCP()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-With-CP-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -125,7 +123,7 @@ public class CourseElementTest extends Deployments {
 		
 		navBar.openCourse(courseTitle);
 		
-		String cpNodeTitle = "CP-1";
+		String cpNodeTitle = "CPNode-1";
 		//create a course element of type CP with the CP that we create above
 		CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser)
 			.edit();
@@ -149,7 +147,9 @@ public class CourseElementTest extends Deployments {
 			.selectWithTitle(cpNodeTitle);
 		
 		//check that the default title of CP (Lorem Ipsum) is visible in the iframe
-		WebElement cpIframe = browser.findElement(By.cssSelector("div.o_iframedisplay>iframe"));
+		By iframe = By.cssSelector("div.o_iframedisplay>iframe");
+		OOGraphene.waitElement(iframe, browser);
+		WebElement cpIframe = browser.findElement(iframe);
 		browser.switchTo().frame(cpIframe);
 		browser.findElement(By.xpath("//h2[text()='Lorem Ipsum']"));
 	}
@@ -163,16 +163,18 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithSCORM_fullAuto(@InitialPage LoginPage loginPage)
+	public void courseWithSCORM_fullAuto()
 	throws IOException, URISyntaxException {
 		
-		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		UserVO author = new UserRestClient(deploymentUrl).createRandomAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		URL zipUrl = JunitTestHelper.class.getResource("file_resources/scorm/SCORM_course_full_auto.zip");
 		File zipFile = new File(zipUrl.toURI());
 		//go the authoring environment to import our course
 		String zipTitle = "SCORM - " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(zipTitle, zipFile);
@@ -186,7 +188,8 @@ public class CourseElementTest extends Deployments {
 		
 		//scorm is auto started -> back
 		ScormPage.getScormPage(browser)
-			.back();
+			.back()
+			.assertOnStart();
 		
 		//log out
 		new UserToolsPage(browser)
@@ -215,14 +218,16 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithWiki(@InitialPage LoginPage loginPage)
+	public void courseWithWiki()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-With-Wiki-" + UUID.randomUUID().toString();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -237,7 +242,7 @@ public class CourseElementTest extends Deployments {
 		
 		navBar.openCourse(courseTitle);
 		
-		String wikiNodeTitle = "Wiki-1";
+		String wikiNodeTitle = "WikiNode-1";
 		//create a course element of type CP with the CP that we create above
 		CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser)
 			.edit();
@@ -277,20 +282,22 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithWiki_createInCourseEditor(@InitialPage LoginPage loginPage)
+	public void courseWithWiki_createInCourseEditor()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-With-Wiki-" + UUID.randomUUID().toString();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
 			.clickToolbarBack();
 		
-		String wikiNodeTitle = "Wiki-1";
+		String wikiNodeTitle = "WikiNode-1";
 		String wikiTitle = "Wiki for a course - " + UUID.randomUUID().toString();
 		
 		//create a course element of type CP with the CP that we create above
@@ -314,6 +321,8 @@ public class CourseElementTest extends Deployments {
 		course
 			.clickTree()
 			.selectWithTitle(wikiNodeTitle)
+			// the course node select automatically the index page of the wiki
+			.assertWithTitleSelected("Index")
 			.selectWithTitle("Index");
 		
 		//check that the title of the index article/page is visible
@@ -324,14 +333,16 @@ public class CourseElementTest extends Deployments {
 
 	@Test
 	@RunAsClient
-	public void courseWithQTITest(@InitialPage LoginPage loginPage)
+	public void courseWithQTITest()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-With-QTI-Test-1.2-" + UUID.randomUUID().toString();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -378,21 +389,23 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithPodcast_externalFeed(@InitialPage LoginPage loginPage)
+	public void courseWithPodcast_externalFeed()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-With-Podcast-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
 			.clickToolbarBack();
 		
-		String podcastNodeTitle = "Podcats-1";
-		String podcastTitle = "Podcast - " + UUID.randomUUID();
+		String podcastNodeTitle = "PodcatNode-1";
+		String podcastTitle = "ThePodcast - " + UUID.randomUUID();
 		
 		//create a course element of type podcast
 		CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser)
@@ -434,20 +447,22 @@ public class CourseElementTest extends Deployments {
 	
 	@Test
 	@RunAsClient
-	public void courseWithBlog_externalFeed(@InitialPage LoginPage loginPage)
+	public void courseWithBlog_externalFeed()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-With-Blog-" + UUID.randomUUID().toString();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
 			.clickToolbarBack();
 		
-		String blogNodeTitle = "Blog-1";
+		String blogNodeTitle = "BlogNode-1";
 		String blogTitle = "Blog - " + UUID.randomUUID();
 		
 		//create a course element of type blog
@@ -499,23 +514,24 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithBlog_multipleUsers(@InitialPage LoginPage loginPage,
-			@Drone @Participant WebDriver participantDrone)
+	public void courseWithBlog_multipleUsers(@Drone @Participant WebDriver participantDrone)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO participant = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
-		
+
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course with a blog
 		String courseTitle = "Course-Blog-1-" + UUID.randomUUID().toString();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
 			.clickToolbarBack();
 				
-		String blogNodeTitle = "Blog-RW-1";
+		String blogNodeTitle = "BlogNode-RW-1";
 		String blogTitle = "Blog - RW - " + UUID.randomUUID().toString();
 				
 		//create a course element of type blog with a blog
@@ -538,7 +554,7 @@ public class CourseElementTest extends Deployments {
 			.clickTree()
 			.selectWithTitle(blogNodeTitle);
 		
-		String postTitle = "Blog-RW-1-" + UUID.randomUUID();
+		String postTitle = "BlogPost-RW-1-" + UUID.randomUUID();
 		String postSummary = "Some explantations as teaser";
 		String postContent = "Content of the post";
 		FeedPage feed = FeedPage.getFeedPage(browser);
@@ -549,10 +565,10 @@ public class CourseElementTest extends Deployments {
 
 		//participant go to the blog
 		participantDrone.navigate().to(deploymentUrl);
-		LoginPage participantLogin = LoginPage.getLoginPage(participantDrone, deploymentUrl);
+		LoginPage participantLogin = LoginPage.load(participantDrone, deploymentUrl);
 		participantLogin.loginAs(participant.getLogin(), participant.getPassword());
 		//search the course in "My courses"
-		NavigationPage participantNavigation = new NavigationPage(participantDrone);
+		NavigationPage participantNavigation = NavigationPage.load(participantDrone);
 		participantNavigation
 			.openMyCourses()
 			.openSearch()
@@ -595,13 +611,15 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithInfoMessages(@InitialPage LoginPage authorLoginPage)
+	public void courseWithInfoMessages()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -698,15 +716,16 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithDialog(@InitialPage LoginPage authorLoginPage,
-			@Drone @Participant WebDriver participantBrowser)
+	public void courseWithDialog(@Drone @Participant WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO participant = new UserRestClient(deploymentUrl).createRandomUser("Rei");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -734,7 +753,7 @@ public class CourseElementTest extends Deployments {
 		members
 			.clickToolbarBack();
 
-		String dialogNodeTitle = "Dialog";
+		String dialogNodeTitle = "DialogNode";
 		//open course editor
 		CoursePageFragment course = CoursePageFragment.getCourse(browser);
 		CourseEditorPageFragment editor = course
@@ -775,13 +794,13 @@ public class CourseElementTest extends Deployments {
 			.createThread("JPEG vs PNG", "Which is the best format", null);
 		
 		// The participant come in
-		LoginPage participantLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage participantLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		participantLoginPage
 			.loginAs(participant.getLogin(), participant.getPassword())
 			.resume();
 			
 		// The participant find the course
-		NavigationPage participantNavBar = new NavigationPage(participantBrowser);
+		NavigationPage participantNavBar = NavigationPage.load(participantBrowser);
 		participantNavBar
 			.assertOnNavigationPage()
 			.openMyCourses()
@@ -831,15 +850,17 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithMemberList(@InitialPage LoginPage authorLoginPage)
+	public void courseWithMemberList()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO coach = new UserRestClient(deploymentUrl).createRandomUser("Rei");
 		UserVO participant1 = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
 		UserVO participant2 = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -973,7 +994,7 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithMemberList_sendMail(@InitialPage LoginPage authorLoginPage)
+	public void courseWithMemberList_sendMail()
 	throws IOException, URISyntaxException {
 						
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
@@ -981,11 +1002,13 @@ public class CourseElementTest extends Deployments {
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou");
 		UserVO student1 = new UserRestClient(deploymentUrl).createRandomUser("student1");
 		UserVO student2 = new UserRestClient(deploymentUrl).createRandomUser("student2");
-		
+
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-with-member-list-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		CoursePageFragment courseRuntime = navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1097,14 +1120,15 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithParticipantFolder(@InitialPage LoginPage authorLoginPage,
-			@Drone @Participant WebDriver participantBrowser)
+	public void courseWithParticipantFolder(@Drone @Participant WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO participant = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -1167,13 +1191,13 @@ public class CourseElementTest extends Deployments {
 			.assertOnFile(coachImageFile.getName());
 		
 		// The participant come in
-		LoginPage participantLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage participantLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		participantLoginPage
 			.loginAs(participant.getLogin(), participant.getPassword())
 			.resume();
 		
 		// The participant find the course
-		NavigationPage participantNavBar = new NavigationPage(participantBrowser);
+		NavigationPage participantNavBar = NavigationPage.load(participantBrowser);
 		participantNavBar
 			.assertOnNavigationPage()
 			.openMyCourses()
@@ -1218,18 +1242,19 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithForum_concurrent(@InitialPage LoginPage loginPage,
-			@Drone @Participant WebDriver kanuBrowser,
+	public void courseWithForum_concurrent(@Drone @Participant WebDriver kanuBrowser,
 			@Drone @Student WebDriver reiBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course FO " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1258,12 +1283,12 @@ public class CourseElementTest extends Deployments {
 			.createThread("The best anime ever", "What is the best anime ever?", null);
 		
 		//First user go to the course
-		LoginPage kanuLoginPage = LoginPage.getLoginPage(kanuBrowser, deploymentUrl);
+		LoginPage kanuLoginPage = LoginPage.load(kanuBrowser, deploymentUrl);
 		kanuLoginPage
 			.loginAs(kanu.getLogin(), kanu.getPassword())
 			.resume();
 
-		NavigationPage kanuNavBar = new NavigationPage(kanuBrowser);
+		NavigationPage kanuNavBar = NavigationPage.load(kanuBrowser);
 		kanuNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1281,12 +1306,12 @@ public class CourseElementTest extends Deployments {
 			.openThread("The best anime ever");
 
 		//First user go to the course
-		LoginPage reiLoginPage = LoginPage.getLoginPage(reiBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(reiBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei)
 			.resume();
 
-		NavigationPage reiNavBar = new NavigationPage(reiBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(reiBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1349,15 +1374,16 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithForum_guest(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver guestBrowser)
+	public void courseWithForum_guest(@Drone @User WebDriver guestBrowser)
 	throws IOException, URISyntaxException {
-		
+
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs("administrator", "openolat")
 			.resume();
 		
 		String node1 = "Forums " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openCatalogAdministration()
 			.addCatalogNode(node1, "First level of the catalog");
@@ -1396,11 +1422,11 @@ public class CourseElementTest extends Deployments {
 		courseEditor.clickToolbarBack();
 		
 		// guest go to the catalog and find the course
-		LoginPage guestLogin = LoginPage.getLoginPage(guestBrowser, deploymentUrl);
+		LoginPage guestLogin = LoginPage.load(guestBrowser, deploymentUrl);
 		guestLogin
 			.asGuest();
 
-		NavigationPage guestNavBar = new NavigationPage(guestBrowser);
+		NavigationPage guestNavBar = NavigationPage.load(guestBrowser);
 		guestNavBar
 			.openCatalog()
 			.selectCatalogEntry(node1)
@@ -1449,10 +1475,6 @@ public class CourseElementTest extends Deployments {
 			.clickBack()
 			.assertThreadListOnNumber("Your favorite author", 3);
 	}
-	
-
-	
-	
 
 	/**
 	 * An author setup a course with a LTI course element with score enabled.
@@ -1468,24 +1490,25 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithLTI(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void courseWithLTI(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO participant = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
-		
+
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-LTI-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
 			.clickToolbarBack();
 
 		//create a course element of type Test with the test that we create above
-		String ltiTitle = "LTI";
+		String ltiTitle = "LTI-Node";
 		CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser)
 			.edit()
 			.createNode("lti")
@@ -1524,12 +1547,12 @@ public class CourseElementTest extends Deployments {
 			.finish();
 		
 		//Participant login
-		LoginPage participantLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage participantLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		participantLoginPage
 			.loginAs(participant.getLogin(), participant.getPassword())
 			.resume();
 
-		NavigationPage participantNavBar = new NavigationPage(participantBrowser);
+		NavigationPage participantNavBar = NavigationPage.load(participantBrowser);
 		participantNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1559,17 +1582,19 @@ public class CourseElementTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseWithContact(@InitialPage LoginPage loginPage)
+	public void courseWithContact()
 	throws IOException, URISyntaxException {
 						
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou");
 		UserVO student = new UserRestClient(deploymentUrl).createRandomUser("student");
-		
+
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
-		String courseTitle = "Course-with-member-list-" + UUID.randomUUID();
+		String courseTitle = "Contatc Course" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		CoursePageFragment courseRuntime = navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1593,7 +1618,7 @@ public class CourseElementTest extends Deployments {
 		getSmtpServer().reset();// reset e-mails
 		
 		//create a course element of type Test with the test that we create above
-		String nodeTitle = "Contact";
+		String nodeTitle = "ContactNode";
 		CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser)
 			.edit();
 		courseEditor
@@ -1626,7 +1651,7 @@ public class CourseElementTest extends Deployments {
 		loginPage.loginAs(ryomou.getLogin(), ryomou.getPassword());
 
 
-		NavigationPage ryomouNavBar = new NavigationPage(browser);
+		NavigationPage ryomouNavBar = NavigationPage.load(browser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
diff --git a/src/test/java/org/olat/selenium/CourseTest.java b/src/test/java/org/olat/selenium/CourseTest.java
index 2d6bf59057b4ce381623f481c1b354704b6e14e7..cc1481a61be83fbf677eac92ef849eb820df1495 100644
--- a/src/test/java/org/olat/selenium/CourseTest.java
+++ b/src/test/java/org/olat/selenium/CourseTest.java
@@ -31,8 +31,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
-import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Assert;
@@ -91,8 +89,6 @@ public class CourseTest extends Deployments {
 	private WebDriver browser;
 	@ArquillianResource
 	private URL deploymentUrl;
-	@Page
-	private NavigationPage navBar;
 	
 	/**
 	 * An author create a course, jump to it, open the editor
@@ -105,13 +101,15 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createCourse(@InitialPage LoginPage loginPage)
+	public void createCourse()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -171,13 +169,15 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createCourseWithSpecialCharacters(@InitialPage LoginPage loginPage)
+	public void createCourseWithSpecialCharacters()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -221,13 +221,15 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createCourse_withWizard(@InitialPage LoginPage loginPage)
+	public void createCourse_withWizard()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -244,6 +246,7 @@ public class CourseTest extends Deployments {
 			.nextNodes()
 			.nextCatalog()
 			.finish();
+		OOGraphene.closeBlueMessageWindow(browser);
 		
 		RepositorySettingsPage settings = new RepositorySettingsPage(browser);
 		//from description editor, back to details and launch the course
@@ -262,9 +265,13 @@ public class CourseTest extends Deployments {
 		By nodeBy = By.cssSelector("span.o_tree_link.o_tree_l1.o_tree_level_label_leaf>a");
 		List<WebElement> nodes = browser.findElements(nodeBy);
 		Assert.assertEquals(5, nodes.size());
-		for(WebElement node:nodes) {
-			node.click();
+		for(int i=0; i<5; i++) {
+			By linkBy = By.xpath("//div[contains(@class,'o_tree')]//li[" + (i+1) + "]/div/span[contains(@class,'o_tree_link')]/a[span]");
+			OOGraphene.waitElement(linkBy, browser);
+			browser.findElement(linkBy).click();
 			OOGraphene.waitBusy(browser);
+			By activeLinkBy = By.xpath("//div[contains(@class,'o_tree')]//li[" + (i+1) + "][contains(@class,'active')]/div/span[contains(@class,'o_tree_link')]/a[span]");
+			OOGraphene.waitElement(activeLinkBy, browser);
 		}
 	}
 	
@@ -282,17 +289,18 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void concurrentEditCourse(@InitialPage LoginPage loginPage,
-			@Drone @Participant WebDriver coAuthorBrowser)
+	public void concurrentEditCourse(@Drone @Participant WebDriver coAuthorBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO coAuthor = new UserRestClient(deploymentUrl).createAuthor("Rei");
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -323,13 +331,13 @@ public class CourseTest extends Deployments {
 			.edit();
 		
 		//the second author come in
-		LoginPage coAuthroLoginPage = LoginPage.getLoginPage(coAuthorBrowser, deploymentUrl);
+		LoginPage coAuthroLoginPage = LoginPage.load(coAuthorBrowser, deploymentUrl);
 		coAuthroLoginPage
 			.loginAs(coAuthor.getLogin(), coAuthor.getPassword())
 			.resume();
 	
 		//go to authoring
-		NavigationPage coAuthorNavBar = new NavigationPage(coAuthorBrowser);
+		NavigationPage coAuthorNavBar = NavigationPage.load(coAuthorBrowser);
 		coAuthorNavBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment()
@@ -385,16 +393,17 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void concurrentVisitAndPublish(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void concurrentVisitAndPublish(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		
 		//create a course
 		String courseTitle = "Course to publish-" + UUID.randomUUID().toString();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -421,11 +430,11 @@ public class CourseTest extends Deployments {
 			.quickPublish(UserAccess.registred);
 		
 		// The user opens the course
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.openSearch()
@@ -478,14 +487,16 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseRename(@InitialPage LoginPage loginPage)
+	public void courseRename()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course to rename-" + UUID.randomUUID().toString();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -541,11 +552,11 @@ public class CourseTest extends Deployments {
 		UserVO user = new UserRestClient(deploymentUrl).createRandomUser();
 		
 		//administrator create the categories in the catalog
-		LoginPage adminLogin = LoginPage.getLoginPage(adminBrowser, deploymentUrl);
+		LoginPage adminLogin = LoginPage.load(adminBrowser, deploymentUrl);
 		adminLogin
 			.loginAs("administrator", "openolat")
 			.resume();
-		NavigationPage adminNavBar = new NavigationPage(adminBrowser);
+		NavigationPage adminNavBar = NavigationPage.load(adminBrowser);
 		
 		String node1 = "First level " + UUID.randomUUID();
 		String node2_1 = "Second level first element " + UUID.randomUUID();
@@ -559,11 +570,12 @@ public class CourseTest extends Deployments {
 		
 		//An author create a course and publish it under a category
 		//created above
-		LoginPage login = LoginPage.getLoginPage(browser, deploymentUrl);
+		LoginPage login = LoginPage.load(browser, deploymentUrl);
 		login
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		String courseTitle = "Catalog-Course-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -583,12 +595,12 @@ public class CourseTest extends Deployments {
 		
 		//User logs in, go to "My courses", navigate the catalog and start
 		//the course
-		LoginPage userLogin = LoginPage.getLoginPage(userBrowser, deploymentUrl);
+		LoginPage userLogin = LoginPage.load(userBrowser, deploymentUrl);
 		userLogin
 			.loginAs(user.getLogin(), user.getPassword())
 			.resume();
 
-		NavigationPage userNavBar = new NavigationPage(userBrowser);
+		NavigationPage userNavBar = NavigationPage.load(userBrowser);
 		userNavBar
 			.openMyCourses()
 			.openCatalog()
@@ -615,14 +627,16 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createCourseWithCalendar(@InitialPage LoginPage loginPage)
+	public void createCourseWithCalendar()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-With-iCal-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -717,14 +731,16 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createCourseWithCalendar_alt(@InitialPage LoginPage loginPage)
+	public void createCourseWithCalendar_alt()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-iCal-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -802,14 +818,16 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createCourseWithCalendar_singleToRecurrent(@InitialPage LoginPage loginPage)
+	public void createCourseWithCalendar_singleToRecurrent()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-iCal-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -828,7 +846,7 @@ public class CourseTest extends Deployments {
 		settings
 			.clickToolbarBack();
 		
-		String calendarNodeTitle = "iCal-3";
+		String calendarNodeTitle = "iCalNode-3";
 		//create a course element of type calendar
 		CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser)
 			.edit();
@@ -884,15 +902,16 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseBooking(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void courseBooking(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -930,11 +949,11 @@ public class CourseTest extends Deployments {
 			.publish();
 		
 		//a user search the course
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.openSearch()
@@ -979,15 +998,16 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseFreeBooking(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver userBrowser)
+	public void courseFreeBooking(@Drone @User WebDriver userBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		UserVO user = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -1024,11 +1044,11 @@ public class CourseTest extends Deployments {
 			.publish();
 		
 		//a user search the course
-		LoginPage userLoginPage = LoginPage.getLoginPage(userBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(userBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(user.getLogin(), user.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(userBrowser);
+		NavigationPage userNavBar = NavigationPage.load(userBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1065,13 +1085,14 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseReminders(@InitialPage LoginPage loginPage)
+	public void courseReminders()
 	throws IOException, URISyntaxException {
 		//configure at least a license
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs("administrator", "openolat")
 			.resume();
-		new NavigationPage(browser)
+		NavigationPage.load(browser)
 			.openAdministration()
 			.openLicenses()
 			.enableForResources("all rights reserved");
@@ -1083,6 +1104,7 @@ public class CourseTest extends Deployments {
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -1182,17 +1204,18 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void coursePassword(@InitialPage LoginPage loginPage,
-			@Drone @Participant WebDriver kanuBrowser,
+	public void coursePassword(@Drone @Participant WebDriver kanuBrowser,
 			@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -1250,12 +1273,12 @@ public class CourseTest extends Deployments {
 			.assertOnTitle(infoTitle);
 		
 		//First user go to the course
-		LoginPage kanuLoginPage = LoginPage.getLoginPage(kanuBrowser, deploymentUrl);
+		LoginPage kanuLoginPage = LoginPage.load(kanuBrowser, deploymentUrl);
 		kanuLoginPage
 			.loginAs(kanu.getLogin(), kanu.getPassword())
 			.resume();
 
-		NavigationPage kanuNavBar = new NavigationPage(kanuBrowser);
+		NavigationPage kanuNavBar = NavigationPage.load(kanuBrowser);
 		kanuNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1277,7 +1300,7 @@ public class CourseTest extends Deployments {
 			.assertOnTitle(infoTitle);
 		
 		//Second user use the rest url
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, new URL(courseInfoUrl));
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, new URL(courseInfoUrl));
 		ryomouLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
@@ -1312,16 +1335,17 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void courseAccessRules(@InitialPage LoginPage loginPage,
-			@Drone @Student WebDriver reiBrowser)
+	public void courseAccessRules(@Drone @Student WebDriver reiBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("rei");
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course FO " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1396,10 +1420,10 @@ public class CourseTest extends Deployments {
 			.finish();
 		
 		//participant search the course
-		LoginPage.getLoginPage(reiBrowser, deploymentUrl)
+		LoginPage.load(reiBrowser, deploymentUrl)
 			.loginAs(rei)
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(reiBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(reiBrowser);
 		reiNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -1462,8 +1486,7 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void confirmMembershipForCourse(@InitialPage LoginPage loginPage,
-			@Drone @Author WebDriver authorBrowser,
+	public void confirmMembershipForCourse(@Drone @Author WebDriver authorBrowser,
 			@Drone @Participant WebDriver participantBrowser,
 			@Drone @Student WebDriver reiBrowser)
 	throws IOException, URISyntaxException {
@@ -1474,20 +1497,21 @@ public class CourseTest extends Deployments {
 		
 		//admin make the confirmation of membership mandatory
 		//for groups created by standard users.
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs("administrator", "openolat")
 			.resume();
-		AdministrationPage administration = new NavigationPage(browser)
+		AdministrationPage administration = NavigationPage.load(browser)
 			.openAdministration()
 			.openGroupSettings()
 			.setGroupConfirmationForAuthor(true);
 		
 		//author create a course
 		String courseTitle = "Membership " + UUID.randomUUID();
-		LoginPage.getLoginPage(authorBrowser, deploymentUrl)
+		LoginPage.load(authorBrowser, deploymentUrl)
 			.loginAs(author)
 			.resume();
-		NavigationPage authorNavBar = new NavigationPage(authorBrowser);
+		NavigationPage authorNavBar = NavigationPage.load(authorBrowser);
 		authorNavBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -1549,12 +1573,12 @@ public class CourseTest extends Deployments {
 			.assertOnTitle(courseTitle);
 		
 		//participant login -> accept membership -> my courses -> course
-		LoginPage participantLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage participantLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		participantLoginPage
 			.loginAs(participant.getLogin(), participant.getPassword())
 			.assertOnMembershipConfirmation()
 			.confirmMembership();
-		NavigationPage participantNavBar = new NavigationPage(participantBrowser);
+		NavigationPage participantNavBar = NavigationPage.load(participantBrowser);
 		participantNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -1580,16 +1604,17 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createContentPackage(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver ryomouBrowser)
-			throws IOException, URISyntaxException {
+	public void createContentPackage(@Drone @User WebDriver ryomouBrowser)
+	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a CP
 		String cpTitle = "CP " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCP(cpTitle)
@@ -1639,11 +1664,11 @@ public class CourseTest extends Deployments {
 			.publish();
 		
 		//a user search the content package
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage ryomouLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		ryomouLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1668,16 +1693,18 @@ public class CourseTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void tryImportOfWindowsZip(@InitialPage LoginPage loginPage)
+	public void tryImportOfWindowsZip()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		URL zipUrl = JunitTestHelper.class.getResource("file_resources/windows_zip.zip");
 		File zipFile = new File(zipUrl.toURI());
 		//go the authoring environment to create a CP
 		String zipTitle = "ZIP - " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(zipTitle, zipFile)
diff --git a/src/test/java/org/olat/selenium/ImsQTI21EditorTest.java b/src/test/java/org/olat/selenium/ImsQTI21EditorTest.java
index e59d285926d23600e5d82c3dce157cf2ff572e13..a0764320b3b17dbdbeb210575e41b292335997b5 100644
--- a/src/test/java/org/olat/selenium/ImsQTI21EditorTest.java
+++ b/src/test/java/org/olat/selenium/ImsQTI21EditorTest.java
@@ -27,8 +27,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
-import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Test;
@@ -73,14 +71,12 @@ public class ImsQTI21EditorTest extends Deployments {
 	private WebDriver browser;
 	@ArquillianResource
 	private URL deploymentUrl;
-	@Page
-	private NavigationPage navBar;
 
 	/**
 	 * Create a test, import the CSV example, remove the
 	 * first single choice which come if someone create a
 	 * test. Change the delivery settings of the test to
-	 * show the detailled results.<br>
+	 * show the detailed results.<br>
 	 * Run the test and check the results. 
 	 * 
 	 * @param loginPage
@@ -89,13 +85,15 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void importQuestionsCSV(@InitialPage LoginPage authorLoginPage)
+	public void importQuestionsCSV()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Excel QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -117,7 +115,7 @@ public class ImsQTI21EditorTest extends Deployments {
 		//remove the single choice which come from the creation
 		// of the test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		// go to options and show the results
@@ -168,13 +166,15 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void importQuestionsCSVMatchVariants(@InitialPage LoginPage authorLoginPage)
+	public void importQuestionsCSVMatchVariants()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "ExcelMatch QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -196,7 +196,7 @@ public class ImsQTI21EditorTest extends Deployments {
 		//remove the single choice which come from the creation
 		// of the test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		// go to options and show the results
@@ -248,14 +248,15 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorSingleChoices(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void qti21EditorSingleChoices(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Choices QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -267,7 +268,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a single choice: all answers score
@@ -345,11 +346,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage userNavBar = NavigationPage.load(ryomouBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -394,12 +395,14 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorSingleChoices_conditionalAttemptsFeedback(@InitialPage LoginPage authorLoginPage)
+	public void qti21EditorSingleChoices_conditionalAttemptsFeedback()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Choices QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -410,7 +413,7 @@ public class ImsQTI21EditorTest extends Deployments {
 		QTI21EditorPage qtiEditor = qtiPage
 				.edit();
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 	
 		//add a single choice: all answers score
@@ -465,15 +468,16 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorMultipleChoices(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorMultipleChoices(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		UserVO eric = new UserRestClient(deploymentUrl).createRandomUser("Eric");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Choices QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -485,7 +489,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a single choice: all answers score
@@ -565,11 +569,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(participantBrowser);
+		NavigationPage userNavBar = NavigationPage.load(participantBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -604,11 +608,11 @@ public class ImsQTI21EditorTest extends Deployments {
 		
 
 		//a second user search the content package
-		LoginPage ericLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage ericLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		ericLoginPage
 			.loginAs(eric.getLogin(), eric.getPassword())
 			.resume();
-		NavigationPage ericNavBar = new NavigationPage(participantBrowser);
+		NavigationPage ericNavBar = NavigationPage.load(participantBrowser);
 		ericNavBar
 			.openMyCourses()
 			.openSearch()
@@ -643,12 +647,14 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorMultipleChoices_complexConditionalFeedback(@InitialPage LoginPage authorLoginPage)
+	public void qti21EditorMultipleChoices_complexConditionalFeedback()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Choices QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -659,7 +665,7 @@ public class ImsQTI21EditorTest extends Deployments {
 		QTI21EditorPage qtiEditor = qtiPage
 				.edit();
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 	
 		//add a single choice: all answers score
@@ -745,15 +751,16 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorKprim(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorKprim(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
 		UserVO melissa = new UserRestClient(deploymentUrl).createRandomUser("Melissa");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Kprim QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -765,7 +772,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a kprim
@@ -839,11 +846,11 @@ public class ImsQTI21EditorTest extends Deployments {
 		
 
 		//a user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -878,11 +885,11 @@ public class ImsQTI21EditorTest extends Deployments {
 		
 
 		//a second user search the content package
-		LoginPage melLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage melLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		melLoginPage
 			.loginAs(melissa.getLogin(), melissa.getPassword())
 			.resume();
-		NavigationPage melNavBar = new NavigationPage(participantBrowser);
+		NavigationPage melNavBar = NavigationPage.load(participantBrowser);
 		melNavBar
 			.openMyCourses()
 			.openSearch()
@@ -921,15 +928,16 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorHotspot_singleChoice(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorHotspot_singleChoice(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
 		
 		String qtiTestTitle = "Hotspot QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -941,7 +949,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add an hotspot: all answers score
@@ -1021,11 +1029,11 @@ public class ImsQTI21EditorTest extends Deployments {
 
 
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(participantBrowser);
+		NavigationPage userNavBar = NavigationPage.load(participantBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1058,11 +1066,11 @@ public class ImsQTI21EditorTest extends Deployments {
 		
 
 		//a second user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1099,15 +1107,16 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorHotspot_multipleChoice(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorHotspot_multipleChoice(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
 		
 		String qtiTestTitle = "Hotspot QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -1119,7 +1128,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add an hotspot: all answers score
@@ -1201,11 +1210,11 @@ public class ImsQTI21EditorTest extends Deployments {
 
 
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(participantBrowser);
+		NavigationPage userNavBar = NavigationPage.load(participantBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1238,11 +1247,11 @@ public class ImsQTI21EditorTest extends Deployments {
 		
 
 		//a second user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1281,16 +1290,17 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorFib_text(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorFib_text(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 
 		String qtiTestTitle = "FIB QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -1302,7 +1312,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a gap entry: all answers score
@@ -1374,11 +1384,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(participantBrowser);
+		NavigationPage userNavBar = NavigationPage.load(participantBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1414,11 +1424,11 @@ public class ImsQTI21EditorTest extends Deployments {
 		
 
 		//a second user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1458,16 +1468,17 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorNumericalInput_exact(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorNumericalInput_exact(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 
 		String qtiTestTitle = "Numerical QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -1479,7 +1490,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a numerical input: all answers score, tolerance exact
@@ -1551,11 +1562,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(participantBrowser);
+		NavigationPage userNavBar = NavigationPage.load(participantBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1591,11 +1602,11 @@ public class ImsQTI21EditorTest extends Deployments {
 		
 
 		//a second user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1634,16 +1645,17 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorNumericalInput_absolut(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorNumericalInput_absolut(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 
 		String qtiTestTitle = "Numerical QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -1655,7 +1667,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a numerical input: 3.1 - 3.2
@@ -1720,11 +1732,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(participantBrowser);
+		NavigationPage userNavBar = NavigationPage.load(participantBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1762,11 +1774,11 @@ public class ImsQTI21EditorTest extends Deployments {
 		
 
 		//a second user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1806,15 +1818,16 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorHottext(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorHottext(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Hottext QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -1826,7 +1839,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a hot text with score: all answers
@@ -1870,11 +1883,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(participantBrowser);
+		NavigationPage userNavBar = NavigationPage.load(participantBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1916,15 +1929,16 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorMatch(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorMatch(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
 		UserVO melissa = new UserRestClient(deploymentUrl).createRandomUser("Melissa");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Match QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -1936,7 +1950,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a match, multiple selection
@@ -2024,11 +2038,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -2064,11 +2078,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.assertOnAssessmentTestScore(6);// 4 points from the first question, 2 from the second
 		
 		//a second user search the content package
-		LoginPage melLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage melLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		melLoginPage
 			.loginAs(melissa.getLogin(), melissa.getPassword())
 			.resume();
-		NavigationPage melNavBar = new NavigationPage(participantBrowser);
+		NavigationPage melNavBar = NavigationPage.load(participantBrowser);
 		melNavBar
 			.openMyCourses()
 			.openSearch()
@@ -2113,15 +2127,16 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorMatch_distractors(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorMatch_distractors(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
 		UserVO melissa = new UserRestClient(deploymentUrl).createRandomUser("Melissa");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Match QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -2133,7 +2148,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a match, multiple selection
@@ -2217,11 +2232,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -2257,11 +2272,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.assertOnAssessmentTestScore("4.5");// 4 points from the first question, 0.5 from the second
 		
 		//a second user search the content package
-		LoginPage melLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage melLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		melLoginPage
 			.loginAs(melissa.getLogin(), melissa.getPassword())
 			.resume();
-		NavigationPage melNavBar = new NavigationPage(participantBrowser);
+		NavigationPage melNavBar = NavigationPage.load(participantBrowser);
 		melNavBar
 			.openMyCourses()
 			.openSearch()
@@ -2306,15 +2321,16 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorMatchDragAndDrop(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorMatchDragAndDrop(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO asuka = new UserRestClient(deploymentUrl).createRandomUser("Asuka");
 		UserVO chara = new UserRestClient(deploymentUrl).createRandomUser("Chara");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Match DnD QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -2326,7 +2342,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a match, multiple selection
@@ -2416,11 +2432,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage asukaLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage asukaLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		asukaLoginPage
 			.loginAs(asuka.getLogin(), asuka.getPassword())
 			.resume();
-		NavigationPage asukaNavBar = new NavigationPage(participantBrowser);
+		NavigationPage asukaNavBar = NavigationPage.load(participantBrowser);
 		asukaNavBar
 			.openMyCourses()
 			.openSearch()
@@ -2456,11 +2472,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.assertOnAssessmentTestScore(9);
 		
 		//a second user search the content package
-		LoginPage charaLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage charaLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		charaLoginPage
 			.loginAs(chara.getLogin(), chara.getPassword())
 			.resume();
-		NavigationPage charaNavBar = new NavigationPage(participantBrowser);
+		NavigationPage charaNavBar = NavigationPage.load(participantBrowser);
 		charaNavBar
 			.openMyCourses()
 			.openSearch()
@@ -2501,15 +2517,16 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorMatchDragAndDrop_distractors(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorMatchDragAndDrop_distractors(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO asuka = new UserRestClient(deploymentUrl).createRandomUser("Asuka");
 		UserVO chara = new UserRestClient(deploymentUrl).createRandomUser("Chara");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Match DnD QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -2521,7 +2538,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a match, multiple selection
@@ -2605,11 +2622,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage asukaLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage asukaLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		asukaLoginPage
 			.loginAs(asuka.getLogin(), asuka.getPassword())
 			.resume();
-		NavigationPage asukaNavBar = new NavigationPage(participantBrowser);
+		NavigationPage asukaNavBar = NavigationPage.load(participantBrowser);
 		asukaNavBar
 			.openMyCourses()
 			.openSearch()
@@ -2645,11 +2662,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.assertOnAssessmentTestScore("4.5");
 		
 		//a second user search the content package
-		LoginPage charaLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage charaLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		charaLoginPage
 			.loginAs(chara.getLogin(), chara.getPassword())
 			.resume();
-		NavigationPage charaNavBar = new NavigationPage(participantBrowser);
+		NavigationPage charaNavBar = NavigationPage.load(participantBrowser);
 		charaNavBar
 			.openMyCourses()
 			.openSearch()
@@ -2692,15 +2709,16 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorMatchTrueFalse(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorMatchTrueFalse(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
 		UserVO asuka = new UserRestClient(deploymentUrl).createRandomUser("Asuka");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "True false QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -2712,7 +2730,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add a match, score "all answers"
@@ -2792,11 +2810,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -2832,11 +2850,11 @@ public class ImsQTI21EditorTest extends Deployments {
 		
 
 		//a second user search the content package
-		LoginPage asukaLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage asukaLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		asukaLoginPage
 			.loginAs(asuka.getLogin(), asuka.getPassword())
 			.resume();
-		NavigationPage asukaNavBar = new NavigationPage(participantBrowser);
+		NavigationPage asukaNavBar = NavigationPage.load(participantBrowser);
 		asukaNavBar
 			.openMyCourses()
 			.openSearch()
@@ -2872,15 +2890,16 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorUpload(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorUpload(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//make a test
 		String qtiTestTitle = "Upload QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -2892,7 +2911,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add an upload interaction
@@ -2931,11 +2950,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -2975,16 +2994,17 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorEssay(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorEssay(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 
 		//make a test
 		String qtiTestTitle = "Essai QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -2996,7 +3016,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add an essay interaction
@@ -3035,11 +3055,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -3077,16 +3097,17 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorDrawing(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorDrawing(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 
 		//make a test
 		String qtiTestTitle = "Drawing QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -3098,7 +3119,7 @@ public class ImsQTI21EditorTest extends Deployments {
 				.edit();
 		//start a blank test
 		qtiEditor
-			.selectNode("Single choice")
+			.selectNode("Single Choice")
 			.deleteNode();
 		
 		//add an essay interaction
@@ -3141,11 +3162,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
@@ -3186,14 +3207,15 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorHiddenSection(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorHiddenSection(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Choices QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -3255,11 +3277,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(participantBrowser);
+		NavigationPage userNavBar = NavigationPage.load(participantBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -3297,16 +3319,17 @@ public class ImsQTI21EditorTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EditorNegativePoints(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21EditorNegativePoints(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
 		UserVO asuka = new UserRestClient(deploymentUrl).createRandomUser("Asuka");
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		String qtiTestTitle = "Choices QTI 2.1 " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createQTI21Test(qtiTestTitle)
@@ -3412,11 +3435,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.save();
 		
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(participantBrowser);
+		NavigationPage userNavBar = NavigationPage.load(participantBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -3445,11 +3468,11 @@ public class ImsQTI21EditorTest extends Deployments {
 		
 
 		//a  second user search the content package
-		LoginPage asukaLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage asukaLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		asukaLoginPage
 			.loginAs(asuka.getLogin(), asuka.getPassword())
 			.resume();
-		NavigationPage asukaNavBar = new NavigationPage(participantBrowser);
+		NavigationPage asukaNavBar = NavigationPage.load(participantBrowser);
 		asukaNavBar
 			.openMyCourses()
 			.openSearch()
@@ -3477,11 +3500,11 @@ public class ImsQTI21EditorTest extends Deployments {
 			.assertOnAssessmentTestMaxScore(7);
 		
 		//a third user search the content package
-		LoginPage reiLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage reiLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		reiLoginPage
 			.loginAs(rei.getLogin(), rei.getPassword())
 			.resume();
-		NavigationPage reiNavBar = new NavigationPage(participantBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(participantBrowser);
 		reiNavBar
 			.openMyCourses()
 			.openSearch()
diff --git a/src/test/java/org/olat/selenium/ImsQTI21InteractionsTest.java b/src/test/java/org/olat/selenium/ImsQTI21InteractionsTest.java
index aa2dea2a8ea282e47561c12aa4ce78d099e92922..49bcf63132d605926e2263c5e389222b54d97344 100644
--- a/src/test/java/org/olat/selenium/ImsQTI21InteractionsTest.java
+++ b/src/test/java/org/olat/selenium/ImsQTI21InteractionsTest.java
@@ -27,8 +27,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
-import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Test;
@@ -73,8 +71,6 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	private WebDriver browser;
 	@ArquillianResource
 	private URL deploymentUrl;
-	@Page
-	private NavigationPage navBar;
 	
 	/**
 	 * Check if the hotspot interaction send a "correct" feedback.
@@ -85,15 +81,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21HotspotInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21HotspotInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Hotspot QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_hotspot.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -130,15 +128,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21AssociateInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21AssociateInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Associate QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_associate_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -180,15 +180,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21GraphicAssociateInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21GraphicAssociateInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Graphic associate QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_graphic_associate_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -228,15 +230,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21MatchInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21MatchInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Match QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_match_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -277,15 +281,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21OrderInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21OrderInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Order QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_order_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -324,15 +330,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21EndInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21EndInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "End QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_end_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -386,15 +394,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21GraphicGapInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21GraphicGapInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Graphic Gap Match QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_graphic_gap_match_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -433,15 +443,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21SelectPointInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21SelectPointInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Select point QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_select_point_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -478,15 +490,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21GraphicOrderInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21GraphicOrderInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Graphic order QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_graphic_order_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -527,15 +541,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21PositionObjectInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21PositionObjectInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Position object QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_position_object_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -575,15 +591,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21InlineChoiceInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21InlineChoiceInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Inline choice QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_inline_choice_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -620,15 +638,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21SliderInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21SliderInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Slider QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_slider_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -666,15 +686,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21GapMatchInteraction(@InitialPage LoginPage authorLoginPage)
+	public void qti21GapMatchInteraction()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Gap match QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_gap_match_ims.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -712,15 +734,17 @@ public class ImsQTI21InteractionsTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21MultipleInput(@InitialPage LoginPage authorLoginPage)
+	public void qti21MultipleInput()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Gap match QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_multi-input.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
diff --git a/src/test/java/org/olat/selenium/ImsQTI21Test.java b/src/test/java/org/olat/selenium/ImsQTI21Test.java
index 65dfc8f4a2d758f06ac33acbc31d74fb8a5a21b9..9f3d03563ff3e349258737478f523dbedce29428 100644
--- a/src/test/java/org/olat/selenium/ImsQTI21Test.java
+++ b/src/test/java/org/olat/selenium/ImsQTI21Test.java
@@ -27,8 +27,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
-import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Assert;
@@ -68,8 +66,6 @@ public class ImsQTI21Test extends Deployments {
 	private WebDriver browser;
 	@ArquillianResource
 	private URL deploymentUrl;
-	@Page
-	private NavigationPage navBar;
 	
 	/**
 	 * Test the flow of the simplest possible test with our
@@ -83,16 +79,18 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21TestFlow_noParts_noFeedbacks(@InitialPage LoginPage authorLoginPage)
+	public void qti21TestFlow_noParts_noFeedbacks()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "With parts QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/test_without_feedbacks.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -125,16 +123,18 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21TestFlow_noParts_withFeedbacks(@InitialPage LoginPage authorLoginPage)
+	public void qti21TestFlow_noParts_withFeedbacks()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "With parts QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/test_with_feedbacks.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -175,16 +175,18 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21TestFlow_noParts_feedbacksAndResults(@InitialPage LoginPage authorLoginPage)
+	public void qti21TestFlow_noParts_feedbacksAndResults()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "With parts QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/test_with_feedbacks.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile);
@@ -228,16 +230,18 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21TestFlow_parts_noFeedbacksButResults(@InitialPage LoginPage authorLoginPage)
+	public void qti21TestFlow_parts_noFeedbacksButResults()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "With parts QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/test_parts_without_feedbacks.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile);
@@ -284,16 +288,18 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21TestFlow_parts_feedbacks(@InitialPage LoginPage authorLoginPage)
+	public void qti21TestFlow_parts_feedbacks()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "With parts QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/test_with_parts_and_test_feedbacks.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -333,16 +339,18 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21TestFlow_timeLimits(@InitialPage LoginPage authorLoginPage)
+	public void qti21TestFlow_timeLimits()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Timed QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/test_time_limits.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -358,7 +366,7 @@ public class ImsQTI21Test extends Deployments {
 			.assertOnAssessmentItem("Last choice")
 			.answerSingleChoiceWithParagraph("True")
 			.saveAnswer()
-			.assertOnAssessmentTestTerminated(15);
+			.assertOnAssessmentTestTerminated(30);
 	}
 	
 	/**
@@ -370,16 +378,18 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21TestFlow_timeLimits_results(@InitialPage LoginPage authorLoginPage)
+	public void qti21TestFlow_timeLimits_results()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Timed QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/test_time_limits.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -421,18 +431,19 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21TestFlow_suspend(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void qti21TestFlow_suspend(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Suspend QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/test_4_no_skipping.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile)
@@ -461,11 +472,11 @@ public class ImsQTI21Test extends Deployments {
 			.assertOnAssessmentItem("Single choice");
 		
 		//a user search the test
-		LoginPage userLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage userNavBar = NavigationPage.load(ryomouBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -532,16 +543,18 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21Course(@InitialPage LoginPage authorLoginPage)
+	public void qti21Course()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Simple QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_test.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile);
@@ -612,16 +625,18 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21Course_lmsHidden_results(@InitialPage LoginPage authorLoginPage)
+	public void qti21Course_lmsHidden_results()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Simple QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_test.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile);
@@ -703,16 +718,18 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21Course_suspend(@InitialPage LoginPage authorLoginPage)
+	public void qti21Course_suspend()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "No skipping QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/test_4_no_skipping.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile);
@@ -819,18 +836,19 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21CourseTestCockpitProgress(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21CourseTestCockpitProgress(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO participant = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
-		
+
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		//upload a test
 		String qtiTestTitle = "Cockpit 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/test_without_feedbacks.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile);
@@ -884,11 +902,11 @@ public class ImsQTI21Test extends Deployments {
 		
 		
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(participant.getLogin(), participant.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(participantBrowser);
+		NavigationPage userNavBar = NavigationPage.load(participantBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -946,18 +964,19 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21CourseTestCorrectionWorkflow(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver participantBrowser)
+	public void qti21CourseTestCorrectionWorkflow(@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO participant = new UserRestClient(deploymentUrl).createRandomUser("Hakufu");
-		
+
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		//upload a test
 		String qtiTestTitle = "Correction 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/test_sc_essay_mc.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile);
@@ -1004,11 +1023,11 @@ public class ImsQTI21Test extends Deployments {
 			.quickAdd(participant);
 		
 		//a user search the content package
-		LoginPage userLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		userLoginPage
 			.loginAs(participant.getLogin(), participant.getPassword())
 			.resume();
-		NavigationPage userNavBar = new NavigationPage(participantBrowser);
+		NavigationPage userNavBar = NavigationPage.load(participantBrowser);
 		userNavBar
 			.openMyCourses()
 			.openSearch()
@@ -1078,18 +1097,20 @@ public class ImsQTI21Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void qti21Course_selfTest(@InitialPage LoginPage loginPage)
+	public void qti21Course_selfTest()
 	throws IOException, URISyntaxException {
 						
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou");
-		
+
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//upload a test
 		String qtiTestTitle = "Simple QTI 2.1 " + UUID.randomUUID();
 		URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_test.zip");
 		File qtiTestFile = new File(qtiTestUrl.toURI());
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.uploadResource(qtiTestTitle, qtiTestFile);
@@ -1148,7 +1169,7 @@ public class ImsQTI21Test extends Deployments {
 		// participant comes in and do the self test
 		loginPage.loginAs(ryomou.getLogin(), ryomou.getPassword());
 
-		NavigationPage ryomouNavBar = new NavigationPage(browser);
+		NavigationPage ryomouNavBar = NavigationPage.load(browser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
diff --git a/src/test/java/org/olat/selenium/LecturesTest.java b/src/test/java/org/olat/selenium/LecturesTest.java
index 86faeeec5cdfb796a2e9a90c9395203de800fea0..065c086d91ca1f4b88191c584063bc3aaac4efc7 100644
--- a/src/test/java/org/olat/selenium/LecturesTest.java
+++ b/src/test/java/org/olat/selenium/LecturesTest.java
@@ -27,8 +27,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
-import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Test;
@@ -67,8 +65,6 @@ public class LecturesTest extends Deployments {
 	private WebDriver browser;
 	@ArquillianResource
 	private URL deploymentUrl;
-	@Page
-	private NavigationPage navBar;
 	
 	/**
 	 * An author create a course, enable the absence management,
@@ -84,15 +80,16 @@ public class LecturesTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void lecturesRollCall_authorizedAbsence(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver coachBrowser, @Drone @Participant WebDriver participantBrowser)
+	public void lecturesRollCall_authorizedAbsence(@Drone @User WebDriver coachBrowser,
+			@Drone @Participant WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		
 		// configure the lectures module
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs("administrator", "openolat")
 			.resume();
-		new NavigationPage(browser)
+		 NavigationPage.load(browser)
 			.openAdministration()
 			.openLecturesSettings()
 			.configure(true, true, true, false, false)
@@ -105,10 +102,11 @@ public class LecturesTest extends Deployments {
 		UserVO participant2 = new UserRestClient(deploymentUrl).createRandomUser("Rymou");
 
 		LoginPage
-			.getLoginPage(browser, deploymentUrl)
+			.load(browser, deploymentUrl)
 			.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -181,7 +179,7 @@ public class LecturesTest extends Deployments {
 			.save();
 		
 		//coach at work
-		LoginPage coachLoginPage = LoginPage.getLoginPage(coachBrowser, deploymentUrl);
+		LoginPage coachLoginPage = LoginPage.load(coachBrowser, deploymentUrl);
 		coachLoginPage
 			.loginAs(coach);
 		new RollCallInterceptorPage(coachBrowser)
@@ -192,7 +190,7 @@ public class LecturesTest extends Deployments {
 			.assertOnClosedTable();
 		
 		//participant check it roll call
-		LoginPage participantLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage participantLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		participantLoginPage
 			.loginAs(participant1)
 			.resume();
@@ -222,15 +220,16 @@ public class LecturesTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void lectureMobileRollCall_authorizedAbsence(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver coachBrowser, @Drone @User WebDriver participantBrowser)
+	public void lectureMobileRollCall_authorizedAbsence(@Drone @User WebDriver coachBrowser,
+			@Drone @User WebDriver participantBrowser)
 	throws IOException, URISyntaxException {
 		
 		// configure the lectures module
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs("administrator", "openolat")
 			.resume();
-		new NavigationPage(browser)
+		NavigationPage.load(browser)
 			.openAdministration()
 			.openLecturesSettings()
 			.configure(true, true, true, false, false)
@@ -243,10 +242,11 @@ public class LecturesTest extends Deployments {
 		UserVO participant2 = new UserRestClient(deploymentUrl).createRandomUser("Rymou");
 		
 		LoginPage
-			.getLoginPage(browser, deploymentUrl)
+			.load(browser, deploymentUrl)
 			.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -319,7 +319,7 @@ public class LecturesTest extends Deployments {
 			.save();
 		
 		//coach at work
-		LoginPage coachLoginPage = LoginPage.getLoginPage(coachBrowser, deploymentUrl);
+		LoginPage coachLoginPage = LoginPage.load(coachBrowser, deploymentUrl);
 		coachLoginPage
 			.loginAs(coach);
 		new RollCallInterceptorPage(coachBrowser)
@@ -335,7 +335,7 @@ public class LecturesTest extends Deployments {
 			.assertOnClosedTable();
 		
 		//participant check it roll call
-		LoginPage participantLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
+		LoginPage participantLoginPage = LoginPage.load(participantBrowser, deploymentUrl);
 		participantLoginPage
 			.loginAs(participant1)
 			.resume();
@@ -360,14 +360,15 @@ public class LecturesTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void lecturesRollCall(@InitialPage LoginPage loginPage)
+	public void lecturesRollCall()
 	throws IOException, URISyntaxException {
 
 		// configure the lectures module
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs("administrator", "openolat")
 			.resume();
-		new NavigationPage(browser)
+		NavigationPage.load(browser)
 			.openAdministration()
 			.openLecturesSettings()
 			.configure(true, true, false, false, false)
@@ -378,10 +379,11 @@ public class LecturesTest extends Deployments {
 		UserVO participant1 = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
 		UserVO participant2 = new UserRestClient(deploymentUrl).createRandomUser("Rymou");
 		
-		LoginPage authorLoginPage = LoginPage.getLoginPage(browser, deploymentUrl);
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -480,14 +482,15 @@ public class LecturesTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void lecturesRollCall_defaultAuthorizedAbsence(@InitialPage LoginPage loginPage)
+	public void lecturesRollCall_defaultAuthorizedAbsence()
 	throws IOException, URISyntaxException {
 		
 		// configure the lectures module
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs("administrator", "openolat")
 			.resume();
-		new NavigationPage(browser)
+		NavigationPage.load(browser)
 			.openAdministration()
 			.openLecturesSettings()
 			.configure(false, false, true, true, true)
@@ -499,10 +502,11 @@ public class LecturesTest extends Deployments {
 		UserVO participant2 = new UserRestClient(deploymentUrl).createRandomUser("Rymou");
 
 		LoginPage
-			.getLoginPage(browser, deploymentUrl)
+			.load(browser, deploymentUrl)
 			.loginAs(author.getLogin(), author.getPassword());
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -575,7 +579,7 @@ public class LecturesTest extends Deployments {
 			.save();
 		
 		//coach at work
-		LoginPage coachLoginPage = LoginPage.getLoginPage(browser, deploymentUrl);
+		LoginPage coachLoginPage = LoginPage.load(browser, deploymentUrl);
 		coachLoginPage
 			.loginAs(author);
 		new RollCallInterceptorPage(browser)
@@ -586,7 +590,7 @@ public class LecturesTest extends Deployments {
 			.assertOnClosedTable();
 		
 		//participant check it roll call
-		LoginPage participantLoginPage = LoginPage.getLoginPage(browser, deploymentUrl);
+		LoginPage participantLoginPage = LoginPage.load(browser, deploymentUrl);
 		participantLoginPage
 			.loginAs(participant1)
 			.resume();
@@ -610,16 +614,18 @@ public class LecturesTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void importLectures(@InitialPage LoginPage loginPage)
+	public void importLectures()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 
 		// configure the lectures module
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
diff --git a/src/test/java/org/olat/selenium/LoginTest.java b/src/test/java/org/olat/selenium/LoginTest.java
index 951a10a4e85f90ed057b6dd4cbe737ef7365c21f..34e861fe899465b7026839b806300423d9bcf35c 100644
--- a/src/test/java/org/olat/selenium/LoginTest.java
+++ b/src/test/java/org/olat/selenium/LoginTest.java
@@ -26,7 +26,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Test;
@@ -60,9 +59,10 @@ public class LoginTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void loadIndex(@InitialPage LoginPage loginPage) {
+	public void loadIndex(LoginPage loginPage) {
 		//check that the login page, or dmz is loaded
-		loginPage.assertOnLoginPage();
+		LoginPage.load(browser, deploymentUrl)
+			.assertOnLoginPage();
 	}
 	
 	/**
@@ -72,9 +72,11 @@ public class LoginTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void loginAsAdministrator(@InitialPage LoginPage loginPage) {
+	public void loginAsAdministrator() {
 		//load dmz
-		loginPage.assertOnLoginPage();
+		LoginPage loginPage = LoginPage
+				.load(browser, deploymentUrl)
+				.assertOnLoginPage();
 		//login as administrator
 		loginPage
 			.loginAs("administrator", "openolat")
@@ -91,14 +93,16 @@ public class LoginTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void loginAsNewUser(@InitialPage LoginPage loginPage)
+	public void loginAsNewUser()
 	throws IOException, URISyntaxException {
 		//create a random user
 		UserRestClient userClient = new UserRestClient(deploymentUrl);
 		UserVO user = userClient.createRandomUser();
 
 		//load dmz
-		loginPage.assertOnLoginPage();
+		LoginPage loginPage = LoginPage
+				.load(browser, deploymentUrl)
+				.assertOnLoginPage();
 		//login
 		loginPage.loginAs(user.getLogin(), user.getPassword());
 	}
@@ -118,7 +122,7 @@ public class LoginTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void maintenanceMessage(@InitialPage LoginPage loginPage, 
+	public void maintenanceMessage( 
 			@Drone @Participant WebDriver reiBrowser,
 			@Drone @Student WebDriver kanuBrowser)
 	throws IOException, URISyntaxException {
@@ -127,24 +131,24 @@ public class LoginTest extends Deployments {
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
 		
 		//a first user log in
-		LoginPage kanuLogin = LoginPage.getLoginPage(kanuBrowser, deploymentUrl)
+		LoginPage kanuLogin = LoginPage.load(kanuBrowser, deploymentUrl)
 			.loginAs(kanu)
 			.resume();
 		
 		// administrator come in, and set a maintenance message
-		loginPage
+		LoginPage.load(browser, deploymentUrl)
 			.assertOnLoginPage()
 			.loginAs("administrator", "openolat")
 			.resume();
 		
 		String message = "Hello - " + UUID.randomUUID();
-		AdministrationMessagesPage messagesPage = new NavigationPage(browser)
+		AdministrationMessagesPage messagesPage = NavigationPage.load(browser)
 			.openAdministration()
 			.selectInfoMessages()
 			.newMaintenanceMessage(message);
 		
 		//A new user see the login page 	
-		LoginPage.getLoginPage(reiBrowser, deploymentUrl)
+		LoginPage.load(reiBrowser, deploymentUrl)
 			.waitOnMaintenanceMessage(message)
 			.loginAs(rei)
 			.resume()
diff --git a/src/test/java/org/olat/selenium/PortfolioV2Test.java b/src/test/java/org/olat/selenium/PortfolioV2Test.java
index a3330a22ed42c4e3c56a108b2223c04a18a46a96..5f9034a17a7bbab11f24cec87bd283784a0448ee 100644
--- a/src/test/java/org/olat/selenium/PortfolioV2Test.java
+++ b/src/test/java/org/olat/selenium/PortfolioV2Test.java
@@ -28,8 +28,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
-import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Assert;
@@ -81,8 +79,6 @@ public class PortfolioV2Test extends Deployments {
 	private WebDriver browser;
 	@ArquillianResource
 	private URL deploymentUrl;
-	@Page
-	private NavigationPage navBar;
 	
 	
 	/**
@@ -94,10 +90,11 @@ public class PortfolioV2Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createSimpleBinder(@InitialPage LoginPage loginPage) 
+	public void createSimpleBinder() 
 			throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createRandomUser("rei");
 		
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
@@ -135,17 +132,18 @@ public class PortfolioV2Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createTemplate(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void createTemplate(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou");
-		
-		loginPage
+
+		LoginPage
+			.load(browser, deploymentUrl)
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		String binderTitle = "PF-Binder-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createPortfolioBinder(binderTitle)
@@ -194,13 +192,13 @@ public class PortfolioV2Test extends Deployments {
 			.finish();
 		
 		//Participant log in
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
-		ryomouLoginPage
+		LoginPage
+			.load(ryomouBrowser, deploymentUrl)
 			.loginAs(ryomou)
 			.resume();
 		
 		//open the course
-		NavigationPage ryomouNavBar = new NavigationPage(ryomouBrowser);
+		NavigationPage ryomouNavBar = NavigationPage.load(ryomouBrowser);
 		ryomouNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -231,10 +229,11 @@ public class PortfolioV2Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void collectForumMediaInCourse(@InitialPage LoginPage loginPage)
+	public void collectForumMediaInCourse()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
@@ -242,6 +241,7 @@ public class PortfolioV2Test extends Deployments {
 		String courseTitle = "Collect-Forum-" + UUID.randomUUID();
 		String forumTitle = ("Forum-" + UUID.randomUUID()).substring(0, 24);
 		//go to authoring, create a course with a forum
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.openCreateDropDown()
@@ -294,15 +294,17 @@ public class PortfolioV2Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void collectWikiMediaInWikiResource(@InitialPage LoginPage loginPage)
+	public void collectWikiMediaInWikiResource()
 	throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		//go to authoring
+		NavigationPage navBar = NavigationPage.load(browser);
 		AuthoringEnvPage authoringEnv = navBar
 			.assertOnNavigationPage()
 			.openAuthoringEnvironment();
@@ -349,15 +351,17 @@ public class PortfolioV2Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void collectBlogEntryMediaInBlogResource(@InitialPage LoginPage loginPage)
+	public void collectBlogEntryMediaInBlogResource()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		//create a course
 		String courseTitle = "Course-With-Blog-" + UUID.randomUUID().toString();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -427,17 +431,18 @@ public class PortfolioV2Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void collectEfficiencyStatement(@InitialPage LoginPage authorLoginPage,
-			@Drone @User WebDriver ryomouBrowser)
+	public void collectEfficiencyStatement(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("Ryomou");
-		
-		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
+
+		LoginPage.load(browser, deploymentUrl)
+			.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
 		String courseTitle = "Course-Assessment-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createCourse(courseTitle)
@@ -491,8 +496,8 @@ public class PortfolioV2Test extends Deployments {
 			.assertUserPassedCourseNode(assessmentNodeTitle);
 		
 		//Ryomou login
-		LoginPage ryomouLoginPage = LoginPage.getLoginPage(ryomouBrowser, deploymentUrl);
-		ryomouLoginPage
+		LoginPage
+			.load(ryomouBrowser, deploymentUrl)
 			.loginAs(ryomou.getLogin(), ryomou.getPassword())
 			.resume();
 		
@@ -534,13 +539,13 @@ public class PortfolioV2Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void binderInvitation(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver inviteeBrowser)
+	public void binderInvitation(@Drone @User WebDriver inviteeBrowser)
 			throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createRandomUser("rei");
-		
-		loginPage
+
+		LoginPage
+			.load(browser, deploymentUrl)
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
@@ -631,18 +636,19 @@ public class PortfolioV2Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void binderAssessment(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver reiBrowser)
+	public void binderAssessment(@Drone @User WebDriver reiBrowser)
 			throws IOException, URISyntaxException {
 		
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
 		UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("rei");
-		
-		loginPage
+
+		LoginPage
+			.load(browser, deploymentUrl)
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		String binderTitle = "Binder to assess " + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openAuthoringEnvironment()
 			.createPortfolioBinder(binderTitle)
@@ -707,13 +713,13 @@ public class PortfolioV2Test extends Deployments {
 			.finish();
 		
 		//Participant log in
-		LoginPage reiLoginPage = LoginPage.getLoginPage(reiBrowser, deploymentUrl);
-		reiLoginPage
+		LoginPage
+			.load(reiBrowser, deploymentUrl)
 			.loginAs(rei)
 			.resume();
 		
 		//open the course
-		NavigationPage reiNavBar = new NavigationPage(reiBrowser);
+		NavigationPage reiNavBar = NavigationPage.load(reiBrowser);
 		reiNavBar
 			.openMyCourses()
 			.select(courseTitle);
@@ -799,10 +805,11 @@ public class PortfolioV2Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void editPage(@InitialPage LoginPage loginPage) 
+	public void editPage() 
 			throws IOException, URISyntaxException {
 		UserVO user = new UserRestClient(deploymentUrl).createRandomUser("rei");
-		loginPage
+		LoginPage
+			.load(browser, deploymentUrl)
 			.loginAs(user.getLogin(), user.getPassword())
 			.resume();
 		
@@ -872,11 +879,12 @@ public class PortfolioV2Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void deletePage(@InitialPage LoginPage loginPage)
+	public void deletePage()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createRandomUser("rei");
-		
-		loginPage
+
+		LoginPage
+			.load(browser, deploymentUrl)
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
@@ -956,11 +964,12 @@ public class PortfolioV2Test extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void deleteBinder(@InitialPage LoginPage loginPage)
+	public void deleteBinder()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createRandomUser("rei");
-		
-		loginPage
+
+		LoginPage
+			.load(browser, deploymentUrl)
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
diff --git a/src/test/java/org/olat/selenium/QuestionPoolTest.java b/src/test/java/org/olat/selenium/QuestionPoolTest.java
index 52839020b0807fbe7b4bfba9f4dec1d6c5ccf122..c319dae75196febeabc287fe69200f7336d99d07 100644
--- a/src/test/java/org/olat/selenium/QuestionPoolTest.java
+++ b/src/test/java/org/olat/selenium/QuestionPoolTest.java
@@ -26,8 +26,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
-import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Test;
@@ -58,8 +56,6 @@ public class QuestionPoolTest extends Deployments {
 	private WebDriver browser;
 	@ArquillianResource
 	private URL deploymentUrl;
-	@Page
-	private NavigationPage navBar;
 	
 	/**
 	 * Smoke test: an author create a QTI 2.1 question,
@@ -71,15 +67,17 @@ public class QuestionPoolTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void questionPool(@InitialPage LoginPage loginPage)
+	public void questionPool()
 	throws IOException, URISyntaxException {
 		UserVO author = new UserRestClient(deploymentUrl).createAuthor("Lili");
-		
+
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(author.getLogin(), author.getPassword())
 			.resume();
 		
 		String questionTitle = "SC-" + UUID.randomUUID();
+		NavigationPage navBar = NavigationPage.load(browser);
 		QuestionPoolPage questionPool = navBar.assertOnNavigationPage()
 			.openQuestionPool();
 		questionPool
@@ -102,15 +100,16 @@ public class QuestionPoolTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void reviewProcess(@InitialPage LoginPage loginPage)
+	public void reviewProcess()
 	throws IOException, URISyntaxException {
 
 		UserVO reviewer = new UserRestClient(deploymentUrl).createAuthor("Albert");
 		
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs("administrator", "openolat")
 			.resume();
-		AdministrationPage administration = new NavigationPage(browser)
+		AdministrationPage administration = NavigationPage.load(browser)
 			.openAdministration();
 		// configure the review process
 		administration
@@ -137,7 +136,9 @@ public class QuestionPoolTest extends Deployments {
 			.resume();
 		
 		String questionTitle = "SC-" + UUID.randomUUID();
-		QuestionPoolPage questionPool = navBar.assertOnNavigationPage()
+		NavigationPage navBar = NavigationPage.load(browser);
+		QuestionPoolPage questionPool = navBar
+			.assertOnNavigationPage()
 			.openQuestionPool();
 		questionPool
 			.selectMyQuestions()
diff --git a/src/test/java/org/olat/selenium/UserTest.java b/src/test/java/org/olat/selenium/UserTest.java
index c536b50635c30f666c39434ef8ce554271fa046b..2e3cfa84334ffbc6aee38658eecfca6b8f6348e7 100644
--- a/src/test/java/org/olat/selenium/UserTest.java
+++ b/src/test/java/org/olat/selenium/UserTest.java
@@ -27,8 +27,6 @@ import java.util.UUID;
 
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.page.InitialPage;
-import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.Assert;
@@ -72,9 +70,7 @@ public class UserTest extends Deployments {
 	private WebDriver browser;
 	@ArquillianResource
 	private URL deploymentUrl;
-	
-	@Page
-	private NavigationPage navBar;
+
 	
 	/**
 	 * Set the resume preferences to automatically resume the session,
@@ -85,7 +81,7 @@ public class UserTest extends Deployments {
 	 * @throws URISyntaxException
 	 */
 	@Test
-	public void resumeCourseAutomatically(@InitialPage LoginPage loginPage)
+	public void resumeCourseAutomatically()
 	throws IOException, URISyntaxException {
 		//create a random user
 		UserVO user = new UserRestClient(deploymentUrl).createRandomUser();
@@ -93,6 +89,7 @@ public class UserTest extends Deployments {
 		CourseVO course = new RepositoryRestClient(deploymentUrl).deployDemoCourse();
 
 		//login
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.assertOnLoginPage()
 			.loginAs(user.getLogin(), user.getPassword());
@@ -138,7 +135,7 @@ public class UserTest extends Deployments {
 	 * @throws URISyntaxException
 	 */
 	@Test
-	public void resumeCourseOnDemand(@InitialPage LoginPage loginPage)
+	public void resumeCourseOnDemand()
 	throws IOException, URISyntaxException {
 		//create a random user
 		UserVO user = new UserRestClient(deploymentUrl).createRandomUser();
@@ -146,7 +143,8 @@ public class UserTest extends Deployments {
 		CourseVO course = new RepositoryRestClient(deploymentUrl).deployDemoCourse();
 
 		//login
-		loginPage.loginAs(user.getLogin(), user.getPassword());
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl)
+				.loginAs(user.getLogin(), user.getPassword());
 		
 		//set the preferences to resume automatically
 		UserToolsPage userTools = new UserToolsPage(browser);
@@ -186,11 +184,11 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void resumeDisabled(@InitialPage LoginPage loginPage)
+	public void resumeDisabled()
 	throws IOException, URISyntaxException {
 		
 		UserVO user = new UserRestClient(deploymentUrl).createRandomUser();
-		loginPage
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl)
 			.loginAs(user.getLogin(), user.getPassword())
 			.resume();
 		
@@ -229,13 +227,13 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void loginInHomeWithLandingPage(@InitialPage LoginPage loginPage)
+	public void loginInHomeWithLandingPage()
 	throws IOException, URISyntaxException {
 		//create a random user
 		UserRestClient userClient = new UserRestClient(deploymentUrl);
 		UserVO user = userClient.createAuthor();
 
-		loginPage
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl)
 			.assertOnLoginPage()
 			.loginAs(user.getLogin(), user.getPassword());
 
@@ -268,14 +266,15 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void loginInHomeWithRestUrl(@InitialPage LoginPage loginPage)
+	public void loginInHomeWithRestUrl()
 	throws IOException, URISyntaxException {
 		//create a random user
 		UserRestClient userClient = new UserRestClient(deploymentUrl);
 		UserVO user = userClient.createRandomUser();
 
 		//load dmz
-		loginPage.assertOnLoginPage();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl)
+				.assertOnLoginPage();
 		
 		String jumpToNotificationsUrl = deploymentUrl.toString() + "url/HomeSite/" + user.getKey() + "/notifications/0";
 		browser.get(jumpToNotificationsUrl);
@@ -284,7 +283,8 @@ public class UserTest extends Deployments {
 		new UserToolsPage(browser).assertOnNotifications();
 		
 		//go to courses
-		navBar.openMyCourses();
+		NavigationPage.load(browser)
+			.openMyCourses();
 		
 		//use url to go to notifications
 		String goToNotificationsUrl = deploymentUrl.toString() + "auth/HomeSite/" + user.getKey() + "/notifications/0";
@@ -307,7 +307,7 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void restUrlAfterLogin(@InitialPage LoginPage loginPage)
+	public void restUrlAfterLogin()
 	throws IOException, URISyntaxException {
 		//create a random user
 		UserRestClient userClient = new UserRestClient(deploymentUrl);
@@ -315,11 +315,13 @@ public class UserTest extends Deployments {
 		UserVO ryomou = userClient.createRandomUser("Ryomou");
 
 		//load dmz
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.assertOnLoginPage()
 			.loginAs(user.getLogin(), user.getPassword());
 		
 		//go to courses
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar.openMyCourses();
 		
 		//use url to go to the other users business card
@@ -369,10 +371,11 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void userSwitchLanguageSwitchToEnglish(@InitialPage LoginPage loginPage)
+	public void userSwitchLanguageSwitchToEnglish()
 	throws IOException, URISyntaxException {
 		
 		UserVO user = new UserRestClient(deploymentUrl).createRandomUser();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(user.getLogin(), user.getPassword())
 			.resume();
@@ -429,10 +432,11 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void userChangeItsPassword(@InitialPage LoginPage loginPage)
+	public void userChangeItsPassword()
 	throws IOException, URISyntaxException {
 		
 		UserVO user = new UserRestClient(deploymentUrl).createRandomUser();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(user.getLogin(), user.getPassword())
 			.resume();
@@ -463,10 +467,11 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void userResetItsPreferences(@InitialPage LoginPage loginPage)
+	public void userResetItsPreferences()
 	throws IOException, URISyntaxException {
 		
 		UserVO user = new UserRestClient(deploymentUrl).createRandomUser();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(user.getLogin(), user.getPassword())
 			.resume();
@@ -493,13 +498,15 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void portletDeactivateActivate(@InitialPage LoginPage loginPage)
+	public void portletDeactivateActivate()
 	throws IOException, URISyntaxException {
 		
 		UserVO user = new UserRestClient(deploymentUrl).createRandomUser();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(user.getLogin(), user.getPassword());
 		
+		NavigationPage navBar = NavigationPage.load(browser);
 		PortalPage portal = navBar.openPortal()
 			.assertPortlet(PortalPage.quickStartBy)
 			.edit()
@@ -528,13 +535,15 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void movePortletToTheTop(@InitialPage LoginPage loginPage)
+	public void movePortletToTheTop()
 	throws IOException, URISyntaxException {
 		
 		UserVO user = new UserRestClient(deploymentUrl).createRandomUser();
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs(user.getLogin(), user.getPassword());
-		
+
+		NavigationPage navBar = NavigationPage.load(browser);
 		PortalPage portal = navBar.openPortal()
 			.assertPortlet(PortalPage.notesBy)
 			.edit()
@@ -569,12 +578,14 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void browserBack(@InitialPage LoginPage loginPage)
+	public void browserBack()
 	throws IOException, URISyntaxException {
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.loginAs("administrator", "openolat")
 			.resume();
-		
+
+		NavigationPage navBar = NavigationPage.load(browser);
 		navBar
 			.openPortal()
 			.assertPortlet(PortalPage.quickStartBy);
@@ -601,11 +612,11 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void createUser(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver userBrowser)
+	public void createUser(@Drone @User WebDriver userBrowser)
 	throws IOException, URISyntaxException {
 		
 		//login
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.assertOnLoginPage()
 			.loginAs("administrator", "openolat")
@@ -614,6 +625,8 @@ public class UserTest extends Deployments {
 		String uuid = UUID.randomUUID().toString();
 		String username = "miku-" + uuid;
 		UserVO userVo = UserAdminPage.createUserVO(username, "Miku", "Hatsune", "miku-" + uuid + "@openolat.com", "miku01");
+
+		NavigationPage navBar = NavigationPage.load(browser);
 		UserAdminPage userAdminPage = navBar
 			.openUserManagement()
 			.openCreateUser()
@@ -628,7 +641,7 @@ public class UserTest extends Deployments {
 			.assertOnUserEditView(username);
 		
 		//user log in
-		LoginPage userLoginPage = LoginPage.getLoginPage(userBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(userBrowser, deploymentUrl);
 		//tools
 		userLoginPage
 			.loginAs(username, "miku01")
@@ -648,10 +661,10 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void deleteUser(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver userBrowser) {
+	public void deleteUser(@Drone @User WebDriver userBrowser) {
 		
 		//login
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.assertOnLoginPage()
 			.loginAs("administrator", "openolat")
@@ -661,6 +674,8 @@ public class UserTest extends Deployments {
 		String username = "miku-" + uuid;
 		String lastName = "Hatsune" + uuid;
 		UserVO userVo = UserAdminPage.createUserVO(username, "Miku", lastName, "miku-" + uuid + "@openolat.com", "miku01");
+
+		NavigationPage navBar = NavigationPage.load(browser);
 		UserAdminPage userAdminPage = navBar
 			.openUserManagement()
 			.openCreateUser()
@@ -668,7 +683,7 @@ public class UserTest extends Deployments {
 			.assertOnUserEditView(username);
 		
 		//user log in
-		LoginPage userLoginPage = LoginPage.getLoginPage(userBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(userBrowser, deploymentUrl);
 		//tools
 		userLoginPage
 			.loginAs(username, "miku01")
@@ -685,7 +700,7 @@ public class UserTest extends Deployments {
 			.selectAndDeleteUser(lastName);
 		
 		//user try the login
-		userLoginPage = LoginPage.getLoginPage(userBrowser, deploymentUrl);
+		userLoginPage = LoginPage.load(userBrowser, deploymentUrl);
 		userLoginPage
 			.loginDenied(username, "miku01");
 		//assert on error message
@@ -709,15 +724,16 @@ public class UserTest extends Deployments {
 	 */
 	@Test
 	@RunAsClient
-	public void importUsers(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver userBrowser)
+	public void importUsers(@Drone @User WebDriver userBrowser)
 	throws IOException, URISyntaxException {
 		//login
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.assertOnLoginPage()
 			.loginAs("administrator", "openolat")
 			.resume();
-		
+
+		NavigationPage navBar = NavigationPage.load(browser);
 		UserAdminPage userAdminPage = navBar
 			.openUserManagement()
 			.openImportUsers();
@@ -742,7 +758,7 @@ public class UserTest extends Deployments {
 		OOGraphene.waitAndCloseBlueMessageWindow(browser);
 		
 		//user log in
-		LoginPage userLoginPage = LoginPage.getLoginPage(userBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(userBrowser, deploymentUrl);
 		//tools
 		userLoginPage
 			.loginAs(username1, "rosario01")
@@ -761,8 +777,7 @@ public class UserTest extends Deployments {
 	 */
 	@Test 
 	@RunAsClient
-	public void importExistingUsers(@InitialPage LoginPage loginPage,
-			@Drone @User WebDriver existingUserBrowser,
+	public void importExistingUsers(@Drone @User WebDriver existingUserBrowser,
 			@Drone @Student WebDriver newUserBrowser)
 	throws IOException, URISyntaxException {
 
@@ -770,11 +785,13 @@ public class UserTest extends Deployments {
 			.createRandomUser("tsukune");
 		
 		//login
+		LoginPage loginPage = LoginPage.load(browser, deploymentUrl);
 		loginPage
 			.assertOnLoginPage()
 			.loginAs("administrator", "openolat")
 			.resume();
-		
+
+		NavigationPage navBar = NavigationPage.load(browser);
 		UserAdminPage userAdminPage = navBar
 			.openUserManagement()
 			.openImportUsers();
@@ -801,7 +818,7 @@ public class UserTest extends Deployments {
 		OOGraphene.waitAndCloseBlueMessageWindow(browser);
 		
 		//existing user log in with its new password and check if its name was updated
-		LoginPage userLoginPage = LoginPage.getLoginPage(existingUserBrowser, deploymentUrl);
+		LoginPage userLoginPage = LoginPage.load(existingUserBrowser, deploymentUrl);
 		//tools
 		userLoginPage
 			.loginAs(user1.getLogin(), "openolat2")
@@ -809,7 +826,7 @@ public class UserTest extends Deployments {
 			.assertLoggedInByLastName("Aono");
 		
 		//new user log in
-		LoginPage newLoginPage = LoginPage.getLoginPage(newUserBrowser, deploymentUrl);
+		LoginPage newLoginPage = LoginPage.load(newUserBrowser, deploymentUrl);
 		//tools
 		newLoginPage
 			.loginAs(newUser.getLogin(), "rosario02")
diff --git a/src/test/java/org/olat/selenium/page/LoginPage.java b/src/test/java/org/olat/selenium/page/LoginPage.java
index 57a937166e62b8f806f4a48d6a0d57d23d950233..5630c145142de879a3fb293ea472ccfa219d76c3 100644
--- a/src/test/java/org/olat/selenium/page/LoginPage.java
+++ b/src/test/java/org/olat/selenium/page/LoginPage.java
@@ -24,8 +24,6 @@ import java.net.URL;
 import java.util.List;
 
 import org.jboss.arquillian.drone.api.annotation.Drone;
-import org.jboss.arquillian.graphene.Graphene;
-import org.jboss.arquillian.graphene.page.Location;
 import org.junit.Assert;
 import org.olat.selenium.page.graphene.OOGraphene;
 import org.olat.user.restapi.UserVO;
@@ -41,7 +39,6 @@ import org.openqa.selenium.WebElement;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
-@Location("dmz")
 public class LoginPage {
 	
 	private static final String footerUserDivXPath = "//div[@id='o_footer_user']/span[@id='o_username']";
@@ -60,9 +57,10 @@ public class LoginPage {
 	@Drone
 	private WebDriver browser;
 	
-	public static LoginPage getLoginPage(WebDriver browser, URL deploymentUrl) {
+	public static LoginPage load(WebDriver browser, URL deploymentUrl) {
 		LoginPage page = new LoginPage(browser);
 		browser.navigate().to(deploymentUrl);
+		OOGraphene.waitElement(loginFormBy, browser);
 		return page;
 	}
 	
@@ -105,7 +103,7 @@ public class LoginPage {
 	
 	public LoginPage assertOnMembershipConfirmation() {
 		By reservationBy = By.cssSelector("div.o_reservation");
-		OOGraphene.waitElement(reservationBy, 5, browser);
+		OOGraphene.waitElement(reservationBy, 10, browser);
 		WebElement reservationEl = browser.findElement(reservationBy);
 		Assert.assertTrue(reservationEl.isDisplayed());
 		return this;
@@ -126,9 +124,8 @@ public class LoginPage {
 	 */
 	public void asGuest() {
 		By guestLinkBy = By.xpath("//a[contains(@href,'menu.guest')]");
-		WebElement guestLink = browser.findElement(guestLinkBy);
-		Graphene.guardHttp(guestLink).click();
-
+		OOGraphene.waitElement(guestLinkBy, browser);
+		browser.findElement(guestLinkBy).click();
 		By footerUserDivBy = By.id("o_footer_user");
 		OOGraphene.waitElement(footerUserDivBy, browser);
 	}
diff --git a/src/test/java/org/olat/selenium/page/NavigationPage.java b/src/test/java/org/olat/selenium/page/NavigationPage.java
index b6bfcdb5b827e1dbf0401728c452622ec99de8d7..5de107c8241b978b11ebf76e0816dedfd306b305 100644
--- a/src/test/java/org/olat/selenium/page/NavigationPage.java
+++ b/src/test/java/org/olat/selenium/page/NavigationPage.java
@@ -21,7 +21,6 @@ package org.olat.selenium.page;
 
 import java.util.List;
 
-import org.jboss.arquillian.drone.api.annotation.Drone;
 import org.junit.Assert;
 import org.olat.selenium.page.core.AdministrationPage;
 import org.olat.selenium.page.course.MyCoursesPage;
@@ -61,15 +60,15 @@ public class NavigationPage {
 	public static final By portalAssertBy = By.className("o_portal");
 	public static final By toolbarBackBy = By.cssSelector("li.o_breadcrumb_back>a");
 	
-	@Drone
-	private WebDriver browser;
+	private final WebDriver browser;
 	
-	public NavigationPage() {
-		//
+	private NavigationPage(WebDriver browser) {
+		this.browser = browser;
 	}
 	
-	public NavigationPage(WebDriver browser) {
-		this.browser = browser;
+	public static final NavigationPage load(WebDriver browser) {
+		OOGraphene.waitElement(navigationSitesBy, browser);
+		return new NavigationPage(browser);
 	}
 	
 	public NavigationPage assertOnNavigationPage() {
@@ -157,9 +156,8 @@ public class NavigationPage {
 	
 	private void openMoreMenu() {
 		By openMoreBy = By.cssSelector("#o_navbar_more a.dropdown-toggle");
-		List<WebElement> openMoreLinks = browser.findElements(openMoreBy);
-		Assert.assertFalse(openMoreLinks.isEmpty());
-		openMoreLinks.get(0).click();
+		OOGraphene.waitElement(openMoreBy, browser);
+		browser.findElement(openMoreBy).click();
 		//wait the small transition
 		By openedMoreMenuby = By.cssSelector("#o_navbar_more ul.dropdown-menu.dropdown-menu-right");
 		OOGraphene.waitElement(openedMoreMenuby, 5, browser);
diff --git a/src/test/java/org/olat/selenium/page/core/AdministrationPage.java b/src/test/java/org/olat/selenium/page/core/AdministrationPage.java
index a75cd852c188836428d8db831acaedf84af66426..080afd214e769577723e60c625b207cb17d873ad 100644
--- a/src/test/java/org/olat/selenium/page/core/AdministrationPage.java
+++ b/src/test/java/org/olat/selenium/page/core/AdministrationPage.java
@@ -127,29 +127,25 @@ public class AdministrationPage {
 	}
 	
 	public AdministrationPage setGroupConfirmationForUser(boolean mandatory) {
-		By userConfirmationBy = By.xpath("//label[input[@name='mandatory.membership' and @value='user']]");
 		By userConfirmationCheckBy = By.xpath("//label/input[@name='mandatory.membership' and @value='user']");
 		
-		OOGraphene.waitElement(userConfirmationBy, browser);
-		OOGraphene.scrollTo(userConfirmationBy, browser);
+		OOGraphene.waitElement(userConfirmationCheckBy, browser);
+		OOGraphene.scrollTo(userConfirmationCheckBy, browser);
 		
-		WebElement userConfirmationEl = browser.findElement(userConfirmationBy);
 		WebElement userConfirmationCheckEl = browser.findElement(userConfirmationCheckBy);
-		OOGraphene.check(userConfirmationEl, userConfirmationCheckEl, new Boolean(mandatory));
+		OOGraphene.check(userConfirmationCheckEl, Boolean.valueOf(mandatory));
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
 	
 	public AdministrationPage setGroupConfirmationForAuthor(boolean mandatory) {
-		By authorConfirmationBy = By.xpath("//label[input[@name='mandatory.membership' and @value='author']]");
 		By authorConfirmationCheckBy = By.xpath("//label/input[@name='mandatory.membership' and @value='author']");
 		
-		OOGraphene.waitElement(authorConfirmationBy, 5, browser);
-		OOGraphene.scrollTo(authorConfirmationBy, browser);
+		OOGraphene.waitElement(authorConfirmationCheckBy, browser);
+		OOGraphene.scrollTo(authorConfirmationCheckBy, browser);
 		
-		WebElement authorConfirmationEl = browser.findElement(authorConfirmationBy);
 		WebElement authorConfirmationCheckEl = browser.findElement(authorConfirmationCheckBy);
-		OOGraphene.check(authorConfirmationEl, authorConfirmationCheckEl, new Boolean(mandatory));
+		OOGraphene.check(authorConfirmationCheckEl, Boolean.valueOf(mandatory));
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
diff --git a/src/test/java/org/olat/selenium/page/core/CalendarPage.java b/src/test/java/org/olat/selenium/page/core/CalendarPage.java
index 12ab23035000513d494dafd92d3333d35f554e13..7ed8c9bad8efc4df42b6bf017de90eda42d0b543 100644
--- a/src/test/java/org/olat/selenium/page/core/CalendarPage.java
+++ b/src/test/java/org/olat/selenium/page/core/CalendarPage.java
@@ -72,8 +72,7 @@ public class CalendarPage {
 	 * @return The calendar page
 	 */
 	public CalendarPage assertOnCalendar() {
-		List<WebElement> calendarToolbarsEl = browser.findElements(calendarToolbatBy);
-		Assert.assertFalse(calendarToolbarsEl.isEmpty());
+		OOGraphene.waitElement(calendarToolbatBy, browser);
 		return this;
 	}
 	
@@ -116,12 +115,10 @@ public class CalendarPage {
 	
 	public CalendarPage setAllDay(boolean allDay) {
 		By locationBy = By.xpath("//fieldset[contains(@class,'o_sel_cal_entry_form')]//div[contains(@class,'o_sel_cal_all_day')]//input[@type='checkbox']");
-		By labelLocationBy = By.xpath("//fieldset[contains(@class,'o_sel_cal_entry_form')]//div[contains(@class,'o_sel_cal_all_day')]//label[input[@type='checkbox']]");
 		
 		WebElement allDayEl = browser.findElement(locationBy);
-		WebElement allDayLabelEl = browser.findElement(labelLocationBy);
-		OOGraphene.scrollTo(labelLocationBy, browser);
-		OOGraphene.check(allDayLabelEl, allDayEl, new Boolean(allDay));
+		OOGraphene.scrollTo(locationBy, browser);
+		OOGraphene.check(allDayEl, new Boolean(allDay));
 		
 		if(!allDay) {
 			By hourBy = By.xpath("//fieldset[contains(@class,'o_sel_cal_entry_form')]//div[contains(@class,'o_sel_cal_begin')]//input[contains(@id,'o_dch_')]");
@@ -149,33 +146,28 @@ public class CalendarPage {
 		new Select(recurrenceEl).selectByValue(recur);
 		OOGraphene.waitBusy(browser);
 		
-		//By untilBy = By.cssSelector("fieldset.o_sel_cal_entry_form div.o_sel_cal_until input[type='text']");
 		By untilAltBy = By.cssSelector("fieldset.o_sel_cal_entry_form div.o_sel_cal_until span.input-group-addon i");
-		OOGraphene.waitElement(untilAltBy, 5, browser);
+		OOGraphene.waitElement(untilAltBy, browser);
 		browser.findElement(untilAltBy).click();
-		OOGraphene.waitGui(browser);
-
 		selectDayInDatePicker(day);
 		return this;
 	}
 	
 	private CalendarPage selectDayInDatePicker(int day) {
 		By datePickerBy = By.id("ui-datepicker-div");
-		OOGraphene.waitElement(datePickerBy, 5, browser);
+		OOGraphene.waitElement(datePickerBy, browser);
 		
 		By dayBy = By.xpath("//div[@id='ui-datepicker-div']//td//a[normalize-space(text())='" + day + "']");
-		OOGraphene.waitElement(dayBy, 5, browser);
+		OOGraphene.waitElement(dayBy, browser);
 		browser.findElement(dayBy).click();
-		
 		OOGraphene.waitElementUntilNotVisible(datePickerBy, 5, browser);
-		//OOGraphene.waitingALittleBit();
 		return this;
 	}
 	
 	public CalendarPage save() {
 		By saveBy = By.cssSelector("fieldset.o_sel_cal_entry_form button.btn.btn-primary span");
 		OOGraphene.waitElement(saveBy, 5, browser);
-		OOGraphene.clickAndWait(saveBy, browser);//TODO sel
+		OOGraphene.clickAndWait(saveBy, browser);//TODO selenium
 		return this;
 	}
 	
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 95cfe38ecbc5817c7746bd3a33800512d5c22009..6362daeb02a12207dc6988b4579eb0d3df83e449 100644
--- a/src/test/java/org/olat/selenium/page/core/ContactPage.java
+++ b/src/test/java/org/olat/selenium/page/core/ContactPage.java
@@ -62,8 +62,9 @@ public class ContactPage {
 	
 	public ContactPage send() {
 		By sendBy = By.cssSelector("fieldset.o_sel_contact_form button.btn-primary");
-		OOGraphene.clickAndWait(sendBy, browser);
-		OOGraphene.closeBlueMessageWindow(browser);
+		OOGraphene.moveAndClick(sendBy, browser);
+		OOGraphene.moveTop(browser);
+		OOGraphene.waitAndCloseBlueMessageWindow(browser);
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/core/FolderPage.java b/src/test/java/org/olat/selenium/page/core/FolderPage.java
index 9e2c804eac64574f0e2fe618c7bc31c699679397..bb0799058b553aee4a88676ba5d182e83388ea2e 100644
--- a/src/test/java/org/olat/selenium/page/core/FolderPage.java
+++ b/src/test/java/org/olat/selenium/page/core/FolderPage.java
@@ -137,7 +137,7 @@ public class FolderPage {
 		
 		// tooltip of the image sometimes appears and block the click
 		By tooltipBy = By.cssSelector("div.tooltip-inner");
-		WebElement rootEl = OOGraphene.unwrap(browser.findElement(rootBy));
+		WebElement rootEl = browser.findElement(rootBy);
 		List<WebElement> tooltipEls = browser.findElements(tooltipBy);
 		if(tooltipEls.size() > 0) {
 			new Actions(browser)
diff --git a/src/test/java/org/olat/selenium/page/core/IMPage.java b/src/test/java/org/olat/selenium/page/core/IMPage.java
index 645ae41495721b30428c85f8b582babb4de35f44..e7f3f977272a04049b13f2cd657137ab02985ba0 100644
--- a/src/test/java/org/olat/selenium/page/core/IMPage.java
+++ b/src/test/java/org/olat/selenium/page/core/IMPage.java
@@ -19,11 +19,6 @@
  */
 package org.olat.selenium.page.core;
 
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Function;
-
-import org.jboss.arquillian.graphene.Graphene;
 import org.olat.selenium.page.graphene.OOGraphene;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
@@ -84,21 +79,8 @@ public class IMPage {
 	 * @return
 	 */
 	public IMPage assertOnMessage(final String message) {
-		final By historyBy = By.cssSelector(".o_im_chat_history .o_im_body");
-		
-		Graphene.waitModel().withTimeout(10, TimeUnit.SECONDS).until(new Function<WebDriver,Boolean>(){
-			@Override
-			public Boolean apply(WebDriver bbrowser) {
-				boolean found = false;
-				List<WebElement> history = bbrowser.findElements(historyBy);
-				for(WebElement m:history) {
-					if(m.getText().contains(message)) {
-						found = true;
-					}
-				}
-				return found;
-			}
-		});
+		final By historyBy = By.xpath("//div[contains(@class,'o_im_body')][text()[contains(.,'" + message + "')]]");
+		OOGraphene.waitElement(historyBy, 10, browser);
 		return this;
 	}
 }
diff --git a/src/test/java/org/olat/selenium/page/core/LicensesAdminstrationPage.java b/src/test/java/org/olat/selenium/page/core/LicensesAdminstrationPage.java
index 96546fb87c0cfa186866242abc68d55a5d7c5575..6070739b31770ddec1cfacfb440dfaae463048f9 100644
--- a/src/test/java/org/olat/selenium/page/core/LicensesAdminstrationPage.java
+++ b/src/test/java/org/olat/selenium/page/core/LicensesAdminstrationPage.java
@@ -24,7 +24,6 @@ import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.chrome.ChromeDriver;
-import org.openqa.selenium.interactions.Actions;
 
 /**
  * 
@@ -42,17 +41,13 @@ public class LicensesAdminstrationPage {
 	
 	public LicensesAdminstrationPage enableForResources(String license) {
 		By resourceCheckBy = By.xpath("//div[contains(@class,'o_table_flexi')]//tr[td[text()[contains(.,'" + license + "')]]]/td[10]/div/label/input[@type='checkbox']");
-		By resourceLabelBy = By.xpath("//div[contains(@class,'o_table_flexi')]//tr[td[text()[contains(.,'" + license + "')]]]/td[10]/div/label");
-
-		WebElement resourceCheckEl = browser.findElement(resourceCheckBy);
-		WebElement resourceLabelEl = browser.findElement(resourceLabelBy);
 		if(browser instanceof ChromeDriver) {
-			resourceLabelEl = OOGraphene.unwrap(resourceLabelEl);
-			new Actions(browser).moveToElement(resourceLabelEl).build().perform();
+			OOGraphene.moveTo(resourceCheckBy, browser);
 			OOGraphene.waitingALittleBit();
 		}
-		
-		OOGraphene.check(resourceLabelEl, resourceCheckEl, Boolean.TRUE);
+
+		WebElement resourceCheckEl = browser.findElement(resourceCheckBy);
+		OOGraphene.check(resourceCheckEl, Boolean.TRUE);
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
diff --git a/src/test/java/org/olat/selenium/page/core/MenuTreePageFragment.java b/src/test/java/org/olat/selenium/page/core/MenuTreePageFragment.java
index 3cac28a2c3b4501193c3f9ba4fd3c427b167215d..90677ad7af5b27ea17da4e10b8ecdcbfd2ce0717 100644
--- a/src/test/java/org/olat/selenium/page/core/MenuTreePageFragment.java
+++ b/src/test/java/org/olat/selenium/page/core/MenuTreePageFragment.java
@@ -62,34 +62,22 @@ public class MenuTreePageFragment {
 	}
 	
 	public MenuTreePageFragment selectWithTitle(String title) {
-		boolean found = false;
-		WebElement tree = browser.findElement(treeBy);
-		List<WebElement> nodeLinks = tree.findElements(By.cssSelector("li>div>span.o_tree_link>a"));
-		for(WebElement nodeLink:nodeLinks) {
-			String text = nodeLink.getText().toLowerCase();
-			if(text.contains(title.toLowerCase())) {
-				nodeLink.click();
-				OOGraphene.waitBusy(browser);
-				found = true;
-			}
-		}
-		
-		Assert.assertTrue("Link not found with title: " + title, found);
+		By linkBy = By.xpath("//div[contains(@class,'o_tree')]//li/div/span[contains(@class,'o_tree_link')]/a[span[contains(text(),'" + title + "')]]");
+		OOGraphene.waitElement(linkBy, browser);
+		browser.findElement(linkBy).click();
+		OOGraphene.waitBusy(browser);
 		return this;
 	}
 
 	public MenuTreePageFragment assertWithTitle(String title) {
-		boolean found = false;
-		By titleBy = By.cssSelector(".o_tree li>div>span.o_tree_link>a");
-		List<WebElement> nodeLinks = browser.findElements(titleBy);
-		for(WebElement nodeLink:nodeLinks) {
-			String text = nodeLink.getText();
-			if(text.contains(title)) {
-				found = true;
-			}
-		}
-		
-		Assert.assertTrue("Link not found with title: " + title, found);
+		By linkBy = By.xpath("//div[contains(@class,'o_tree')]//li/div/span[contains(@class,'o_tree_link')]/a[span[contains(text(),'" + title + "')]]");
+		OOGraphene.waitElement(linkBy, browser);
+		return this;
+	}
+	
+	public MenuTreePageFragment assertWithTitleSelected(String title) {
+		By linkBy = By.xpath("//div[contains(@class,'o_tree')]//li[contains(@class,'active')]/div/span[contains(@class,'o_tree_link')]/a[span[contains(text(),'" + title + "')]]");
+		OOGraphene.waitElement(linkBy, browser);
 		return this;
 	}
 
diff --git a/src/test/java/org/olat/selenium/page/course/AssessmentCEConfigurationPage.java b/src/test/java/org/olat/selenium/page/course/AssessmentCEConfigurationPage.java
index 4bc628edbe0aacc48c508ddac4d2e99a7758afe8..1e722428893cad68372535418d7317bbd74a536c 100644
--- a/src/test/java/org/olat/selenium/page/course/AssessmentCEConfigurationPage.java
+++ b/src/test/java/org/olat/selenium/page/course/AssessmentCEConfigurationPage.java
@@ -19,9 +19,6 @@
  */
 package org.olat.selenium.page.course;
 
-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;
@@ -73,26 +70,12 @@ public class AssessmentCEConfigurationPage {
 		By saveBy = By.cssSelector(".o_sel_course_ms_form button.btn.btn-primary");
 		OOGraphene.click(saveBy, browser);
 		OOGraphene.waitBusy(browser);
+		OOGraphene.scrollTop(browser);
 		return this;
 	}
 	
 	private AssessmentCEConfigurationPage selectTab(By tabBy) {
-		List<WebElement> tabLinks = browser.findElements(CourseEditorPageFragment.navBarNodeConfiguration);
-
-		boolean found = false;
-		a_a:
-		for(WebElement tabLink:tabLinks) {
-			tabLink.click();
-			OOGraphene.waitBusy(browser);
-			List<WebElement> chooseRepoEntry = browser.findElements(tabBy);
-			if(chooseRepoEntry.size() > 0) {
-				found = true;
-				break a_a;
-			}
-		}
-
-		Assert.assertTrue("Found the tab", found);
+		OOGraphene.selectTab("o_node_config", tabBy, browser);
 		return this;
 	}
-
 }
diff --git a/src/test/java/org/olat/selenium/page/course/AssessmentModePage.java b/src/test/java/org/olat/selenium/page/course/AssessmentModePage.java
index 84d27e375cdd21f26e48f809ba0619d2f229ed08..12f2bde252783c42d64671a2db9e67edb2ec0753 100644
--- a/src/test/java/org/olat/selenium/page/course/AssessmentModePage.java
+++ b/src/test/java/org/olat/selenium/page/course/AssessmentModePage.java
@@ -72,6 +72,7 @@ public class AssessmentModePage {
 		OOGraphene.closeBlueMessageWindow(browser);
 		
 		By nameBy = By.cssSelector("div.o_sel_assessment_mode_name input[type='text']");
+		OOGraphene.waitElement(nameBy, browser);
 		browser.findElement(nameBy).sendKeys(name);
 		//begin
 		OOGraphene.datetime(begin, "o_sel_assessment_mode_begin", browser);
@@ -84,8 +85,8 @@ public class AssessmentModePage {
 		//audience course
 		
 		By audienceBy = By.xpath("//div[contains(@class,'o_sel_assessment_mode_audience')]//input[@value='course']");
-		WebElement audienceEl = browser.findElement(audienceBy);
-		audienceEl.click();
+		OOGraphene.waitElement(audienceBy, browser);
+		browser.findElement(audienceBy).click();
 		return this;
 	}
 	
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 f2c445e6961dd6986c7d8e29ad653a544124e7d0..5279b7b15f184a3f6dc64552599dc1fc4776fd91 100644
--- a/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java
+++ b/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java
@@ -21,7 +21,9 @@ 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;
@@ -35,6 +37,7 @@ import org.openqa.selenium.WebElement;
  *
  */
 public class AssessmentToolPage {
+	private static final Logger log = Tracing.createLoggerFor(AssessmentToolPage.class);
 	
 	private final WebDriver browser;
 	
@@ -171,8 +174,8 @@ public class AssessmentToolPage {
 	 * @return Itself
 	 */
 	public AssessmentToolPage assertProgress(UserVO user, int progress) {
-		By progressBy = By.xpath("//div[contains(@class,'o_table_wrapper')]/table//tr[td/a[contains(.,'" + user.getFirstName() + "')]]/td/div[@class='progress']/div[@title='" + progress + "%']");
-		OOGraphene.waitElement(progressBy, 10, browser);
+		By progressBy = By.xpath("//div[contains(@class,'o_table_wrapper')]/table//tr[td/a[contains(.,'" + user.getFirstName() + "')]]/td/div[@class='progress'][div[@title='" + progress + "%']]");
+		OOGraphene.waitElement(progressBy, 15, 1, browser);
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/course/ContactConfigPage.java b/src/test/java/org/olat/selenium/page/course/ContactConfigPage.java
index 1b374ea4fe028bce413870d78b5298dbcb82a929..31357e2983193ce5709ad1a0418cf3e7dac1f5c4 100644
--- a/src/test/java/org/olat/selenium/page/course/ContactConfigPage.java
+++ b/src/test/java/org/olat/selenium/page/course/ContactConfigPage.java
@@ -40,7 +40,7 @@ public class ContactConfigPage {
 	public ContactConfigPage selectConfiguration() {
 		OOGraphene.scrollTop(browser);
 		By configBy = By.className("o_sel_co_config_form");
-		OOGraphene.selectTab(CourseEditorPageFragment.navBarNodeConfiguration, configBy, browser);
+		OOGraphene.selectTab("o_node_config", configBy, browser);
 		return this;
 	}
 	
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 5fac7c2d665bf2513e5ecef3d87339b83b5b1f9b..6572a9ab4ef0b978bbae5a833e358317820911a7 100644
--- a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
@@ -44,8 +44,6 @@ public class CourseEditorPageFragment {
 
 	public static final By toolbarBackBy = By.cssSelector("li.o_breadcrumb_back>a");
 	
-	public static final By navBarNodeConfiguration = By.cssSelector("ul.o_node_config>li>a");
-	
 	public static final By chooseCpButton = By.className("o_sel_cp_choose_repofile");
 	public static final By chooseWikiButton = By.className("o_sel_wiki_choose_repofile");
 	public static final By chooseTestButton = By.className("o_sel_test_choose_repofile");
@@ -105,7 +103,7 @@ public class CourseEditorPageFragment {
 		browser.findElement(rootNodeBy).click();
 		OOGraphene.waitBusy(browser);
 		By rootNodeActiveBy = By.cssSelector("span.o_tree_link.o_tree_l0.active");
-		OOGraphene.waitElement(rootNodeActiveBy, 5, browser);
+		OOGraphene.waitElement(rootNodeActiveBy, browser);
 		return this;
 	}
 	
@@ -149,25 +147,7 @@ public class CourseEditorPageFragment {
 	
 	private CourseEditorPageFragment selectTab(By tabBy) {
 		//make sure the tab bar is loaded
-		By navBarBy = By.cssSelector("ul.o_node_config");
-		OOGraphene.waitElement(navBarBy, 5, browser);
-		
-		List<WebElement> tabLinks = browser.findElements(navBarNodeConfiguration);
-
-		boolean found = false;
-		a_a:
-		for(WebElement tabLink:tabLinks) {
-			tabLink.click();
-			OOGraphene.waitBusy(browser);
-			OOGraphene.waitElement(tabNavTabsBy, 5, browser);
-			List<WebElement> chooseRepoEntry = browser.findElements(tabBy);
-			if(chooseRepoEntry.size() > 0) {
-				found = true;
-				break a_a;
-			}
-		}
-
-		Assert.assertTrue("Found the tab", found);
+		OOGraphene.selectTab("o_node_config", tabBy, browser);
 		return this;
 	}
 	
@@ -215,18 +195,14 @@ public class CourseEditorPageFragment {
 	 * @return
 	 */
 	public CourseEditorPageFragment createNode(String nodeAlias) {
-		OOGraphene.waitElement(createNodeButton, 5, browser);
+		OOGraphene.waitElement(createNodeButton, browser);
 		browser.findElement(createNodeButton).click();
 		OOGraphene.waitModalDialog(browser);
 		
 		By nodeBy = By.xpath("//div[@id='o_course_editor_choose_nodetype']//a[contains(@class,'o_sel_course_editor_node-" + nodeAlias + "')]");
-		OOGraphene.waitElement(nodeBy, browser);
-		if("lti".equals(nodeAlias) || "co".equals(nodeAlias) || "cal".equals(nodeAlias)) {
-			OOGraphene.clickAndWait(nodeBy, browser);
-		} else {
-			browser.findElement(nodeBy).click();
-			OOGraphene.waitBusy(browser);
-		}
+		OOGraphene.moveAndClick(nodeBy, browser);
+		OOGraphene.waitBusy(browser);
+		OOGraphene.waitModalDialogDisappears(browser);
 		return this;
 	}
 	
@@ -238,7 +214,7 @@ public class CourseEditorPageFragment {
 	 */
 	public CourseEditorPageFragment nodeTitle(String title) {
 		By shortTitleBy = By.cssSelector("div.o_sel_node_editor_shorttitle input[type='text']");
-		OOGraphene.waitElement(shortTitleBy, 5, browser);
+		OOGraphene.waitElement(shortTitleBy, browser);
 		WebElement shortTitleEl = browser.findElement(shortTitleBy);
 		shortTitleEl.clear();
 		shortTitleEl.sendKeys(title);
@@ -324,23 +300,15 @@ public class CourseEditorPageFragment {
 	 * @return
 	 */
 	public CourseEditorPageFragment selectTabLearnContent() {
-		List<WebElement> tabLinks = browser.findElements(navBarNodeConfiguration);
-
-		boolean found = false;
-		a_a:
-		for(WebElement tabLink:tabLinks) {
-			tabLink.click();
-			OOGraphene.waitBusy(browser);
+		OOGraphene.selectTab("o_node_config", (b) -> {
 			for(By chooseRepoEntriesButton: chooseRepoEntriesButtonList) {
-				List<WebElement> chooseRepoEntry = browser.findElements(chooseRepoEntriesButton);
-				if(chooseRepoEntry.size() > 0) {
-					found = true;
-					break a_a;
+				List<WebElement> chooseRepoEntry = b.findElements(chooseRepoEntriesButton);
+				if(!chooseRepoEntry.isEmpty()) {
+					return true;
 				}
 			}
-		}
-
-		Assert.assertTrue("Found the tab learn content", found);
+			return false;
+		}, browser);
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java b/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
index 890cdfe23faa8ccb27d0bf9734b2a93545ad9f87..b91c8a784e7c2cbb2647ab62c4bd57466b9b9470 100644
--- a/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
@@ -134,7 +134,7 @@ public class CoursePageFragment {
 	 * @return
 	 */
 	public MenuTreePageFragment clickTree() {
-		OOGraphene.waitElement(MenuTreePageFragment.treeBy, 2, browser);
+		OOGraphene.waitElement(MenuTreePageFragment.treeBy, browser);
 		MenuTreePageFragment menuTree = new MenuTreePageFragment(browser);
 		menuTree.selectRoot();
 		return menuTree;
@@ -146,7 +146,7 @@ public class CoursePageFragment {
 	 */
 	public CoursePageFragment openToolsMenu() {
 		browser.findElement(toolsMenuCaret).click();
-		OOGraphene.waitElement(toolsMenu, 5, browser);
+		OOGraphene.waitElement(toolsMenu, browser);
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/course/CourseWizardPage.java b/src/test/java/org/olat/selenium/page/course/CourseWizardPage.java
index 16a3399c57f0e190aacc5e5ef7943b9f0edd120f..486058cbf8f427834a6ddf8ca39e9848733f6e71 100644
--- a/src/test/java/org/olat/selenium/page/course/CourseWizardPage.java
+++ b/src/test/java/org/olat/selenium/page/course/CourseWizardPage.java
@@ -84,11 +84,13 @@ public class CourseWizardPage {
 		By checkAllBy = By.cssSelector("div.modal div.form-group input[type='checkbox']");
 		List<WebElement> checkAll = browser.findElements(checkAllBy);
 		Assert.assertFalse(checkAll.isEmpty());
-		for(WebElement check:checkAll) {
-			check.click();
+		int numOfCheckbox = checkAll.size();
+		for(int i=0;i<numOfCheckbox; i++) {
+			By checkbox = By.xpath("//div[contains(@class,'modal')]//div[contains(@class,'form-group')]//div[" + (i+1) + "]/div/label/input[@type='checkbox']");
+			OOGraphene.waitElement(checkbox, browser);
+			browser.findElement(checkbox).click();
 			OOGraphene.waitBusy(browser);
 		}
-		
 		return this;
 	}
 }
\ No newline at end of file
diff --git a/src/test/java/org/olat/selenium/page/course/DialogConfigurationPage.java b/src/test/java/org/olat/selenium/page/course/DialogConfigurationPage.java
index bdef7c63adae0fff68ff89bb03109167cf48876d..8f70804a5f382e1e975260a53bd5c2b8065cd97b 100644
--- a/src/test/java/org/olat/selenium/page/course/DialogConfigurationPage.java
+++ b/src/test/java/org/olat/selenium/page/course/DialogConfigurationPage.java
@@ -41,7 +41,7 @@ public class DialogConfigurationPage {
 	
 	public DialogConfigurationPage selectConfiguration() {
 		By dialogConfigBy = By.cssSelector("fieldset.o_sel_dialog_settings_upload");
-		OOGraphene.selectTab(CourseEditorPageFragment.navBarNodeConfiguration, dialogConfigBy, browser);
+		OOGraphene.selectTab("o_node_config", dialogConfigBy, browser);
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/course/EnrollmentConfigurationPage.java b/src/test/java/org/olat/selenium/page/course/EnrollmentConfigurationPage.java
index 7778efe2947a47f5f2cf392161183c2c6e8eccad..679427f26e54af2c4a8e6f4bb512ce6055e05fee 100644
--- a/src/test/java/org/olat/selenium/page/course/EnrollmentConfigurationPage.java
+++ b/src/test/java/org/olat/selenium/page/course/EnrollmentConfigurationPage.java
@@ -21,7 +21,6 @@ package org.olat.selenium.page.course;
 
 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;
@@ -127,21 +126,7 @@ public class EnrollmentConfigurationPage {
 	}
 	
 	private EnrollmentConfigurationPage selectTab(By tabBy) {
-		List<WebElement> tabLinks = browser.findElements(CourseEditorPageFragment.navBarNodeConfiguration);
-
-		boolean found = false;
-		a_a:
-		for(WebElement tabLink:tabLinks) {
-			tabLink.click();
-			OOGraphene.waitBusy(browser);
-			List<WebElement> chooseRepoEntry = browser.findElements(tabBy);
-			if(chooseRepoEntry.size() > 0) {
-				found = true;
-				break a_a;
-			}
-		}
-
-		Assert.assertTrue("Found the tab", found);
+		OOGraphene.selectTab("o_node_config", tabBy, browser);
 		return this;
 	}
 
diff --git a/src/test/java/org/olat/selenium/page/course/ForumCEPage.java b/src/test/java/org/olat/selenium/page/course/ForumCEPage.java
index 28927ea654db41c4e48f97b4afe4ce52ba309773..d23e3814fc4ab078ca94efb16523e7e489b1de4a 100644
--- a/src/test/java/org/olat/selenium/page/course/ForumCEPage.java
+++ b/src/test/java/org/olat/selenium/page/course/ForumCEPage.java
@@ -19,13 +19,9 @@
  */
 package org.olat.selenium.page.course;
 
-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;
-import org.openqa.selenium.WebElement;
 
 /**
  * Drive the configuration of the forum's course element.
@@ -55,21 +51,7 @@ public class ForumCEPage {
 	}
 	
 	private ForumCEPage selectTab(By tabBy) {
-		List<WebElement> tabLinks = browser.findElements(CourseEditorPageFragment.navBarNodeConfiguration);
-
-		boolean found = false;
-		a_a:
-		for(WebElement tabLink:tabLinks) {
-			tabLink.click();
-			OOGraphene.waitBusy(browser);
-			List<WebElement> chooseRepoEntry = browser.findElements(tabBy);
-			if(chooseRepoEntry.size() > 0) {
-				found = true;
-				break a_a;
-			}
-		}
-
-		Assert.assertTrue("Found the tab", found);
+		OOGraphene.selectTab("o_node_config", tabBy, browser);
 		return this;
 	}
 
diff --git a/src/test/java/org/olat/selenium/page/course/GroupTaskConfigurationPage.java b/src/test/java/org/olat/selenium/page/course/GroupTaskConfigurationPage.java
index 6f2132188a8ef67da42924e623c2bc53b2fd5bb2..24c67de297551eb3cfa0a80ce5fc5f11dfb0f9c0 100644
--- a/src/test/java/org/olat/selenium/page/course/GroupTaskConfigurationPage.java
+++ b/src/test/java/org/olat/selenium/page/course/GroupTaskConfigurationPage.java
@@ -20,9 +20,7 @@
 package org.olat.selenium.page.course;
 
 import java.io.File;
-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;
@@ -82,11 +80,9 @@ public class GroupTaskConfigurationPage {
 	}
 	
 	private GroupTaskConfigurationPage enableStep(String name, boolean enable) {
-		By stepBy = By.xpath("//fieldset[contains(@class,'o_sel_course_gta_steps')]//label[input[@name='" + name + "']]");
-		WebElement labelEl = browser.findElement(stepBy);
 		By checkboxStepBy = By.xpath("//fieldset[contains(@class,'o_sel_course_gta_steps')]//label/input[@name='" + name + "']");
 		WebElement checkboxEl = browser.findElement(checkboxStepBy);
-		OOGraphene.check(labelEl, checkboxEl, Boolean.valueOf(enable));
+		OOGraphene.check(checkboxEl, Boolean.valueOf(enable));
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
@@ -190,9 +186,8 @@ public class GroupTaskConfigurationPage {
 	
 	public GroupTaskConfigurationPage saveTasks() {
 		By saveBy = By.cssSelector(".o_sel_course_gta_task_config_buttons button.btn-primary");
-		List<WebElement> saveEls = browser.findElements(saveBy);
-		Assert.assertEquals(1, saveEls.size());
-		saveEls.get(0).click();
+		OOGraphene.waitElement(saveBy, browser);
+		browser.findElement(saveBy).click();
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
@@ -211,10 +206,9 @@ public class GroupTaskConfigurationPage {
 		
 		//save
 		By saveBy = By.cssSelector(".o_sel_course_gta_upload_solution_form button.btn-primary");
-		List<WebElement> saveEls = browser.findElements(saveBy);
-		Assert.assertEquals(1, saveEls.size());
-		saveEls.get(0).click();
+		browser.findElement(saveBy).click();
 		OOGraphene.waitBusy(browser);
+		OOGraphene.waitModalDialogDisappears(browser);
 		return this;
 	}
 	
@@ -231,21 +225,7 @@ public class GroupTaskConfigurationPage {
 	}
 	
 	private GroupTaskConfigurationPage selectTab(By tabBy) {
-		List<WebElement> tabLinks = browser.findElements(CourseEditorPageFragment.navBarNodeConfiguration);
-
-		boolean found = false;
-		a_a:
-		for(WebElement tabLink:tabLinks) {
-			tabLink.click();
-			OOGraphene.waitBusy(browser);
-			List<WebElement> elements = browser.findElements(tabBy);
-			if(elements.size() > 0) {
-				found = true;
-				break a_a;
-			}
-		}
-
-		Assert.assertTrue("Found the tab", found);
+		OOGraphene.selectTab("o_node_config", tabBy, browser);
 		return this;
 	}
 }
diff --git a/src/test/java/org/olat/selenium/page/course/GroupTaskPage.java b/src/test/java/org/olat/selenium/page/course/GroupTaskPage.java
index 96b79b3a038eda7b7c9e6d3c64774be34a699e5c..4ae09dcf651e2142446c55cf2ef81345cb4886a7 100644
--- a/src/test/java/org/olat/selenium/page/course/GroupTaskPage.java
+++ b/src/test/java/org/olat/selenium/page/course/GroupTaskPage.java
@@ -106,7 +106,8 @@ public class GroupTaskPage {
 	
 	private GroupTaskPage uploadFile(String stepId, File file) {
 		By uploadButtonBy = By.cssSelector("#" + stepId + " .o_sel_course_gta_submit_file");
-		OOGraphene.clickAndWait(uploadButtonBy, browser);//TODO sel clickAndWait
+		OOGraphene.moveAndClick(uploadButtonBy, browser);
+		OOGraphene.waitBusyAndScrollTop(browser);
 		OOGraphene.waitModalDialog(browser);
 		
 		By inputBy = By.cssSelector(".o_fileinput input[type='file']");
diff --git a/src/test/java/org/olat/selenium/page/course/GroupTaskToCoachPage.java b/src/test/java/org/olat/selenium/page/course/GroupTaskToCoachPage.java
index 82999f3aa2d7a8c97f2e03b84b6fd28aadbdd4fb..da417319ee61c001f9369101729873bf79522747 100644
--- a/src/test/java/org/olat/selenium/page/course/GroupTaskToCoachPage.java
+++ b/src/test/java/org/olat/selenium/page/course/GroupTaskToCoachPage.java
@@ -85,7 +85,7 @@ public class GroupTaskToCoachPage {
 	public GroupTaskToCoachPage reviewed() {
 		By reviewBy = By.cssSelector("#o_step_review_content .o_sel_course_gta_reviewed");
 		OOGraphene.waitElement(reviewBy, browser);
-		OOGraphene.clickAndWait(reviewBy, browser);
+		OOGraphene.moveAndClick(reviewBy, browser);
 		confirm();
 		OOGraphene.waitAndCloseBlueMessageWindow(browser);
 		return this;
@@ -109,10 +109,12 @@ public class GroupTaskToCoachPage {
 	}
 	
 	public GroupTaskToCoachPage confirm() {
+		OOGraphene.waitBusyAndScrollTop(browser);
 		OOGraphene.waitModalDialog(browser);
-		WebElement yesLink = browser.findElement(By.xpath("//div[contains(@class,'modal-dialog')]//a[contains(@href,'link_0')]"));
-		yesLink.click();
+		By yes = By.xpath("//div[contains(@class,'modal-dialog')]//a[contains(@href,'link_0')]");
+		browser.findElement(yes).click();
 		OOGraphene.waitBusy(browser);
+		OOGraphene.waitModalDialogDisappears(browser);
 		return this;
 	}
 	
@@ -139,6 +141,7 @@ public class GroupTaskToCoachPage {
 		By saveButtonBy = By.cssSelector(".o_sel_course_gta_upload_form button.btn-primary");
 		browser.findElement(saveButtonBy).click();
 		OOGraphene.waitBusy(browser);
+		OOGraphene.waitModalDialogDisappears(browser);
 		By correctionUploaded = By.xpath("//table[contains(@class,'table')]//tr/td//a[text()[contains(.,'" + correctionFile.getName() + "')]]");
 		OOGraphene.waitElement(correctionUploaded, 5, browser);
 		return this;
@@ -203,19 +206,15 @@ public class GroupTaskToCoachPage {
 		By groupAssessmentPopupBy = By.cssSelector(".modal-body .o_sel_course_gta_group_assessment_form");
 		OOGraphene.waitElement(groupAssessmentPopupBy, 5, browser);
 		
-		By applyToAllBy = By.xpath("//div[contains(@class,'o_sel_course_gta_group_assessment_form')]//div[contains(@class,'o_sel_course_gta_apply_to_all')]//label[input[@type='checkbox']]");
 		By applyToAllCheckBy = By.xpath("//div[contains(@class,'o_sel_course_gta_group_assessment_form')]//div[contains(@class,'o_sel_course_gta_apply_to_all')]//input[@type='checkbox']");
-		WebElement applyToAllEl = browser.findElement(applyToAllBy);
 		WebElement applyToAllCheckEl = browser.findElement(applyToAllCheckBy);
-		OOGraphene.check(applyToAllEl, applyToAllCheckEl, Boolean.TRUE);
+		OOGraphene.check(applyToAllCheckEl, Boolean.TRUE);
 		OOGraphene.waitBusy(browser);
 		
 		if(passed != null) {
-			By passedBy = By.xpath("//div[contains(@class,'o_sel_course_gta_group_assessment_form')]//div[contains(@class,'o_sel_course_gta_group_passed')]//label[input[@type='checkbox']]");
 			By passedCheckBy = By.xpath("//div[contains(@class,'o_sel_course_gta_group_assessment_form')]//div[contains(@class,'o_sel_course_gta_group_passed')]//input[@type='checkbox']");
-			WebElement passedEl = browser.findElement(passedBy);
 			WebElement passedCheckEl = browser.findElement(passedCheckBy);
-			OOGraphene.check(passedEl, passedCheckEl, Boolean.TRUE);
+			OOGraphene.check(passedCheckEl, Boolean.TRUE);
 			OOGraphene.waitBusy(browser);
 		}
 		
diff --git a/src/test/java/org/olat/selenium/page/course/InfoMessageCEPage.java b/src/test/java/org/olat/selenium/page/course/InfoMessageCEPage.java
index a8755eee21edf5a5dac9b78ae4ceeb325afb9f09..1779868474dd9ad7589afbd72f6c691980ef4391 100644
--- a/src/test/java/org/olat/selenium/page/course/InfoMessageCEPage.java
+++ b/src/test/java/org/olat/selenium/page/course/InfoMessageCEPage.java
@@ -246,21 +246,7 @@ public class InfoMessageCEPage {
 	}
 	
 	private InfoMessageCEPage selectTab(By tabBy) {
-		List<WebElement> tabLinks = browser.findElements(CourseEditorPageFragment.navBarNodeConfiguration);
-
-		boolean found = false;
-		a_a:
-		for(WebElement tabLink:tabLinks) {
-			tabLink.click();
-			OOGraphene.waitBusy(browser);
-			List<WebElement> chooseRepoEntry = browser.findElements(tabBy);
-			if(chooseRepoEntry.size() > 0) {
-				found = true;
-				break a_a;
-			}
-		}
-
-		Assert.assertTrue("Found the tab", found);
+		OOGraphene.selectTab("o_node_config", tabBy, browser);
 		return this;
 	}
 }
diff --git a/src/test/java/org/olat/selenium/page/course/LTIConfigurationPage.java b/src/test/java/org/olat/selenium/page/course/LTIConfigurationPage.java
index b7fbf5dd1c130cfc627664a724d5b3339fd750a6..4be93dce501ea2fda03125a95125da3d14446ee7 100644
--- a/src/test/java/org/olat/selenium/page/course/LTIConfigurationPage.java
+++ b/src/test/java/org/olat/selenium/page/course/LTIConfigurationPage.java
@@ -40,7 +40,7 @@ public class LTIConfigurationPage {
 	
 	public LTIConfigurationPage selectConfiguration() {
 		By configBy = By.cssSelector("fieldset.o_sel_lti_config_form");
-		OOGraphene.selectTab(CourseEditorPageFragment.navBarNodeConfiguration, configBy, browser);
+		OOGraphene.selectTab("o_node_config", configBy, browser);
 		return this;
 	}
 	
@@ -59,10 +59,8 @@ public class LTIConfigurationPage {
 	
 	public LTIConfigurationPage enableScore(double scale, double cutValue) {
 		By assessableBy = By.xpath("//div[contains(@class,'o_sel_lti_config_assessable')]//input[@type='checkbox']");
-		By assessableLabelBy = By.xpath("//div[contains(@class,'o_sel_lti_config_assessable')]//label[input[@type='checkbox']]");
 		WebElement assessableEl = browser.findElement(assessableBy);
-		WebElement assessableLabelEl = browser.findElement(assessableLabelBy);
-		OOGraphene.check(assessableLabelEl, assessableEl, Boolean.TRUE);
+		OOGraphene.check(assessableEl, Boolean.TRUE);
 		
 		By scaleBy = By.cssSelector("div.o_sel_lti_config_scale input[type=text]");
 		OOGraphene.waitElement(scaleBy, browser);
@@ -79,6 +77,7 @@ public class LTIConfigurationPage {
 		By saveBy = By.cssSelector("fieldset.o_sel_lti_config_form button.btn-primary");
 		browser.findElement(saveBy).click();
 		OOGraphene.waitBusy(browser);
+		OOGraphene.moveTop(browser);
 		return this;
 	}
 
diff --git a/src/test/java/org/olat/selenium/page/course/MemberListConfigurationPage.java b/src/test/java/org/olat/selenium/page/course/MemberListConfigurationPage.java
index 2d609e05aa905389c9cb78f58e96a3343717df9f..b51de2ec5d170700f133ff3adaee687ecba4a70b 100644
--- a/src/test/java/org/olat/selenium/page/course/MemberListConfigurationPage.java
+++ b/src/test/java/org/olat/selenium/page/course/MemberListConfigurationPage.java
@@ -40,7 +40,7 @@ public class MemberListConfigurationPage {
 	
 	public MemberListConfigurationPage selectSettings() {
 		By configBy = By.cssSelector("fieldset.o_sel_cmembers_settings");
-		OOGraphene.selectTab(CourseEditorPageFragment.navBarNodeConfiguration, configBy, browser);
+		OOGraphene.selectTab("o_node_config", configBy, browser);
 		return this;
 	}
 	
@@ -58,10 +58,8 @@ public class MemberListConfigurationPage {
 
 	private MemberListConfigurationPage setMembers(Boolean visible, String type) {
 		By checkboxBy = By.xpath("//fieldset[contains(@class,'o_sel_cmembers_settings')]//input[@type='checkbox'][@name='" + type + "']");
-		By labelBy = By.xpath("//fieldset[contains(@class,'o_sel_cmembers_settings')]//label[input[@type='checkbox'][@name='" + type + "']]");
 		WebElement checkboxEl = browser.findElement(checkboxBy);
-		WebElement labelEl = browser.findElement(labelBy);
-		OOGraphene.check(labelEl, checkboxEl, visible);
+		OOGraphene.check(checkboxEl, visible);
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
diff --git a/src/test/java/org/olat/selenium/page/course/MembersPage.java b/src/test/java/org/olat/selenium/page/course/MembersPage.java
index 53e4cd595fe918c274f77641c8d4a969d0a24d96..58c50605fdf251b0f87f4309353bab36b8932ef7 100644
--- a/src/test/java/org/olat/selenium/page/course/MembersPage.java
+++ b/src/test/java/org/olat/selenium/page/course/MembersPage.java
@@ -52,7 +52,7 @@ public class MembersPage {
 		By addMemberBy = By.className("o_sel_course_add_member");
 		browser.findElement(addMemberBy).click();
 		OOGraphene.waitModalWizard(browser);
-		OOGraphene.waitElement(By.cssSelector("fieldset.o_sel_usersearch_searchform"), 5, browser);
+		OOGraphene.waitElement(By.cssSelector("fieldset.o_sel_usersearch_searchform"), browser);
 		return new MembersWizardPage(browser);
 	}
 	
@@ -60,7 +60,7 @@ public class MembersPage {
 		By importMembersBy = By.className("o_sel_course_import_members");
 		browser.findElement(importMembersBy).click();
 		OOGraphene.waitModalWizard(browser);
-		OOGraphene.waitElement(By.cssSelector("div.o_sel_user_import textarea.form-control"), 5, browser);
+		OOGraphene.waitElement(By.cssSelector("div.o_sel_user_import textarea.form-control"), browser);
 		return new MembersWizardPage(browser);
 	}
 	
@@ -189,6 +189,12 @@ public class MembersPage {
 		return this;
 	}
 	
+	public MembersPage assertMembersManagement() {
+		By membersBy = By.cssSelector("div.o_members_mgmt");
+		OOGraphene.waitElement(membersBy, browser);
+		return this;
+	}
+	
 	/**
 	 * Click back to the course
 	 * 
@@ -196,9 +202,7 @@ public class MembersPage {
 	 */
 	public CoursePageFragment clickToolbarBack() {
 		OOGraphene.closeBlueMessageWindow(browser);
-		By toolbarBackBy = By.cssSelector("li.o_breadcrumb_back>a");
-		browser.findElement(toolbarBackBy).click();
-		OOGraphene.waitBusy(browser);
+		OOGraphene.clickBreadcrumbBack(browser);
 		return new CoursePageFragment(browser);
 	}
 
diff --git a/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java b/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java
index 4506ce057cc923602b5d492dfd73f6c20a83a3f3..ccbd2c2a10d769e0450012e080ee6cc4163a98cb 100644
--- a/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java
@@ -116,11 +116,8 @@ public class PublisherPageFragment {
 			OOGraphene.waitElement(guestsBy, browser);
 			
 			if(access == UserAccess.guest) {
-				By labelGuestsBy = By.xpath("//div[contains(@class,'o_sel_repositoryentry_access_guest')]//label/input[@name='entry.access.guest' and @value='on']");
-
 				WebElement guestsEl = browser.findElement(guestsBy);
-				WebElement labelGuestsEl = browser.findElement(labelGuestsBy);
-				OOGraphene.check(labelGuestsEl, guestsEl, Boolean.TRUE);
+				OOGraphene.check(guestsEl, Boolean.TRUE);
 			}
 		} else if(access == UserAccess.membersOnly) {
 			By allUsersBy = By.xpath("//div[@id='o_coentry_access_type']/div/label/input[@name='entry.access.type' and @value='private']");
diff --git a/src/test/java/org/olat/selenium/page/course/RemindersPage.java b/src/test/java/org/olat/selenium/page/course/RemindersPage.java
index 1bcdd1edb2733aacf82b890f62590dc560c3cf39..0a1a98588e5731efaedb1d0dd536787282b3ac9a 100644
--- a/src/test/java/org/olat/selenium/page/course/RemindersPage.java
+++ b/src/test/java/org/olat/selenium/page/course/RemindersPage.java
@@ -85,6 +85,7 @@ public class RemindersPage {
 	 */
 	public RemindersPage sendReminders() {
 		By sendBy = By.cssSelector("div.o_callout_content ul.o_dropdown a.o_sel_course_reminder_send");
+		OOGraphene.waitElement(sendBy, browser);
 		browser.findElement(sendBy).click();
 		OOGraphene.waitBusy(browser);
 		return this;
diff --git a/src/test/java/org/olat/selenium/page/graphene/BusyScrollToPredicate.java b/src/test/java/org/olat/selenium/page/graphene/BusyScrollToPredicate.java
index 67bde4b23245305d4d58b4785c12bf3107425bf7..585e6282b18e6e8ea103d7870524866c93756668 100644
--- a/src/test/java/org/olat/selenium/page/graphene/BusyScrollToPredicate.java
+++ b/src/test/java/org/olat/selenium/page/graphene/BusyScrollToPredicate.java
@@ -44,6 +44,6 @@ public class BusyScrollToPredicate implements Function<WebDriver,Boolean> {
         } else if(y.intValue() == 0) {
         	count++;
         }
-        return count > 2;
+        return count > 3;
     }
 }
diff --git a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
index 0190906abb1477229b5f68fc376f6abf71b77b15..4c52ea5a3f182c56024ed818256f16cc416b7db6 100644
--- a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
+++ b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
@@ -21,22 +21,26 @@ package org.olat.selenium.page.graphene;
 
 import java.io.File;
 import java.text.DateFormat;
+import java.time.Duration;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
-import java.util.concurrent.TimeUnit;
+import java.util.function.Predicate;
 
-import org.jboss.arquillian.graphene.Graphene;
 import org.junit.Assert;
+import org.olat.core.util.StringHelper;
 import org.openqa.selenium.By;
 import org.openqa.selenium.ElementNotVisibleException;
 import org.openqa.selenium.JavascriptExecutor;
 import org.openqa.selenium.TimeoutException;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
-import org.openqa.selenium.WrapsElement;
 import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.FluentWait;
+import org.openqa.selenium.support.ui.WebDriverWait;
 
 /**
  * 
@@ -46,15 +50,32 @@ import org.openqa.selenium.firefox.FirefoxDriver;
  */
 public class OOGraphene {
 
-	private static final long poolingDuration = 100;//ms
-	private static final long waitTinyDuration = 50;//seconds
-	private static final long defaultTimeout = 5;//seconds
+	private static final Duration poolingDuration = Duration.ofMillis(100);//ms
+	private static final Duration waitTinyDuration = Duration.ofSeconds(50);//seconds
+	private static final long driverTimeout = 60;//seconds
+	private static final long movePause = 400;//milliseconds
+	private static final long moveToPause = 100;//milliseconds
+	
+	private static final Duration polling = Duration.ofMillis(100);
+	private static final Duration poolingSlow = Duration.ofMillis(200);
+	private static final Duration timeout = Duration.ofSeconds(5);
 
 	private static final By closeBlueBoxButtonBy = By.cssSelector("div.o_alert_info div.o_sel_info_message a.o_alert_close.o_sel_info_close");
 	
 	public static final By wizardNextBy = By.xpath("//div[contains(@class,'modal-footer')]//a[contains(@class,'o_wizard_button_next')]");
 	public static final By wizardFinishBy = By.xpath("//div[contains(@class,'modal-footer')]//a[contains(@class,'o_wizard_button_finish') and not(contains(@class,'o_disabled'))]");
 	
+	
+	public static FluentWait<WebDriver> wait(WebDriver browser) {
+		return new WebDriverWait(browser, driverTimeout)
+				.withTimeout(timeout).pollingEvery(poolingSlow);	
+	}
+	
+	public static FluentWait<WebDriver> wait(WebDriver browser, Duration timeout) {
+		return new WebDriverWait(browser, driverTimeout)
+				.withTimeout(timeout).pollingEvery(poolingSlow);	
+	}
+	
 	/**
 	 * Wait until the busy flag is ok, the browser scrolled
 	 * to the top and that the body of the modal dialog is visible.
@@ -63,9 +84,10 @@ public class OOGraphene {
 	 */
 	public static void waitModalDialog(WebDriver browser) {
 		waitBusyAndScrollTop(browser);
-		By modalBy = By.cssSelector("div.modal-dialog div.modal-body");
-		Graphene.waitModel(browser).withTimeout(5, TimeUnit.SECONDS)
-			.pollingEvery(200, TimeUnit.MILLISECONDS).until().element(modalBy).is().visible();
+		By modalBy = By.cssSelector("div.o_layered_panel div.modal-dialog div.modal-body");
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(timeout).pollingEvery(poolingSlow)
+			.until(ExpectedConditions.visibilityOfElementLocated(modalBy));
 	}
 	
 	/**
@@ -76,15 +98,17 @@ public class OOGraphene {
 	 */
 	public static void waitModalWizard(WebDriver browser) {
 		waitBusyAndScrollTop(browser);
-		By modalBy = By.cssSelector("div.modal-dialog div.modal-body");
-		Graphene.waitModel(browser).withTimeout(defaultTimeout, TimeUnit.SECONDS)
-			.pollingEvery(200, TimeUnit.MILLISECONDS).until().element(modalBy).is().visible();
+		By modalBy = By.cssSelector("div.o_layered_panel div.modal-dialog div.modal-body");
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(timeout).pollingEvery(poolingSlow)
+			.until(ExpectedConditions.visibilityOfElementLocated(modalBy));
 	}
 	
 	public static void waitModalDialogDisappears(WebDriver browser) {
 		By modalBy = By.xpath("//div[not(@id='o_form_dirty_message')]/div[contains(@class,'modal-dialog')]/div[contains(@class,'modal-content')]");
-		Graphene.waitModel(browser).withTimeout(5, TimeUnit.SECONDS)
-			.pollingEvery(200, TimeUnit.MILLISECONDS).until().element(modalBy).is().not().present();
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(timeout).pollingEvery(poolingSlow)
+			.until(ExpectedConditions.invisibilityOfElementLocated(modalBy));
 	}
 	
 	public static void waitCallout(WebDriver browser) {
@@ -93,13 +117,15 @@ public class OOGraphene {
 	}
 	
 	public static void waitBusy(WebDriver browser) {
-		Graphene.waitModel(browser).withTimeout(defaultTimeout, TimeUnit.SECONDS)
-			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until(new BusyPredicate());
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(timeout).pollingEvery(poolingDuration)
+			.until(new BusyPredicate());
 	}
 	
 	public static void waitBusy(WebDriver browser, int timeoutInSeconds) {
-		Graphene.waitModel(browser).withTimeout(timeoutInSeconds, TimeUnit.SECONDS)
-			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until(new BusyPredicate());
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(Duration.ofSeconds(timeoutInSeconds)).pollingEvery(poolingDuration)
+			.until(new BusyPredicate());
 	}
 	
 	/**
@@ -108,8 +134,15 @@ public class OOGraphene {
 	 * @param browser
 	 */
 	public static void waitElement(By element, WebDriver browser) {
-		Graphene.waitModel(browser).withTimeout(5, TimeUnit.SECONDS)
-			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until().element(element).is().visible();
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(timeout).pollingEvery(polling)
+			.until(ExpectedConditions.visibilityOfElementLocated(element));
+	}
+	
+	public static void waitElementClickable(By element, WebDriver browser) {
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(timeout).pollingEvery(polling)
+			.until(ExpectedConditions.elementToBeClickable(element));
 	}
 	
 	/**
@@ -120,8 +153,35 @@ public class OOGraphene {
 	 * @param browser The web driver
 	 */
 	public static void waitElement(By element, int timeoutInSeconds, WebDriver browser) {
-		Graphene.waitModel(browser).withTimeout(timeoutInSeconds, TimeUnit.SECONDS)
-			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until().element(element).is().visible();
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(Duration.ofSeconds(timeoutInSeconds)).pollingEvery(polling)
+			.until(ExpectedConditions.visibilityOfElementLocated(element));
+	}
+	
+	/**
+	 * Wait until the element is visible.
+	 * 
+	 * @param element The selector for the element
+	 * @param timeoutInSeconds The timeout in seconds
+	 * @param browser The web driver
+	 */
+	public static void waitElement(By element, int timeoutInSeconds, int pollingInSeconds, WebDriver browser) {
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(Duration.ofSeconds(timeoutInSeconds)).pollingEvery(Duration.ofSeconds(pollingInSeconds))
+			.until(ExpectedConditions.visibilityOfElementLocated(element));
+	}
+	
+	/**
+	 * Wait until the element is present in the DOM.
+	 * 
+	 * @param element
+	 * @param timeoutInSeconds
+	 * @param browser
+	 */
+	public static void waitElementPresence(By element, int timeoutInSeconds, WebDriver browser) {
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(Duration.ofSeconds(timeoutInSeconds)).pollingEvery(polling)
+			.until(ExpectedConditions.presenceOfElementLocated(element));
 	}
 	
 	/**
@@ -132,8 +192,9 @@ public class OOGraphene {
 	 * @param browser The web driver
 	 */
 	public static void waitElementDisappears(By element, int timeoutInSeconds, WebDriver browser) {
-		Graphene.waitModel(browser).withTimeout(timeoutInSeconds, TimeUnit.SECONDS)
-			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until().element(element).is().not().present();
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(Duration.ofSeconds(timeoutInSeconds)).pollingEvery(poolingDuration)
+			.until(ExpectedConditions.invisibilityOfElementLocated(element));
 	}
 	
 	/**
@@ -144,12 +205,9 @@ public class OOGraphene {
 	 * @param browser
 	 */
 	public static void waitElementUntilNotVisible(By element, int timeoutInSeconds, WebDriver browser) {
-		Graphene.waitModel(browser).withTimeout(timeoutInSeconds, TimeUnit.SECONDS)
-			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until().element(element).is().not().visible();
-	}
-	
-	public static void waitGui(WebDriver browser) {
-		Graphene.waitGui(browser);
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(Duration.ofSeconds(timeoutInSeconds)).pollingEvery(poolingDuration)
+			.until(ExpectedConditions.invisibilityOfElementLocated(element));
 	}
 	
 	public static void nextStep(WebDriver browser) {
@@ -157,8 +215,11 @@ public class OOGraphene {
 	}
 	
 	public static void finishStep(WebDriver browser) {
-		clickAndWait(wizardFinishBy, browser);
-		OOGraphene.closeBlueMessageWindow(browser);
+		moveAndClick(wizardFinishBy, browser);
+		closeBlueMessageWindow(browser);
+		By wizardBy = By.cssSelector("div.o_layered_panel div.o_wizard");
+		waitElementUntilNotVisible(wizardBy, 10, browser);
+		waitBusyAndScrollTop(browser);
 	}
 	
 	/**
@@ -184,23 +245,49 @@ public class OOGraphene {
 	 * click it. After it wait until the window scroll to the top
 	 * and/or make a classic waitBusy
 	 * 
-	 * @param buttonBy
-	 * @param browser
+	 * @param buttonBy The button to click
+	 * @param browser The driver
 	 */
 	public static void clickAndWait(By buttonBy, WebDriver browser) {
 		WebElement buttonEl = browser.findElement(buttonBy);
 		boolean move = buttonEl.getLocation().getY() > 669;
 		if(move) {
-			scrollTo(buttonBy, browser);
-		}
-		browser.findElement(buttonBy).click();
-		if(move) {
+			//scrollTo(buttonBy, browser);
+			new Actions(browser)
+				.moveToElement(buttonEl)
+				.pause(movePause)
+				.click(buttonEl)
+				.perform();
 			OOGraphene.waitBusyAndScrollTop(browser);
 		} else {
+			browser.findElement(buttonBy).click();
 			OOGraphene.waitBusy(browser);
 		}
 	}
 	
+	/**
+	 * Check the location of the button. If it's below the visible
+	 * window, it scrolls to the button, waits a little longer and
+	 * click it.
+	 * 
+	 * @param buttonBy The button to click
+	 * @param browser The driver
+	 */
+	public static void moveAndClick(By buttonBy, WebDriver browser) {
+		waitElement(buttonBy, browser);
+		WebElement buttonEl = browser.findElement(buttonBy);
+		boolean move = buttonEl.getLocation().getY() > 669;
+		if(move) {
+			new Actions(browser)
+				.moveToElement(buttonEl)
+				.pause(movePause)
+				.click(buttonEl)
+				.perform();
+		} else {
+			browser.findElement(buttonBy).click();
+		}
+	}
+	
 	/**
 	 * Scroll to the element and wait a little longer.
 	 * @param by
@@ -212,6 +299,15 @@ public class OOGraphene {
 		OOGraphene.waitingALittleLonger();
 	}
 	
+	public static void moveTo(By by, WebDriver browser) {
+		waitElement(by, browser);
+		WebElement el = browser.findElement(by);
+		new Actions(browser)
+			.moveToElement(el)
+			.pause(moveToPause)
+			.perform();
+	}
+	
 	/**
 	 * Scroll to the top anchor.
 	 * 
@@ -223,30 +319,40 @@ public class OOGraphene {
 		OOGraphene.waitingALittleLonger();
 	}
 	
+	public static void moveTop(WebDriver browser) {
+		WebElement el = browser.findElement(By.id("o_top"));
+		new Actions(browser)
+			.moveToElement(el)
+			.pause(moveToPause)
+			.perform();
+	}
+	
 	// top.tinymce.get('o_fi1000000416').setContent('<p>Hacked</p>');
 	// <div id="o_fi1000000416_diw" class="o_richtext_mce"> <iframe id="o_fi1000000416_ifr">
 	public static final void tinymce(String content, WebDriver browser) {
-		Graphene.waitModel(browser).withTimeout(waitTinyDuration, TimeUnit.SECONDS)
-			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS)
+		new WebDriverWait(browser, driverTimeout)
+			.until(new TinyMCELoadedPredicate());
+		new WebDriverWait(browser, driverTimeout).withTimeout(waitTinyDuration)
+			.pollingEvery(poolingDuration)
 			.until(new TinyMCELoadedPredicate());
 		((JavascriptExecutor)browser).executeScript("top.tinymce.activeEditor.setContent('" + content + "')");
 	}
 	
 	public static final void tinymceExec(String content, WebDriver browser) {
-		Graphene.waitModel(browser).withTimeout(waitTinyDuration, TimeUnit.SECONDS)
-			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS)
+		new WebDriverWait(browser, driverTimeout).withTimeout(waitTinyDuration)
+			.pollingEvery(poolingDuration)
 			.until(new TinyMCELoadedPredicate());
 		((JavascriptExecutor)browser).executeScript("top.tinymce.activeEditor.execCommand('mceInsertRawHTML', true, '" + content + "')");
 	}
 	
 	public static final void tinymce(String content, String containerCssSelector, WebDriver browser) {
 		By tinyIdBy = By.cssSelector(containerCssSelector + " div.o_richtext_mce");
-		waitElement(tinyIdBy, 5, browser);
+		waitElement(tinyIdBy, browser);
 		WebElement tinyIdEl = browser.findElement(tinyIdBy);
 		String tinyId = tinyIdEl.getAttribute("id").replace("_diw", "");
 
-		Graphene.waitModel(browser).withTimeout(waitTinyDuration, TimeUnit.SECONDS)
-			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS)
+		new WebDriverWait(browser, driverTimeout).withTimeout(waitTinyDuration)
+			.pollingEvery(poolingDuration)
 			.until(new TinyMCELoadedByIdPredicate(tinyId));
 		((JavascriptExecutor)browser).executeScript("top.tinymce.editors['" + tinyId + "'].setContent('" + content + "')");
 	}
@@ -260,12 +366,12 @@ public class OOGraphene {
 	 */
 	public static final void tinymceInsert(String content, String containerCssSelector, WebDriver browser) {
 		By tinyIdBy = By.cssSelector(containerCssSelector + " div.o_richtext_mce");
-		waitElement(tinyIdBy, 5, browser);
+		waitElement(tinyIdBy, browser);
 		WebElement tinyIdEl = browser.findElement(tinyIdBy);
 		String tinyId = tinyIdEl.getAttribute("id").replace("_diw", "");
 
-		Graphene.waitModel(browser).withTimeout(waitTinyDuration, TimeUnit.SECONDS)
-			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS)
+		new WebDriverWait(browser, driverTimeout).withTimeout(waitTinyDuration)
+			.pollingEvery(poolingDuration)
 			.until(new TinyMCELoadedByIdPredicate(tinyId));
 		((JavascriptExecutor)browser).executeScript("top.tinymce.editors['" + tinyId + "'].insertContent('" + content + "')");
 	}
@@ -276,24 +382,42 @@ public class OOGraphene {
 	 * @param formBy The selector to found the form
 	 * @param browser The browser
 	 */
-	public static final void selectTab(By tabsBy, By formBy, WebDriver browser) {
-		List<WebElement> tabLinks = browser.findElements(tabsBy);
-
+	public static final void selectTab(String ulClass, By formBy, WebDriver browser) {
+		selectTab(ulClass, (b) -> {
+			List<WebElement> chooseRepoEntry = browser.findElements(formBy);
+			return !chooseRepoEntry.isEmpty();
+		}, browser);
+	}
+	
+	/**
+	 * 
+	 * @param ulClass The class of the nav-tabs
+	 * @param selectTab A predicate to select the right tab
+	 * @param browser The driver
+	 */
+	public static final void selectTab(String ulClass, Predicate<WebDriver> selectTab, WebDriver browser) {
+		List<WebElement> tabLinks = browser.findElements(By.cssSelector("ul." + ulClass + ">li>a"));
+		int count = tabLinks.size();
 		boolean found = false;
 		a_a:
-		for(WebElement tabLink:tabLinks) {
-			tabLink.click();
-			OOGraphene.waitBusy(browser);
-			List<WebElement> chooseRepoEntry = browser.findElements(formBy);
-			if(chooseRepoEntry.size() > 0) {
+		for(int i=0; i<count; i++) {
+			By tabLinkBy = By.xpath("//ul[contains(@class,'" + ulClass + "')]/li[" + (i+1) + "]/a");
+			WebElement tabEl = browser.findElement(tabLinkBy);
+			String tabClass = tabEl.getAttribute("onclick");
+			if(StringHelper.containsNonWhitespace(tabClass)) {
+				tabEl.click();
+				waitBusy(browser);
+				By activatedTabLinkBy = By.xpath("//ul[contains(@class,'" + ulClass + "')]/li[" + (i+1) + "][@class='active']/a");
+				waitElement(activatedTabLinkBy, browser);
+				if(selectTab.test(browser)) {
+					found = true;
+					break a_a;
+				}
+			} else if(selectTab.test(browser)) {
 				found = true;
 				break a_a;
 			}
 		}
-		
-		if(!found) {
-			System.out.println();
-		}
 
 		Assert.assertTrue("Found the tab", found);
 	}
@@ -318,21 +442,6 @@ public class OOGraphene {
 		}
 	}
 	
-	public static final void check(WebElement labelEl, WebElement checkboxEl, Boolean val) {
-		if(val == null) return;
-		
-		String checked = checkboxEl.getAttribute("checked");
-		if(Boolean.TRUE.equals(val)) {
-			if(checked == null) {
-				labelEl.click();
-			}
-		} else {
-			if(checked != null) {
-				labelEl.click();
-			}
-		}
-	}
-	
 	public static final void textarea(WebElement textareaEl, String content, WebDriver browser) {
 		String id = textareaEl.getAttribute("id");
 		((JavascriptExecutor)browser).executeScript("document.getElementById('" + id + "').value = '" + content + "'");
@@ -365,6 +474,9 @@ public class OOGraphene {
 		timeEls.get(0).sendKeys(Integer.toString(hour));
 		timeEls.get(1).clear();
 		timeEls.get(1).sendKeys(Integer.toString(minute));
+		
+		By datePickerBy = By.id("ui-datepicker-div");
+		waitElementDisappears(datePickerBy, 5, browser);
 	}
 	
 	public static final void flexiTableSelectAll(WebDriver browser) {
@@ -391,7 +503,9 @@ public class OOGraphene {
 	 * @param browser
 	 */
 	public static final void waitingTransition(WebDriver browser) {
-		Graphene.waitModel(browser).pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until(new TransitionPredicate());
+		new WebDriverWait(browser, driverTimeout)
+			.pollingEvery(poolingDuration)
+			.until(new TransitionPredicate());
 		waitingALittleBit();
 	}
 	
@@ -441,15 +555,23 @@ public class OOGraphene {
 	 */
 	public static final void waitBusyAndScrollTop(WebDriver browser) {
 		try {
-			Graphene.waitModel(browser)
-				.ignoring(TimeoutException.class)
-				.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS)
+			new WebDriverWait(browser, driverTimeout)
+				.pollingEvery(poolingDuration)
+				.withTimeout(timeout)
 				.until(new BusyScrollToPredicate());
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
 	
+	public static final void clickBreadcrumbBack(WebDriver browser) {
+		//By backBy = By.xpath("//ol[@class='breadcrumb']/li[contains(@class,'o_breadcrumb_back')]/following-sibling::li/a");
+		By backBy = By.xpath("//ol[@class='breadcrumb']/li[@class='o_breadcrumb_back']/a[i[contains(@class,'o_icon_back')]]");
+		waitElement(backBy, browser);
+		browser.findElement(backBy).click();
+		waitBusy(browser);
+	}
+	
 	public static final void closeErrorBox(WebDriver browser) {
 		By errorBoxBy = By.cssSelector(".modal-body.alert.alert-danger");
 		waitElement(errorBoxBy, 5, browser);
@@ -470,8 +592,9 @@ public class OOGraphene {
 	
 	public static final void waitAndCloseBlueMessageWindow(WebDriver browser) {
 		try {
-			Graphene.waitModel(browser).withTimeout(5, TimeUnit.SECONDS)
-				.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until().element(closeBlueBoxButtonBy).is().visible();
+			new WebDriverWait(browser, driverTimeout)
+				.withTimeout(timeout).pollingEvery(poolingDuration)
+				.until(ExpectedConditions.visibilityOfElementLocated(closeBlueBoxButtonBy));
 		} catch (Exception e) {
 			//e.printStackTrace();
 		}
@@ -504,9 +627,8 @@ public class OOGraphene {
 	
 	private static final void clickCloseButton(WebDriver browser, WebElement closeButton) {
 		closeButton.click();
-		Graphene.waitModel(browser)
-			.withTimeout(1000, TimeUnit.MILLISECONDS)
-			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS)
+		new WebDriverWait(browser, driverTimeout)
+			.withTimeout(Duration.ofMillis(1000)).pollingEvery(poolingDuration)
 			.until(new CloseAlertInfoPredicate());
 	}
 	
@@ -556,21 +678,11 @@ public class OOGraphene {
 	
 	public static final void waitNavBarTransition(WebDriver browser) {
 		try {
-			Graphene.waitModel(browser).pollingEvery(poolingDuration, TimeUnit.MILLISECONDS)
+			new WebDriverWait(browser, driverTimeout).pollingEvery(poolingDuration)
 					.until(new NavBarTransitionPredicate());
 			waitingALittleBit();
 		} catch (Exception e) {
 			//e.printStackTrace();
 		}
 	}
-	
-	public static final WebElement unwrap(WebElement element) {
-		if(element instanceof WrapsElement) {
-			WebElement wrappedCircleEl = ((WrapsElement)element).getWrappedElement();
-			if(wrappedCircleEl instanceof WrapsElement) {
-				element = ((WrapsElement)wrappedCircleEl).getWrappedElement();
-			}
-		}
-		return element;
-	}
 }
diff --git a/src/test/java/org/olat/selenium/page/graphene/Position.java b/src/test/java/org/olat/selenium/page/graphene/Position.java
index 2582fb253d784ec49e45eae3b3d5ae25269a52d8..ccb62e1119566ed65a4b6369a1d8d18e7d15ceef 100644
--- a/src/test/java/org/olat/selenium/page/graphene/Position.java
+++ b/src/test/java/org/olat/selenium/page/graphene/Position.java
@@ -24,7 +24,6 @@ import java.util.List;
 import org.olat.ims.qti21.model.xml.AssessmentItemFactory;
 import org.openqa.selenium.Dimension;
 import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.firefox.FirefoxDriver;
 
 /**
  * 
@@ -66,37 +65,29 @@ public class Position {
 			x = (x2 + x1) / 2;
 			y = (y2 + y1) / 2;
 		}
-		
-		if(browser instanceof FirefoxDriver) {
-			x = x - Math.round(dimension.getWidth() / 2.0f);
-			y = y - Math.round(dimension.getHeight() / 2.0f);
-		}
+
+		x = x - Math.round(dimension.getWidth() / 2.0f);
+		y = y - Math.round(dimension.getHeight() / 2.0f);
 		return new Position(x, y);
 	}
 	
 	public static Position valueOf(int x, int y, Dimension dimension, WebDriver browser) {
-		if(browser instanceof FirefoxDriver) {
-			x = x - Math.round(dimension.getWidth() / 2.0f);
-			y = y - Math.round(dimension.getHeight() / 2.0f);
-		}
+		x = x - Math.round(dimension.getWidth() / 2.0f);
+		y = y - Math.round(dimension.getHeight() / 2.0f);
 		return new Position(x, y);
 	}
 	
 	public static Position valueOf(int x, int y, int firefoxCorrection, Dimension dimension, WebDriver browser) {
-		if(browser instanceof FirefoxDriver) {
-			x = x - Math.round(dimension.getWidth() / 2.0f);
-			y = y - Math.round(dimension.getHeight() / 2.0f);
-			x += firefoxCorrection;
-			y += firefoxCorrection;
-		}
+		x = x - Math.round(dimension.getWidth() / 2.0f);
+		y = y - Math.round(dimension.getHeight() / 2.0f);
+		x += firefoxCorrection;
+		y += firefoxCorrection;
 		return new Position(x, y);
 	}
 	
 	public static Position valueOf(int x, int y, int width, int height, WebDriver browser) {
-		if(browser instanceof FirefoxDriver) {
-			x = x - Math.round(width / 2.0f);
-			y = y - Math.round(height / 2.0f);
-		}
+		x = x - Math.round(width / 2.0f);
+		y = y - Math.round(height / 2.0f);
 		return new Position(x, y);
 	}
 
diff --git a/src/test/java/org/olat/selenium/page/graphene/TinyMCELoadedByIdPredicate.java b/src/test/java/org/olat/selenium/page/graphene/TinyMCELoadedByIdPredicate.java
index 6ff6c24df8600a0f317dd50275683f7120bf4943..4c2f6a1ec689e2c6494f47e6a90dcee2cd7d0fa5 100644
--- a/src/test/java/org/olat/selenium/page/graphene/TinyMCELoadedByIdPredicate.java
+++ b/src/test/java/org/olat/selenium/page/graphene/TinyMCELoadedByIdPredicate.java
@@ -21,6 +21,8 @@ package org.olat.selenium.page.graphene;
 
 import java.util.function.Function;
 
+import org.apache.logging.log4j.Logger;
+import org.olat.core.logging.Tracing;
 import org.openqa.selenium.JavascriptExecutor;
 import org.openqa.selenium.WebDriver;
 
@@ -34,6 +36,8 @@ import org.openqa.selenium.WebDriver;
  */
 public class TinyMCELoadedByIdPredicate implements Function<WebDriver,Boolean> {
 	
+	private static final Logger log = Tracing.createLoggerFor(TinyMCELoadedByIdPredicate.class);
+	
 	private final String id;
 	
 	public TinyMCELoadedByIdPredicate(String id) {
@@ -42,11 +46,16 @@ public class TinyMCELoadedByIdPredicate implements Function<WebDriver,Boolean> {
 	
 	@Override
 	public Boolean apply(WebDriver driver) {
-        Object active = ((JavascriptExecutor)driver)
-        		.executeScript("return top != null && top.tinymce != null && top.tinymce.activeEditor != null "
-        				+ " && top.tinymce.activeEditor.initialized && top.tinymce.editors[0].initialized "
-        				+ " && (top.tinymce.editors.length > 1 ? top.tinymce.editors[1].initialized : true)"
-        				+ " && top.tinymce.editors['" + id + "'].initialized;");
-        return Boolean.TRUE.equals(active);
+        try {
+			Object active = ((JavascriptExecutor)driver)
+					.executeScript("return top != null && top.tinymce != null && top.tinymce.activeEditor != null "
+							+ " && top.tinymce.activeEditor.initialized && top.tinymce.editors[0].initialized "
+							+ " && (top.tinymce.editors.length > 1 ? top.tinymce.editors[1].initialized : true)"
+							+ " && top.tinymce.editors['" + id + "'].initialized;");
+			return Boolean.TRUE.equals(active);
+		} catch (Exception e) {
+			log.error("", e);
+			return Boolean.FALSE;
+		}
     }
 }
diff --git a/src/test/java/org/olat/selenium/page/graphene/TinyMCELoadedPredicate.java b/src/test/java/org/olat/selenium/page/graphene/TinyMCELoadedPredicate.java
index f76c7e419e15ae7606e2e0c8355c0df1a20bf26a..1b359986750fe6bf9838c44a00525bab1be7930a 100644
--- a/src/test/java/org/olat/selenium/page/graphene/TinyMCELoadedPredicate.java
+++ b/src/test/java/org/olat/selenium/page/graphene/TinyMCELoadedPredicate.java
@@ -21,6 +21,8 @@ package org.olat.selenium.page.graphene;
 
 import java.util.function.Function;
 
+import org.apache.logging.log4j.Logger;
+import org.olat.core.logging.Tracing;
 import org.openqa.selenium.JavascriptExecutor;
 import org.openqa.selenium.WebDriver;
 
@@ -33,13 +35,20 @@ import org.openqa.selenium.WebDriver;
  *
  */
 public class TinyMCELoadedPredicate implements Function<WebDriver, Boolean> {
+
+	private static final Logger log = Tracing.createLoggerFor(TinyMCELoadedPredicate.class);
 	
 	@Override
 	public Boolean apply(WebDriver driver) {
-        Object active = ((JavascriptExecutor)driver)
-        		.executeScript("return top != null && top.tinymce != null && top.tinymce.activeEditor != null "
-        				+ " && top.tinymce.activeEditor.initialized && top.tinymce.editors[0].initialized "
-        				+ " && (top.tinymce.editors.length > 1 ? top.tinymce.editors[1].initialized : true);");
-        return Boolean.TRUE.equals(active);
+        try {
+			Object active = ((JavascriptExecutor)driver)
+					.executeScript("return top != null && top.tinymce != null && top.tinymce.activeEditor != null "
+							+ " && top.tinymce.activeEditor.initialized && top.tinymce.editors[0].initialized "
+							+ " && (top.tinymce.editors.length > 1 ? top.tinymce.editors[1].initialized : true);");
+			return Boolean.TRUE.equals(active);
+		} catch (Exception e) {
+			log.error("", e);
+			return Boolean.FALSE;
+		}
     }
 }
diff --git a/src/test/java/org/olat/selenium/page/graphene/TransitionPredicate.java b/src/test/java/org/olat/selenium/page/graphene/TransitionPredicate.java
index 7f76c7b73fef1864ce99ea7728d8cd5ca8ea8314..7c1d3f70e9ad6a2c2996d4efc21b7e84870c7d00 100644
--- a/src/test/java/org/olat/selenium/page/graphene/TransitionPredicate.java
+++ b/src/test/java/org/olat/selenium/page/graphene/TransitionPredicate.java
@@ -21,6 +21,8 @@ package org.olat.selenium.page.graphene;
 
 import java.util.function.Function;
 
+import org.apache.logging.log4j.Logger;
+import org.olat.core.logging.Tracing;
 import org.openqa.selenium.JavascriptExecutor;
 import org.openqa.selenium.WebDriver;
 
@@ -33,11 +35,18 @@ import org.openqa.selenium.WebDriver;
  *
  */
 public class TransitionPredicate implements Function<WebDriver,Boolean> {
+
+	private static final Logger log = Tracing.createLoggerFor(TransitionPredicate.class);
 	
 	@Override
 	public Boolean apply(WebDriver driver) {
-        Object busy = ((JavascriptExecutor)driver)
-        		.executeScript("return (window.OPOL.navbar.state.sitesDirty || window.OPOL.navbar.state.tabsDirty || window.OPOL.navbar.state.toolsDirty)");
-        return Boolean.FALSE.equals(busy);
+        try {
+			Object busy = ((JavascriptExecutor)driver)
+					.executeScript("return (window === undefined || !('OPOL' in window) || !('navbar' in window.OPOL) || !('state' in window.OPOL.navbar) || window.OPOL.navbar.state.sitesDirty || window.OPOL.navbar.state.tabsDirty || window.OPOL.navbar.state.toolsDirty)");
+			return Boolean.FALSE.equals(busy);
+		} catch (Exception e) {
+			log.error("", e);
+			return Boolean.FALSE;
+		}
     }
 }
diff --git a/src/test/java/org/olat/selenium/page/group/GroupPage.java b/src/test/java/org/olat/selenium/page/group/GroupPage.java
index adb5bdde2c1a7bec8d6c1e9ae785669ba497d0f4..1b9794868ca4c09cf418290ca8a773e3b41cfed6 100644
--- a/src/test/java/org/olat/selenium/page/group/GroupPage.java
+++ b/src/test/java/org/olat/selenium/page/group/GroupPage.java
@@ -46,7 +46,7 @@ import org.openqa.selenium.WebElement;
  */
 public class GroupPage {
 	
-	private static final By showOwners = By.className("o_sel_group_show_owners");
+	private static final By showOwners = By.className("o_sel_group_members_mgmt");
 	private static final By toolsBy = By.className("o_sel_collab_tools");
 	private static final By editDetails = By.className("o_sel_group_edit_title");
 	private static final By bookingConfigBy = By.className("o_sel_accesscontrol_create");
@@ -194,12 +194,14 @@ public class GroupPage {
 	}
 	
 	public void close() {
-		By closeBy = By.cssSelector("a i.o_icon_close_tool");
+		By closeBy = By.xpath("//li[@class='o_breadcrumb_close']/a[i[contains(@class,'o_icon_close_tool')]]");
+		OOGraphene.waitElementClickable(closeBy, browser);
 		browser.findElement(closeBy).click();
 		OOGraphene.waitBusy(browser);
 	}
 	
 	public GroupPage setVisibility(boolean owners, boolean participants, boolean waitingList) {
+		OOGraphene.waitElement(By.className("o_sel_group_members_visibility"), browser);
 		if(owners) {
 			By showOwnersBy = By.cssSelector(".o_sel_group_show_owners input[type='checkbox']");
 			browser.findElement(showOwnersBy).click();
@@ -224,11 +226,11 @@ public class GroupPage {
 	}
 	
 	public GroupPage setWaitingList() {
-		By waitingListBy = By.xpath("//div[contains(@class,'o_sel_group_edit_waiting_list')]//label[input[@type='checkbox']]");
 		By waitingListCheckBy = By.xpath("//div[contains(@class,'o_sel_group_edit_waiting_list')]//input[@type='checkbox']");
-		WebElement waitingListEl = browser.findElement(waitingListBy);
+		OOGraphene.moveTo(waitingListCheckBy, browser);
+		
 		WebElement waitingListCheckEl = browser.findElement(waitingListCheckBy);
-		OOGraphene.check(waitingListEl, waitingListCheckEl, Boolean.TRUE);
+		OOGraphene.check(waitingListCheckEl, Boolean.TRUE);
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
@@ -282,22 +284,7 @@ public class GroupPage {
 	}
 	
 	private void openAdminTab(By marker) {
-		By navBarAdmin = By.cssSelector("div.o_tabbed_pane ul>li>a");
-		OOGraphene.waitElement(navBarAdmin, browser);
-		List<WebElement> tabLinks = browser.findElements(navBarAdmin);
-		Assert.assertFalse(tabLinks.isEmpty());
-
-		boolean found = false;
-		for(WebElement tabLink:tabLinks) {
-			tabLink.click();
-			OOGraphene.waitBusy(browser);
-			List<WebElement> markerEls = browser.findElements(marker);
-			if(markerEls.size() > 0) {
-				found = true;
-				break;
-			}
-		}
-		Assert.assertTrue(found);
+		OOGraphene.selectTab("nav-tabs", marker, browser);
 	}
 	
 	public GroupPage assertOnInfosPage(String name) {
diff --git a/src/test/java/org/olat/selenium/page/group/MembersWizardPage.java b/src/test/java/org/olat/selenium/page/group/MembersWizardPage.java
index 82740d198483aa3105de5049dab8fdd52775fe75..b9f9742f126fc22059b87598e27183386a7697e7 100644
--- a/src/test/java/org/olat/selenium/page/group/MembersWizardPage.java
+++ b/src/test/java/org/olat/selenium/page/group/MembersWizardPage.java
@@ -68,7 +68,7 @@ public class MembersWizardPage {
 	public MembersWizardPage finish() {
 		try {
 			By contactFormBy = By.cssSelector("fieldset.o_sel_contact_form");
-			OOGraphene.waitElement(contactFormBy, 5, browser);
+			OOGraphene.waitElement(contactFormBy, browser);
 			OOGraphene.waitBusyAndScrollTop(browser);
 			OOGraphene.finishStep(browser);
 		} catch (Exception e) {
@@ -94,7 +94,7 @@ public class MembersWizardPage {
 
 		By searchBy = By.cssSelector(".o_sel_usersearch_searchform a.btn-default");
 		OOGraphene.clickAndWait(searchBy, browser);
-		
+
 		// select all
 		By selectAll = By.xpath("//div[contains(@class,'modal')]//div[contains(@class,'o_table_checkall')]/a[i[contains(@class,'o_icon_check_on')]]");
 		OOGraphene.waitElement(selectAll, browser);
diff --git a/src/test/java/org/olat/selenium/page/lecture/EditLectureBlockPage.java b/src/test/java/org/olat/selenium/page/lecture/EditLectureBlockPage.java
index eeec96333ca86c313c51c1f92042804b8e1827d5..e6e39bd2c3dea07b56ca3701521f7d714a895fbc 100644
--- a/src/test/java/org/olat/selenium/page/lecture/EditLectureBlockPage.java
+++ b/src/test/java/org/olat/selenium/page/lecture/EditLectureBlockPage.java
@@ -50,9 +50,7 @@ public class EditLectureBlockPage {
 	public EditLectureBlockPage setTeacher(UserVO user) {
 		By checkboxBy = By.xpath("//div[contains(@class,'o_sel_repo_lecture_teachers')]//input[@type='checkbox'][@value='" + user.getKey() + "']");
 		WebElement checkboxEl = browser.findElement(checkboxBy);
-		By labelBy = By.xpath("//div[contains(@class,'o_sel_repo_lecture_teachers')]//label[input[@type='checkbox'][@value='" + user.getKey() + "']]");
-		WebElement labelEl = browser.findElement(labelBy);
-		OOGraphene.check(labelEl, checkboxEl, Boolean.TRUE);
+		OOGraphene.check(checkboxEl, Boolean.TRUE);
 		return this;
 	}
 	
@@ -85,7 +83,6 @@ public class EditLectureBlockPage {
 		
 		By untilAltBy = By.cssSelector("fieldset.o_sel_repo_edit_lecture_form div.o_sel_repo_lecture_date span.input-group-addon i");
 		browser.findElement(untilAltBy).click();
-		OOGraphene.waitGui(browser);
 		selectDayInDatePicker(day);
 		return this;
 	}
@@ -99,7 +96,6 @@ public class EditLectureBlockPage {
 		browser.findElement(dayBy).click();
 		
 		OOGraphene.waitElementUntilNotVisible(datePickerBy, 5, browser);
-		//OOGraphene.waitingALittleBit();
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/lecture/LectureAdminSettingsPage.java b/src/test/java/org/olat/selenium/page/lecture/LectureAdminSettingsPage.java
index f28f6327272d69204a9a14eebb815afe68d66f8e..ab7bd41de8f6503ea2e4f7776e1c8a2867c573cc 100644
--- a/src/test/java/org/olat/selenium/page/lecture/LectureAdminSettingsPage.java
+++ b/src/test/java/org/olat/selenium/page/lecture/LectureAdminSettingsPage.java
@@ -118,15 +118,13 @@ public class LectureAdminSettingsPage {
 	}
 	
 	private LectureAdminSettingsPage set(String name, String value, boolean enable) {
-		By enableLabelBy = By.xpath("//label[input[@name='" + name + "' and @value='" + value + "']]");
 		By enableCheckBy = By.xpath("//label/input[@name='" + name + "' and @value='" + value + "']");
 		
-		OOGraphene.waitElement(enableLabelBy, browser);
-		OOGraphene.scrollTo(enableLabelBy, browser);
+		OOGraphene.waitElement(enableCheckBy, browser);
+		OOGraphene.scrollTo(enableCheckBy, browser);
 		
-		WebElement enableLabelEl = browser.findElement(enableLabelBy);
 		WebElement enableCheckEl = browser.findElement(enableCheckBy);
-		OOGraphene.check(enableLabelEl, enableCheckEl, new Boolean(enable));
+		OOGraphene.check(enableCheckEl, new Boolean(enable));
 		OOGraphene.waitBusy(browser);
 		return this;
 		
diff --git a/src/test/java/org/olat/selenium/page/lecture/LectureRepositoryAdminPage.java b/src/test/java/org/olat/selenium/page/lecture/LectureRepositoryAdminPage.java
index 064dfd1fa09d4dc9904fdfa41b640f968c991d85..bb8c54bb02205287689503fc7275a2449e63b288 100644
--- a/src/test/java/org/olat/selenium/page/lecture/LectureRepositoryAdminPage.java
+++ b/src/test/java/org/olat/selenium/page/lecture/LectureRepositoryAdminPage.java
@@ -67,9 +67,7 @@ public class LectureRepositoryAdminPage {
 	 */
 	public CoursePageFragment clickToolbarRootCrumb() {
 		OOGraphene.closeBlueMessageWindow(browser);
-		By toolbarBackBy = By.xpath("//li[contains(@class,'o_breadcrumb_back')]/following-sibling::li/a");
-		browser.findElement(toolbarBackBy).click();
-		OOGraphene.waitBusy(browser);
+		OOGraphene.clickBreadcrumbBack(browser);
 		return new CoursePageFragment(browser);
 	}
 
diff --git a/src/test/java/org/olat/selenium/page/lecture/LectureRepositoryParticipantsPage.java b/src/test/java/org/olat/selenium/page/lecture/LectureRepositoryParticipantsPage.java
index 73c0935b733f3dbe33fe4c17edb58e02a23f1d41..b2d03b230f08a44599a07de12c8a878041302298 100644
--- a/src/test/java/org/olat/selenium/page/lecture/LectureRepositoryParticipantsPage.java
+++ b/src/test/java/org/olat/selenium/page/lecture/LectureRepositoryParticipantsPage.java
@@ -68,16 +68,15 @@ public class LectureRepositoryParticipantsPage {
 		By firstAdmissionBy = By.cssSelector("fieldset.o_sel_lecture_participant_summary_form div.o_sel_lecture_first_admission span.input-group-addon i");
 		OOGraphene.waitElement(firstAdmissionBy, browser);
 		browser.findElement(firstAdmissionBy).click();
-		OOGraphene.waitGui(browser);
-		
+
 		// a month before
 		By monthBeforeBy = By.cssSelector("a.ui-datepicker-prev.ui-corner-all");
+		OOGraphene.waitElement(monthBeforeBy, browser);
 		browser.findElement(monthBeforeBy).click();
-		OOGraphene.waitGui(browser);
 		
 		// select the 12
 		By dayBy = By.xpath("//div[@id='ui-datepicker-div']//td//a[normalize-space(text())='12']");
-		OOGraphene.waitElement(dayBy, 5, browser);
+		OOGraphene.waitElement(dayBy, browser);
 		browser.findElement(dayBy).click();
 
 		//wait until
diff --git a/src/test/java/org/olat/selenium/page/lecture/LectureRepositorySettingsPage.java b/src/test/java/org/olat/selenium/page/lecture/LectureRepositorySettingsPage.java
index d4b1117ad200a9df6b08828269fb11b3e85c6dc9..30260fcdadbfc82b8a3ac5184c55565b4f16c667 100644
--- a/src/test/java/org/olat/selenium/page/lecture/LectureRepositorySettingsPage.java
+++ b/src/test/java/org/olat/selenium/page/lecture/LectureRepositorySettingsPage.java
@@ -40,12 +40,10 @@ public class LectureRepositorySettingsPage {
 	
 	public LectureRepositorySettingsPage enableLectures() {
 		By enableBy = By.xpath("//label/input[@name='lecture.admin.enabled' and @value='on']");
-		By enableLabelBy = By.xpath("//label[input[@name='lecture.admin.enabled' and @value='on']]");
 		OOGraphene.waitElement(enableBy, browser);
 		
 		WebElement checkboxEl = browser.findElement(enableBy);
-		WebElement labelEl = browser.findElement(enableLabelBy);
-		OOGraphene.check(labelEl, checkboxEl, Boolean.TRUE);
+		OOGraphene.check(checkboxEl, Boolean.TRUE);
 		OOGraphene.waitBusy(browser);
 		
 		By overrideBy = By.cssSelector("div.o_sel_repo_lecture_override input[type=radio]");
diff --git a/src/test/java/org/olat/selenium/page/portfolio/BinderPublicationPage.java b/src/test/java/org/olat/selenium/page/portfolio/BinderPublicationPage.java
index acf65dec89e390bb96e7ec9c56d2ea484d1f6046..7bdd36c31d584233ad64f772256485ca8c2577e5 100644
--- a/src/test/java/org/olat/selenium/page/portfolio/BinderPublicationPage.java
+++ b/src/test/java/org/olat/selenium/page/portfolio/BinderPublicationPage.java
@@ -82,11 +82,9 @@ public class BinderPublicationPage {
 	
 	public BinderPublicationPage fillAccessRights(String name, Boolean check) {
 		By checkBy = By.xpath("//div[contains(@class,'o_portfolio_rights')]//table//tr[td[contains(text(),'" + name + "')]]/td//input[@type='checkbox']");
-		By labelCheckBy = By.xpath("//div[contains(@class,'o_portfolio_rights')]//table//tr[td[contains(text(),'" + name + "')]]/td//label[input[@type='checkbox']]");
 		WebElement checkEl = browser.findElement(checkBy);
-		WebElement labelCheckEl = browser.findElement(labelCheckBy);
-		OOGraphene.scrollTo(labelCheckBy, browser);
-		OOGraphene.check(labelCheckEl, checkEl, check);
+		OOGraphene.scrollTo(checkBy, browser);
+		OOGraphene.check(checkEl, check);
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
diff --git a/src/test/java/org/olat/selenium/page/qpool/QuestionPoolPage.java b/src/test/java/org/olat/selenium/page/qpool/QuestionPoolPage.java
index b383e6e2570b58f67fc5ae6c50eaa0e8190d7f7a..4dae8506e9ea2a3b3eb52aba49c68cf5d2e10a42 100644
--- a/src/test/java/org/olat/selenium/page/qpool/QuestionPoolPage.java
+++ b/src/test/java/org/olat/selenium/page/qpool/QuestionPoolPage.java
@@ -137,6 +137,7 @@ public class QuestionPoolPage {
 	 */
 	public QuestionPoolPage startReviewProcess() {
 		By startProcessBy = By.xpath("//div[contains(@class,'o_button_group')]/a[contains(@onclick,'process.activate.start.review')]");
+		OOGraphene.waitElement(startProcessBy, browser);
 		browser.findElement(startProcessBy).click();
 		OOGraphene.waitBusy(browser);
 		OOGraphene.waitModalDialog(browser);
diff --git a/src/test/java/org/olat/selenium/page/qti/QTI21AssessmentItemEditorPage.java b/src/test/java/org/olat/selenium/page/qti/QTI21AssessmentItemEditorPage.java
index cdaa50c59c958dbaf136a982670fc79c020ebc4b..4099c09c4d4eac76e6575975309f3fe0be905c27 100644
--- a/src/test/java/org/olat/selenium/page/qti/QTI21AssessmentItemEditorPage.java
+++ b/src/test/java/org/olat/selenium/page/qti/QTI21AssessmentItemEditorPage.java
@@ -19,13 +19,9 @@
  */
 package org.olat.selenium.page.qti;
 
-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;
-import org.openqa.selenium.WebElement;
 
 /**
  * 
@@ -44,21 +40,7 @@ public abstract class QTI21AssessmentItemEditorPage {
 	}
 	
 	protected QTI21AssessmentItemEditorPage selectTab(By tabBy) {
-		List<WebElement> tabLinks = browser.findElements(tabBarBy);
-
-		boolean found = false;
-		a_a:
-		for(WebElement tabLink:tabLinks) {
-			tabLink.click();
-			OOGraphene.waitBusy(browser);
-			List<WebElement> tabEls = browser.findElements(tabBy);
-			if(tabEls.size() > 0) {
-				found = true;
-				break a_a;
-			}
-		}
-
-		Assert.assertTrue("Found the tab", found);
+		OOGraphene.selectTab("o_sel_assessment_item_config", tabBy, browser);
 		return this;
 	}
 }
diff --git a/src/test/java/org/olat/selenium/page/qti/QTI21ConfigurationCEPage.java b/src/test/java/org/olat/selenium/page/qti/QTI21ConfigurationCEPage.java
index 443382a9cc15633721f7721a9afc65aebdb5c303..137e91d8fc3abc7ba5b579d39e9ec76fd97afbe1 100644
--- a/src/test/java/org/olat/selenium/page/qti/QTI21ConfigurationCEPage.java
+++ b/src/test/java/org/olat/selenium/page/qti/QTI21ConfigurationCEPage.java
@@ -19,11 +19,7 @@
  */
 package org.olat.selenium.page.qti;
 
-import java.util.List;
-
-import org.junit.Assert;
 import org.olat.ims.qti21.QTI21AssessmentResultsOptions;
-import org.olat.selenium.page.course.CourseEditorPageFragment;
 import org.olat.selenium.page.graphene.OOGraphene;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
@@ -52,6 +48,7 @@ public class QTI21ConfigurationCEPage {
 		By scoreBy = By.cssSelector(".o_sel_results_on_homepage input[type='checkbox']");
 		WebElement scoreEl = browser.findElement(scoreBy);
 		OOGraphene.check(scoreEl, showResults);
+		OOGraphene.waitBusy(browser);
 		return this;
 	}
 	
@@ -101,21 +98,7 @@ public class QTI21ConfigurationCEPage {
 	}
 	
 	private QTI21ConfigurationCEPage selectTab(By tabBy) {
-		List<WebElement> tabLinks = browser.findElements(CourseEditorPageFragment.navBarNodeConfiguration);
-
-		boolean found = false;
-		a_a:
-		for(WebElement tabLink:tabLinks) {
-			tabLink.click();
-			OOGraphene.waitBusy(browser);
-			List<WebElement> chooseRepoEntry = browser.findElements(tabBy);
-			if(chooseRepoEntry.size() > 0) {
-				found = true;
-				break a_a;
-			}
-		}
-
-		Assert.assertTrue("Found the tab", found);
+		OOGraphene.selectTab("o_node_config", tabBy, browser);
 		return this;
 	}
 
diff --git a/src/test/java/org/olat/selenium/page/qti/QTI21HotspotEditorPage.java b/src/test/java/org/olat/selenium/page/qti/QTI21HotspotEditorPage.java
index 2b7a05525a4f3abb95d5000c5fce217f2dbfd257..21a29b1913504d5adca247d88f587569bfaf6c3e 100644
--- a/src/test/java/org/olat/selenium/page/qti/QTI21HotspotEditorPage.java
+++ b/src/test/java/org/olat/selenium/page/qti/QTI21HotspotEditorPage.java
@@ -27,7 +27,6 @@ import org.openqa.selenium.By;
 import org.openqa.selenium.Dimension;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
-import org.openqa.selenium.firefox.FirefoxDriver;
 import org.openqa.selenium.interactions.Actions;
 
 import uk.ac.ed.ph.jqtiplus.value.Cardinality;
@@ -82,10 +81,7 @@ public class QTI21HotspotEditorPage extends QTI21AssessmentItemEditorPage {
 	public QTI21HotspotEditorPage moveToHotspotEditor() {
 		By editorBy = By.id("o_qti_hotspots_edit");
 		OOGraphene.waitElement(editorBy, browser);
-		
-		if(browser instanceof FirefoxDriver) {
-			OOGraphene.scrollTo(editorBy, browser);
-		}
+		OOGraphene.moveTo(editorBy, browser);
 		return this;
 	}
 	
@@ -96,8 +92,8 @@ public class QTI21HotspotEditorPage extends QTI21AssessmentItemEditorPage {
 	public QTI21HotspotEditorPage resizeCircle() {
 		By circleBy = By.cssSelector("div.o_draw_circle");
 		OOGraphene.waitElement(circleBy, browser);
+		
 		WebElement circleEl = browser.findElement(circleBy);
-		circleEl = OOGraphene.unwrap(circleEl);
 		Dimension dim = circleEl.getSize();
 		Position pos = Position.valueOf(10, 10, dim, browser);
 		new Actions(browser)
@@ -137,7 +133,6 @@ public class QTI21HotspotEditorPage extends QTI21AssessmentItemEditorPage {
 	private QTI21HotspotEditorPage moveElement(By elementBy, int xOffset, int yOffset) {
 		OOGraphene.waitElement(elementBy, browser);
 		WebElement element = browser.findElement(elementBy);
-		element = OOGraphene.unwrap(element);
 		Dimension size = element.getSize();
 		int centerX = size.getWidth() / 2;
 		int centerY = size.getHeight() / 2;
diff --git a/src/test/java/org/olat/selenium/page/qti/QTI21MultipleChoiceEditorPage.java b/src/test/java/org/olat/selenium/page/qti/QTI21MultipleChoiceEditorPage.java
index a7ec6b4162de966098f5c9c32893ef098951aac4..4c38b9b39e50c2dafd76eba950626ba14ee519e3 100644
--- a/src/test/java/org/olat/selenium/page/qti/QTI21MultipleChoiceEditorPage.java
+++ b/src/test/java/org/olat/selenium/page/qti/QTI21MultipleChoiceEditorPage.java
@@ -43,20 +43,19 @@ public class QTI21MultipleChoiceEditorPage extends QTI21AssessmentItemEditorPage
 	 */
 	public QTI21MultipleChoiceEditorPage addChoice(int position) {
 		By addBy = By.xpath("//div[contains(@class,'o_sel_add_choice_" + position + "')]/a");
+		OOGraphene.waitElement(addBy, browser);
 		browser.findElement(addBy).click();
 		OOGraphene.waitBusy(browser);
 		//wait the next element
 		By addedBy = By.xpath("//div[contains(@class,'o_sel_add_choice_" + (position + 1) + "')]/a");
-		OOGraphene.waitElement(addedBy, 5, browser);
+		OOGraphene.waitElement(addedBy, browser);
 		return this;
 	}
 	
 	public QTI21MultipleChoiceEditorPage setCorrect(int position) {
-		By correctBy = By.xpath("//div[contains(@class,'o_sel_choice_" + position + "')]//label[input[contains(@id,'oo_correct-')]]");
 		By correctCheckBy = By.xpath("//div[contains(@class,'o_sel_choice_" + position + "')]//input[contains(@id,'oo_correct-')]");
-		WebElement correctEl = browser.findElement(correctBy);
 		WebElement correctCheckEl = browser.findElement(correctCheckBy);
-		OOGraphene.check(correctEl, correctCheckEl, true);
+		OOGraphene.check(correctCheckEl, true);
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
diff --git a/src/test/java/org/olat/selenium/page/qti/QTI21Page.java b/src/test/java/org/olat/selenium/page/qti/QTI21Page.java
index 6758e6a31a955a505414c7dcb66edd0cdcc47795..226e14213ed34be6860e88f7d4466c3ade3b433e 100644
--- a/src/test/java/org/olat/selenium/page/qti/QTI21Page.java
+++ b/src/test/java/org/olat/selenium/page/qti/QTI21Page.java
@@ -312,9 +312,9 @@ public class QTI21Page {
 	public QTI21Page answerMatchDropSourceToTarget(String source, String target) {
 		By sourceBy = By.xpath("//li[contains(@class,'o_match_dnd_source')]/p[contains(text(),'" + source + "')]");
 		OOGraphene.waitElement(sourceBy, 5, browser);
-		WebElement sourceEl = OOGraphene.unwrap(browser.findElement(sourceBy));
+		WebElement sourceEl = browser.findElement(sourceBy);
 		By targetBy = By.xpath("//li[contains(@class,'o_match_dnd_target')]/div[@class='clearfix']/p[contains(text(),'" + target + "')]");
-		WebElement targetEl = OOGraphene.unwrap(browser.findElement(targetBy));
+		WebElement targetEl = browser.findElement(targetBy);
 		new Actions(browser)
 			.moveToElement(sourceEl, 30, 30)
 			.clickAndHold()
@@ -330,9 +330,9 @@ public class QTI21Page {
 	
 	public QTI21Page answerMatchDropTargetToTarget(String source, String target) {
 		By sourceDroppedBy = By.xpath("//ul[contains(@class,'o_match_dnd_target_drop_zone')]/li[contains(@class,'o_match_dnd_source')]/p[contains(text(),'" + source + "')]");
-		WebElement sourceEl = OOGraphene.unwrap(browser.findElement(sourceDroppedBy));
+		WebElement sourceEl = browser.findElement(sourceDroppedBy);
 		By targetBy = By.xpath("//li[contains(@class,'o_match_dnd_target')]/div[@class='clearfix']/p[contains(text(),'" + target + "')]");
-		WebElement targetEl = OOGraphene.unwrap(browser.findElement(targetBy));
+		WebElement targetEl = browser.findElement(targetBy);
 		new Actions(browser)
 			.moveToElement(sourceEl, 30, 30)
 			.clickAndHold()
@@ -353,9 +353,9 @@ public class QTI21Page {
 	
 	public QTI21Page answerAssociate(String source, int index, boolean left) {
 		By itemBy = By.xpath("//div[contains(@class,'o_associate_items')]/div[contains(@class,'o_associate_item')][contains(text(),'" + source + "')]");
-		WebElement itemEl = OOGraphene.unwrap( browser.findElement(itemBy));
+		WebElement itemEl = browser.findElement(itemBy);
 		By targetBy = By.xpath("//div[@class='association'][" + index + "]/div[contains(@class,'association_box')][contains(@class,'" + (left ? "left" : "right") + "')]");
-		WebElement targetEl = OOGraphene.unwrap(browser.findElement(targetBy));
+		WebElement targetEl = browser.findElement(targetBy);
 		new Actions(browser)
 			.moveToElement(itemEl, 10, 10)
 			.clickAndHold()
@@ -409,7 +409,7 @@ public class QTI21Page {
 		By associateItemsBy = By.xpath("//div[@class='graphicAssociateInteraction']");
 		OOGraphene.waitElement(associateItemsBy, browser);
 		if(browser instanceof FirefoxDriver) {
-			OOGraphene.scrollTo(associateItemsBy, browser);
+			OOGraphene.moveTo(associateItemsBy, browser);
 		}
 		return this;
 	}
@@ -417,9 +417,9 @@ public class QTI21Page {
 	public QTI21Page answerOrderDropItem(String source) {
 		By sourceBy = By.xpath("//li[@class='o_assessmentitem_order_item'][contains(text(),'" + source + "')]");
 		OOGraphene.waitElement(sourceBy, 5, browser);
-		WebElement sourceEl = OOGraphene.unwrap(browser.findElement(sourceBy));
+		WebElement sourceEl = browser.findElement(sourceBy);
 		By targetBy = By.xpath("//div[@class='orderInteraction']//div[contains(@class,'target')]/ul");
-		WebElement targetEl = OOGraphene.unwrap(browser.findElement(targetBy));
+		WebElement targetEl = browser.findElement(targetBy);
 		
 		Position sourcePos = Position.valueOf(30, 30, sourceEl.getSize(), browser);
 		Position targetPos = Position.valueOf(30, 30,  targetEl.getSize(), browser);
@@ -464,20 +464,15 @@ public class QTI21Page {
 		browser.findElement(sourceBy).click();
 		By areaBy = By.xpath("//div[@class='graphicGapMatchInteraction']//map/area[@data-qti-id='" + gap + "']");
 		WebElement areaEl = browser.findElement(areaBy);
-		if(browser instanceof FirefoxDriver) {
-			String coords = areaEl.getAttribute("coords");
-			By imgBy = By.xpath("//div[contains(@class,'graphicGapMatchInteraction')]/div/div/img");
-			WebElement element = browser.findElement(imgBy);
-			Dimension dim = element.getSize();
-			Position pos = Position.valueOf(coords, dim, browser);
-			new Actions(browser)
-				.moveToElement(element, pos.getX(), pos.getY())
-				.click()
-				.perform();
-			
-		} else {
-			areaEl.click();
-		}
+		String coords = areaEl.getAttribute("coords");
+		By imgBy = By.xpath("//div[contains(@class,'graphicGapMatchInteraction')]/div/div/img");
+		WebElement element = browser.findElement(imgBy);
+		Dimension dim = element.getSize();
+		Position pos = Position.valueOf(coords, dim, browser);
+		new Actions(browser)
+			.moveToElement(element, pos.getX(), pos.getY())
+			.click()
+			.perform();
 		return this;
 	}
 	
@@ -491,7 +486,7 @@ public class QTI21Page {
 	public QTI21Page answerSelectPoint(int x, int y, int width, int height) {
 		Position pos = Position.valueOf(x, y, width, height, browser);
 		By canvasBy = By.xpath("//div[contains(@class,'selectPointInteraction')]/div/canvas");
-		WebElement canvasEl = OOGraphene.unwrap(browser.findElement(canvasBy));
+		WebElement canvasEl = browser.findElement(canvasBy);
 		new Actions(browser)
 			.moveToElement(canvasEl, pos.getX(), pos.getY())
 			.click()
@@ -526,9 +521,9 @@ public class QTI21Page {
 	public QTI21Page answerPositionObject(int index, int x, int y, int firefoxCorrection) {
 		By itemBy = By.xpath("//div[contains(@class,'positionObjectStage')]//div[@id='object-item-" + index + "']");
 		OOGraphene.waitElement(itemBy, browser);
-		WebElement itemEl = OOGraphene.unwrap(browser.findElement(itemBy));
+		WebElement itemEl = browser.findElement(itemBy);
 		By targetBy = By.xpath("//div[@class='positionObjectStage']//img[contains(@id,'qtiworks_id_container_')]");
-		WebElement targetEl = OOGraphene.unwrap(browser.findElement(targetBy));
+		WebElement targetEl = browser.findElement(targetBy);
 		Dimension targetDim = targetEl.getSize();
 		Position targetPos = Position.valueOf(x, y, firefoxCorrection, targetDim, browser);
 		Dimension itemDim = itemEl.getSize();
@@ -549,11 +544,9 @@ public class QTI21Page {
 	 * @return Itself
 	 */
 	public QTI21Page moveToVerticalSlider() {
-		By interactionBy = By.id("itemBody");
+		By interactionBy = By.cssSelector("span.ui-slider-handle");
 		OOGraphene.waitElement(interactionBy, browser);
-		if(browser instanceof FirefoxDriver) {
-			OOGraphene.scrollTo(interactionBy, browser);
-		}
+		OOGraphene.moveTo(interactionBy, browser);
 		return this;
 	}
 	
@@ -566,7 +559,7 @@ public class QTI21Page {
 	public QTI21Page answerVerticalSlider(int val) {
 		By sliderBy = By.xpath("//div[contains(@class,'sliderInteraction')]/div[contains(@class,'sliderVertical')]/div[contains(@class,'sliderWidget')]");
 		OOGraphene.waitElement(sliderBy, browser);
-		WebElement sliderEl = OOGraphene.unwrap(browser.findElement(sliderBy));
+		WebElement sliderEl = browser.findElement(sliderBy);
 		Dimension size = sliderEl.getSize();
 		float height = (size.getHeight() / 100f) * val;
 		int scaledY = Math.round(size.getHeight() - height);
@@ -602,8 +595,7 @@ public class QTI21Page {
 	 */
 	public QTI21Page answerDrawing() {
 		By drawingBy = By.xpath("//div[contains(@class,'drawingInteraction')]//canvas[@id='tmp_canvas']");
-		WebElement drawingEl = OOGraphene.unwrap(browser.findElement(drawingBy));
-		
+		WebElement drawingEl = browser.findElement(drawingBy);
 		new Actions(browser)
 			.moveToElement(drawingEl, 30, 30)
 			.clickAndHold()
@@ -623,6 +615,12 @@ public class QTI21Page {
 		return this;
 	}
 	
+	public QTI21Page assertAnswered() {
+		By answeredBy = By.xpath("//span[contains(@class,'o_assessmentitem_status')][i[contains(@class,'o_icon_qti_answered')]]");
+		OOGraphene.waitElement(answeredBy, browser);
+		return this;
+	}
+	
 	/**
 	 * For hotspot because Firefox cannot click the save without
 	 * special scrolling.
@@ -924,7 +922,7 @@ public class QTI21Page {
 	 */
 	public QTI21Page assertOnAssessmentTestTerminated() {
 		By terminatedBy = By.cssSelector("div.o_sel_assessment_test_terminated");
-		OOGraphene.waitElement(terminatedBy, 5, browser);
+		OOGraphene.waitElement(terminatedBy, browser);
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/qti/QTI21SingleChoiceEditorPage.java b/src/test/java/org/olat/selenium/page/qti/QTI21SingleChoiceEditorPage.java
index 6b8954d32eed8403f9a7f26aaea1910db512b7e2..6e8ee7e9d98e7895f57f883ee9cded256f4863ba 100644
--- a/src/test/java/org/olat/selenium/page/qti/QTI21SingleChoiceEditorPage.java
+++ b/src/test/java/org/olat/selenium/page/qti/QTI21SingleChoiceEditorPage.java
@@ -43,16 +43,18 @@ public class QTI21SingleChoiceEditorPage extends QTI21AssessmentItemEditorPage {
 	 */
 	public QTI21SingleChoiceEditorPage addChoice(int position) {
 		By addBy = By.xpath("//div[contains(@class,'o_sel_add_choice_" + position + "')]/a");
+		OOGraphene.waitElement(addBy, browser);
 		browser.findElement(addBy).click();
 		OOGraphene.waitBusy(browser);
 		//wait the next element
 		By addedBy = By.xpath("//div[contains(@class,'o_sel_add_choice_" + (position + 1) + "')]/a");
-		OOGraphene.waitElement(addedBy, 5, browser);
+		OOGraphene.waitElement(addedBy, browser);
 		return this;
 	}
 	
 	public QTI21SingleChoiceEditorPage setCorrect(int position) {
 		By correctBy = By.xpath("//div[contains(@class,'o_sel_choice_" + position + "')]//input[contains(@id,'oo_correct-')]");
+		OOGraphene.waitElement(correctBy, browser);
 		browser.findElement(correctBy).click();
 		return this;
 	}
diff --git a/src/test/java/org/olat/selenium/page/repository/FeedPage.java b/src/test/java/org/olat/selenium/page/repository/FeedPage.java
index 455e7dc62de5af66c8a04c6cd6cff271f5bca0ad..9133cba85509663d5e5cd2e6ae891d3c946ba94a 100644
--- a/src/test/java/org/olat/selenium/page/repository/FeedPage.java
+++ b/src/test/java/org/olat/selenium/page/repository/FeedPage.java
@@ -155,8 +155,9 @@ public class FeedPage {
 	
 	public FeedPage publishPost() {
 		By publishButton = By.cssSelector(".o_sel_feed_form button.btn-primary");
-		browser.findElement(publishButton).click();
+		OOGraphene.moveAndClick(publishButton, browser);
 		OOGraphene.waitBusy(browser);
+		OOGraphene.waitModalDialogDisappears(browser);
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/repository/RepositoryAccessPage.java b/src/test/java/org/olat/selenium/page/repository/RepositoryAccessPage.java
index 187a6bad264a71f26102ebb216801bb351a6015c..c8cc44d13edd8ecc8d070330b68919139929eaf3 100644
--- a/src/test/java/org/olat/selenium/page/repository/RepositoryAccessPage.java
+++ b/src/test/java/org/olat/selenium/page/repository/RepositoryAccessPage.java
@@ -49,11 +49,8 @@ public class RepositoryAccessPage {
 			OOGraphene.waitElement(guestsBy, browser);
 			
 			if(access == UserAccess.guest) {
-				By labelGuestsBy = By.xpath("//div[contains(@class,'o_sel_repositoryentry_access_guest')]//label/input[@name='entry.access.guest' and @value='on']");
-
 				WebElement guestsEl = browser.findElement(guestsBy);
-				WebElement labelGuestsEl = browser.findElement(labelGuestsBy);
-				OOGraphene.check(labelGuestsEl, guestsEl, Boolean.TRUE);
+				OOGraphene.check(guestsEl, Boolean.TRUE);
 			}
 		} else if(access == UserAccess.membersOnly) {
 			By allUsersBy = By.xpath("//div[@id='o_coentry_access_type']/div/label/input[@name='entry.access.type' and @value='private']");
diff --git a/src/test/java/org/olat/selenium/page/repository/RepositorySettingsPage.java b/src/test/java/org/olat/selenium/page/repository/RepositorySettingsPage.java
index 2144b10c81efafe8fad39e83e6fb37d531127974..d1c0e2b64c599f8c74785b3f52bc006b5b886734 100644
--- a/src/test/java/org/olat/selenium/page/repository/RepositorySettingsPage.java
+++ b/src/test/java/org/olat/selenium/page/repository/RepositorySettingsPage.java
@@ -19,7 +19,6 @@
  */
 package org.olat.selenium.page.repository;
 
-import org.olat.selenium.page.NavigationPage;
 import org.olat.selenium.page.graphene.OOGraphene;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
@@ -76,7 +75,6 @@ public class RepositorySettingsPage {
 	}
 	
 	public void back() {
-		browser.findElement(NavigationPage.toolbarBackBy).click();
-		OOGraphene.waitBusy(browser);
+		OOGraphene.clickBreadcrumbBack(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 e15eacf28cbdd31f69b8880db5171ef84d96644f..64cb93599299499ca92e6af4acfa25f59d43858d 100644
--- a/src/test/java/org/olat/selenium/page/repository/ScormPage.java
+++ b/src/test/java/org/olat/selenium/page/repository/ScormPage.java
@@ -50,12 +50,17 @@ public class ScormPage {
 	
 	public ScormPage start() {
 		By startBy = By.cssSelector("button.o_sel_start_scorm");
-		WebElement startButton = browser.findElement(startBy);
-		startButton.click();
+		browser.findElement(startBy).click();
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
 	
+	public ScormPage assertOnStart() {
+		By startBy = By.cssSelector("button.o_sel_start_scorm");
+		OOGraphene.waitElement(startBy, browser);
+		return this;
+	}
+	
 	public ScormPage passVerySimpleScorm() {
 		browser.switchTo().frame("scormContentFrame");
 		
@@ -116,6 +121,7 @@ public class ScormPage {
 	 */
 	public ScormPage back() {
 		By backBy = By.className("o_link_back");
+		OOGraphene.waitElement(backBy, browser);
 		browser.findElement(backBy).click();
 		OOGraphene.waitBusy(browser);
 		return this;
diff --git a/src/test/java/org/olat/selenium/page/user/UserToolsPage.java b/src/test/java/org/olat/selenium/page/user/UserToolsPage.java
index 4e4834f9800d21271a16b466141b17a19683dbc5..c852216efa604715e46ce7ab506230bd51388136 100644
--- a/src/test/java/org/olat/selenium/page/user/UserToolsPage.java
+++ b/src/test/java/org/olat/selenium/page/user/UserToolsPage.java
@@ -21,7 +21,9 @@ package org.olat.selenium.page.user;
 
 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.LoginPage;
 import org.olat.selenium.page.core.FolderPage;
 import org.olat.selenium.page.graphene.OOGraphene;
@@ -39,6 +41,8 @@ import org.openqa.selenium.WebElement;
  */
 public class UserToolsPage {
 	
+	private static final Logger log = Tracing.createLoggerFor(UserToolsPage.class);
+	
 	public static final By mySettingsClassName = By.className("o_sel_user_tools-mysettings");
 
 	private final WebDriver browser;
@@ -102,17 +106,22 @@ public class UserToolsPage {
 		List<WebElement> mySettingsLinks = browser.findElements(mySettingsClassName);
 		if(mySettingsLinks.isEmpty() || !mySettingsLinks.get(0).isDisplayed()) {
 			By toolbarCaretBy = By.id("o_sel_navbar_my_menu_caret");
+			
 			List<WebElement> toolbarCaretLinks = browser.findElements(toolbarCaretBy);
 			Assert.assertFalse(toolbarCaretLinks.isEmpty());
 			WebElement toolbarCaretLink = toolbarCaretLinks.get(0);
 			Assert.assertNotNull(toolbarCaretLink);
 			try {
-				toolbarCaretLink.click();
+				browser.findElement(toolbarCaretBy).click();
 			} catch (Exception e) {
-				e.printStackTrace();
+				log.error("", e);
 			}
 			OOGraphene.waitNavBarTransition(browser);
-			OOGraphene.waitElement(mySettingsClassName, browser);
+			try {
+				OOGraphene.waitElement(mySettingsClassName, browser);//TODO selenium
+			} catch (Exception e) {
+				log.error("", e);
+			}
 		}
 		assertOnUserTools();
 		return this;
@@ -174,6 +183,6 @@ public class UserToolsPage {
 
 		By logoutBy = By.className("o_logout");
 		browser.findElement(logoutBy).click();
-		OOGraphene.waitElement(LoginPage.loginFormBy, 5, browser);
+		OOGraphene.waitElement(LoginPage.loginFormBy, browser);
 	}
 }
\ No newline at end of file
diff --git a/src/test/java/org/olat/test/ArquillianDeployments.java b/src/test/java/org/olat/test/ArquillianDeployments.java
index a7d6aef88a34f190f69a3a9227184777b56d6667..d94e7e86f9b15bc3ed8344548c25dd155f27c328 100644
--- a/src/test/java/org/olat/test/ArquillianDeployments.java
+++ b/src/test/java/org/olat/test/ArquillianDeployments.java
@@ -50,7 +50,9 @@ public class ArquillianDeployments {
 	public static final String LIB_DIR   = "target/openolat-lms-14.0-SNAPSHOT/WEB-INF/lib";
 
 	public static WebArchive createDeployment() {
-		return createDeployment("openolat.war", new HashMap<>());
+		Map<String,String> overrideProperties = new HashMap<>();
+		overrideProperties.put("ldap.enable", "false");
+		return createDeployment("openolat.war", overrideProperties);
 	}
 	
 	public static WebArchive createDeployment(Map<String,String> overrideProperties) {