diff --git a/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_de.properties
index a79ebeaee7aeaa9e1bbc876065f046a3f401b8d6..11f5564b0525c03adf8e567a7eb395959aad6034 100644
--- a/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_de.properties
@@ -2,11 +2,11 @@
 admin.menu.title=Forum
 admin.menu.title.alt=Konfiguration Forum
 admin.title=Konfiguration Forum
-anonymous.course.default=Default for course forum
-anonymous.default.enabled=Pseudonym enabled
-anonymous.default.disabled=Pseudonym disabled
+anonymous.course.default=Standardeinstellung f\u00FCr Kursforum
+anonymous.default.enabled=Pseudonym aktiviert
+anonymous.default.disabled=Pseudonym deaktiviert
 anonymous.group.default=Default for group forum
-anonymous.posting=Erlaubt anonymous posting using a pseudonym
+anonymous.posting=Anonymes Schreiben mit einem Pseudonym gestatten
 anonymous.poster=Gastbeitrag
 guest=Gast
 guest.suffix=(Gast)
@@ -17,7 +17,7 @@ archive.thread=Diskussionsthema archivieren
 archive.thread.dialog=Wollen Sie dieses Diskussionsthema wirklich in Ihrem pers\u00F6nlichen Ordner im Unterordner "private/archive" archivieren?
 archive.thread.successfully=Das Diskussionsthema wurde in Ihrem pers\u00F6nlichen Ordner im Unterordner "private/archive" archiviert.
 attachments=Dateianh\u00E4nge
-attachments.too.big=Dateianhang ist zu gross. Es sind maximal {0} MB möglich.
+attachments.too.big=Dateianhang ist zu gross. Es sind maximal {0} MB m\u00F6glich.
 attachments.upload.successful=Die Datei {0} wurde erfolgreich hochgeladen. Bei Bedarf können noch weitere Dateien angehängt werden.
 attachments.error.file.exists=Diese Datei existiert bereits und kann nicht erneut hochgeladen werden.
 attachments.remove.string=löschen
diff --git a/src/main/java/org/olat/modules/fo/ui/ThreadListController.java b/src/main/java/org/olat/modules/fo/ui/ThreadListController.java
index 1d0575a6a57228ddb6424ac4271e921518bf0de0..8bc4c0a1f84b02b680defe68afba6ff9acc65a25 100644
--- a/src/main/java/org/olat/modules/fo/ui/ThreadListController.java
+++ b/src/main/java/org/olat/modules/fo/ui/ThreadListController.java
@@ -145,6 +145,7 @@ public class ThreadListController extends FormBasicController {
 		threadTable = uifactory.addTableElement(getWindowControl(), "threads", threadTableModel, getTranslator(), formLayout);
 		threadTable.setCustomizeColumns(false);
 		threadTable.setElementCssClass("o_forum");
+		threadTable.setEmtpyTableMessageKey("forum.emtpy");
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/modules/fo/ui/_content/forum.html b/src/main/java/org/olat/modules/fo/ui/_content/forum.html
index bfe00d39239431f02f8b5a9a5a5a75a07b8d71a5..dd2e3f994c98e98585e379e8a60909502553bcb5 100644
--- a/src/main/java/org/olat/modules/fo/ui/_content/forum.html
+++ b/src/main/java/org/olat/modules/fo/ui/_content/forum.html
@@ -1,4 +1,6 @@
+<div class="o_sel_forum">
 #if($r.available("subscription"))
 	$r.render("subscription")
 #end
-$r.render("forum")
\ No newline at end of file
+$r.render("forum")
+</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/repository/RepositoryModule.java b/src/main/java/org/olat/repository/RepositoryModule.java
index 41555a6135f0556fee03215fdd559849b0449e63..932cad2cc0f54acbb2b0b58d8a796b7a3c128b7b 100644
--- a/src/main/java/org/olat/repository/RepositoryModule.java
+++ b/src/main/java/org/olat/repository/RepositoryModule.java
@@ -97,6 +97,8 @@ public class RepositoryModule extends AbstractSpringModule {
 		
 		NewControllerFactory.getInstance().addContextEntryControllerCreator(CatalogEntry.class.getSimpleName(),
 				new CatalogContextEntryControllerCreator(this));
+		NewControllerFactory.getInstance().addContextEntryControllerCreator("Catalog",
+				new CatalogContextEntryControllerCreator(this));
 		NewControllerFactory.getInstance().addContextEntryControllerCreator("CatalogAdmin",
 				new SiteContextEntryControllerCreator(CatalogAdminSite.class));
 		
diff --git a/src/main/java/org/olat/repository/ui/catalog/CatalogSiteMainController.java b/src/main/java/org/olat/repository/ui/catalog/CatalogSiteMainController.java
index a6f9044e8504eaf4f7c4d4e03afcaefac83166fe..abfc1cd5d108feed9e926527ef64fc900a695574 100644
--- a/src/main/java/org/olat/repository/ui/catalog/CatalogSiteMainController.java
+++ b/src/main/java/org/olat/repository/ui/catalog/CatalogSiteMainController.java
@@ -81,6 +81,13 @@ public class CatalogSiteMainController extends BasicController implements Activa
 			return;
 		}
 		
+		ContextEntry entry = entries.get(0);
+		String type = entry.getOLATResourceable().getResourceableTypeName();
+		if("Catalog".equalsIgnoreCase(type)) {
+			//remove the Catalog/0
+			entries = entries.subList(1, entries.size());
+		}
+		
 		stackPanel.popUpToRootController(ureq);
 		nodeController.activate(ureq, entries, state);
 	}
diff --git a/src/test/java/org/olat/selenium/BusinessGroupTest.java b/src/test/java/org/olat/selenium/BusinessGroupTest.java
index 395967af29508551a86d03953c89c11c51513dc1..c5a65f7f18299d7de4a2d9d2e658280e63655c9e 100644
--- a/src/test/java/org/olat/selenium/BusinessGroupTest.java
+++ b/src/test/java/org/olat/selenium/BusinessGroupTest.java
@@ -80,6 +80,35 @@ public class BusinessGroupTest {
 
 	@Page
 	private NavigationPage navBar;
+	
+	/**
+	 * Create a group, search it and delete it.
+	 * 
+	 * @param loginPage
+	 * @throws IOException
+	 * @throws URISyntaxException
+	 */
+	@Test
+	@RunAsClient
+	public void createDeleteBusinessGroup(@InitialPage LoginPage loginPage)
+	throws IOException, URISyntaxException {
+		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		loginPage
+			.loginAs(author.getLogin(), author.getPassword())
+			.resume();
+		
+		//go to groups
+		String groupName = "Delete-1-" + UUID.randomUUID();
+		navBar
+			.openGroups(browser)
+			.createGroup(groupName, "A very little group to delete");
+		
+		//return to group list and delete it
+		navBar
+			.openGroups(browser)
+			.deleteGroup(groupName)
+			.assertDeleted(groupName);
+	}
 
 	/**
 	 * An author create a group, set the visibility to
diff --git a/src/test/java/org/olat/selenium/CourseTest.java b/src/test/java/org/olat/selenium/CourseTest.java
index 7df3bc831b3861c7bc9d691c0aa857c55f6cc76f..a61441ea48891a77523d561f57589f292efde65e 100644
--- a/src/test/java/org/olat/selenium/CourseTest.java
+++ b/src/test/java/org/olat/selenium/CourseTest.java
@@ -222,6 +222,111 @@ public class CourseTest {
 		}
 	}
 	
+	/**
+	 * An author create a course, add a second user as co-author
+	 * of the course, and edit the course.<br>
+	 * The co-author select the course and try to edit it, unsuccessfully.
+	 * It try to edit the course directly from the author list without
+	 * success.<br>
+	 * The author closes the editor and the co-author is allowed to edit.
+	 * The author cannot edit i anymore...
+	 * 
+	 * @param loginPage Login page of the author
+	 * @param coAuthorBrowser the browser for the coauthor
+	 */
+	@Test
+	@RunAsClient
+	public void concurrentEditCourse(@InitialPage LoginPage loginPage,
+			@Drone @Participant WebDriver coAuthorBrowser)
+	throws IOException, URISyntaxException {
+		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		UserVO coAuthor = new UserRestClient(deploymentUrl).createAuthor();
+		loginPage
+			.loginAs(author.getLogin(), author.getPassword())
+			.resume();
+		
+		//go to authoring
+		AuthoringEnvPage authoringEnv = navBar
+			.assertOnNavigationPage()
+			.openAuthoringEnvironment();
+		
+		String title = "Concurrent-Edit-" + UUID.randomUUID().toString();
+		//create course
+		authoringEnv
+			.openCreateDropDown()
+			.clickCreate(ResourceType.course)
+			.fillCreateForm(title)
+			.assertOnGeneralTab()
+			.clickToolbarBack();
+		//add a second owner
+		MembersPage members = new CoursePageFragment(browser)
+			.members();
+		members
+			.addMember()
+			.searchMember(coAuthor, true)
+			.next()
+			.next()
+			.selectRepositoryEntryRole(true, false, false)
+			.next()
+			.finish();
+		//open the editor
+		CoursePageFragment coursePage = members
+			.clickToolbarBack();
+		CourseEditorPageFragment editor = coursePage
+			.edit();
+		
+		//the second author come in
+		LoginPage coAuthroLoginPage = LoginPage.getLoginPage(coAuthorBrowser, deploymentUrl);
+		coAuthroLoginPage
+			.loginAs(coAuthor.getLogin(), coAuthor.getPassword())
+			.resume();
+	
+		//go to authoring
+		NavigationPage coAuthorNavBar = new NavigationPage(coAuthorBrowser);
+		coAuthorNavBar
+			.assertOnNavigationPage()
+			.openAuthoringEnvironment()
+			.selectResource(title);
+		//try to edit
+		CoursePageFragment coAuthorCourse = new CoursePageFragment(coAuthorBrowser);
+		coAuthorCourse
+			.edit()
+			.assertOnWarning();
+		
+		//retry in list
+		coAuthorNavBar
+			.openAuthoringEnvironment()
+			.editResource(title);
+		new CourseEditorPageFragment(coAuthorBrowser)
+			.assertOnWarning();
+		
+		//author close the course editor
+		editor
+			.clickToolbarBack();
+		coursePage
+			.assertOnCoursePage();
+		
+		//co-author edit the course
+		CourseEditorPageFragment coAuthorEditor = coAuthorCourse
+			.edit()
+			.assertOnEditor();
+		
+		//author try
+		coursePage
+			.edit()
+			.assertOnWarning();
+		
+		//co-author close the editor
+		coAuthorEditor
+			.clickToolbarBack()
+			.assertOnCoursePage();
+		
+		//author reopens the editor
+		coursePage
+			.edit()
+			.assertOnEditor();
+	}
+	
 	/**
 	 * Create a course, create a CP, go the the course editor,
 	 * create a course element of type CP, select the CP which just created,
diff --git a/src/test/java/org/olat/selenium/page/NavigationPage.java b/src/test/java/org/olat/selenium/page/NavigationPage.java
index b6899ac60e46c842129f0709611ff35adb3f32cc..8f78b25c090c529aee271a54949daeedada6ce67 100644
--- a/src/test/java/org/olat/selenium/page/NavigationPage.java
+++ b/src/test/java/org/olat/selenium/page/NavigationPage.java
@@ -80,12 +80,9 @@ public class NavigationPage {
 	
 	public AuthoringEnvPage openAuthoringEnvironment() {
 		navigate(authoringEnvTabBy);
-		
 		backToTheTop();
 		OOGraphene.closeBlueMessageWindow(browser);
-		
-		WebElement main = browser.findElement(By.id("o_main"));
-		return Graphene.createPageFragment(AuthoringEnvPage.class, main);
+		return new AuthoringEnvPage(browser);
 	}
 	
 	public PortalPage openPortal() {
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 c41ce3bbf39a45818c604aeb5fecd1e6e39759cb..a685efef94e197ac9ac8153a2c488353b48bc420 100644
--- a/src/test/java/org/olat/selenium/page/core/FolderPage.java
+++ b/src/test/java/org/olat/selenium/page/core/FolderPage.java
@@ -38,6 +38,8 @@ import org.openqa.selenium.WebElement;
  */
 public class FolderPage {
 	
+	public static final By folderBy = By.cssSelector("div.o_briefcase_folder");
+	
 	@Drone
 	private WebDriver browser;
 	
diff --git a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
index cd92186b6573b21e63993213a00b64cbc1542415..dcb619ab45423cefa71be6dabb7ebc4bae48e7cd 100644
--- a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
@@ -22,7 +22,6 @@ package org.olat.selenium.page.course;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.jboss.arquillian.drone.api.annotation.Drone;
 import org.jboss.arquillian.graphene.Graphene;
 import org.junit.Assert;
 import org.olat.selenium.page.graphene.OOGraphene;
@@ -31,7 +30,6 @@ import org.olat.selenium.page.repository.AuthoringEnvPage;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
-import org.openqa.selenium.support.FindBy;
 
 /**
  * 
@@ -72,20 +70,31 @@ public class CourseEditorPageFragment {
 		chooseRepoEntriesButtonList.add(choosePortfolioButton);
 	}
 	
-	@Drone
 	private WebDriver browser;
 	
-	@FindBy(className="o_course_editor")
-	private WebElement editor;
+	public CourseEditorPageFragment(WebDriver browser) {
+		this.browser = browser;
+	}
 	
 	public static CourseEditorPageFragment getEditor(WebDriver browser) {
 		OOGraphene.waitElement(editorBy, browser);
-		WebElement main = browser.findElement(By.id("o_main"));
-		return Graphene.createPageFragment(CourseEditorPageFragment.class, main);
+		OOGraphene.closeBlueMessageWindow(browser);
+		return new CourseEditorPageFragment(browser);
 	}
 	
 	public CourseEditorPageFragment assertOnEditor() {
-		Assert.assertTrue(editor.isDisplayed());
+		List<WebElement> editorEls = browser.findElements(editorBy);
+		Assert.assertFalse(editorEls.isEmpty());
+		Assert.assertTrue(editorEls.get(0).isDisplayed());
+		return this;
+	}
+	
+	public CourseEditorPageFragment assertOnWarning() {
+		By warningBy = By.cssSelector("div.modal-dialog div.alert.alert-warning");
+		OOGraphene.waitElement(warningBy, 2, browser);
+		List<WebElement> warningEls = browser.findElements(warningBy);
+		Assert.assertFalse(warningEls.isEmpty());
+		OOGraphene.closeModalDialogWindow(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 27837161f916a9d080d75122c852c145c2ba4815..d3d2f75f2dc59cfee8af166fb4cbb78770b60292 100644
--- a/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
@@ -170,9 +170,7 @@ public class CoursePageFragment {
 		browser.findElement(editCourseBy).click();
 		OOGraphene.waitBusy(browser);
 		OOGraphene.closeBlueMessageWindow(browser);
-
-		WebElement main = browser.findElement(By.id("o_main"));
-		return Graphene.createPageFragment(CourseEditorPageFragment.class, main);
+		return new CourseEditorPageFragment(browser);
 	}
 	
 	/**
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 f20069a7c00cb0353d44c1d598a02dba8367b42a..f01f827fafb9dcfeec7e95c790743a4f198a46ac 100644
--- a/src/test/java/org/olat/selenium/page/course/MembersPage.java
+++ b/src/test/java/org/olat/selenium/page/course/MembersPage.java
@@ -111,8 +111,6 @@ public class MembersPage {
 		WebElement submitButton = browser.findElement(submitBy);
 		submitButton.click();
 		OOGraphene.waitBusy(browser);
-		
-		
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/forum/ForumPage.java b/src/test/java/org/olat/selenium/page/forum/ForumPage.java
index df9c1bf2fea63ff4535dfe6adfdb247bd97cc6cf..061084dbbfc028252a2e839cb79c9b08988dfd35 100644
--- a/src/test/java/org/olat/selenium/page/forum/ForumPage.java
+++ b/src/test/java/org/olat/selenium/page/forum/ForumPage.java
@@ -40,6 +40,8 @@ public class ForumPage {
 
 	private WebDriver browser;
 	
+	public static final By threadTableBy = By.cssSelector("div.o_sel_forum");
+	
 	public ForumPage(WebDriver browser) {
 		this.browser = browser;
 	}
@@ -51,7 +53,7 @@ public class ForumPage {
 	 * @return
 	 */
 	public static ForumPage getCourseForumPage(WebDriver browser) {
-		By forumBy = By.cssSelector("div.o_course_run div.o_forum");
+		By forumBy = By.cssSelector("div.o_course_run div.o_sel_forum");
 		List<WebElement> forumEl = browser.findElements(forumBy);
 		Assert.assertFalse(forumEl.isEmpty());
 	
@@ -62,7 +64,7 @@ public class ForumPage {
 	}
 	
 	public static ForumPage getGroupForumPage(WebDriver browser) {
-		By forumBy = By.cssSelector("div.o_forum");
+		By forumBy = By.cssSelector("div.o_sel_forum");
 		List<WebElement> forumEl = browser.findElements(forumBy);
 		Assert.assertFalse(forumEl.isEmpty());
 		return new ForumPage(browser);
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 697ddc6694345a7f30fcb05efff09f227e81eecc..ae6ebcb03aebfb378f7b1ca1df7d79daceb11a9b 100644
--- a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
+++ b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
@@ -47,6 +47,7 @@ public class OOGraphene {
 	private static final long poolingDuration = 25;
 	
 	private static final By closeBlueBoxButtonBy = By.cssSelector("div.o_alert_info div.o_sel_info_message i.o_icon.o_icon_close");
+	private static final By closeModalDialogButtonBy = By.cssSelector("div.modal-dialog div.modal-header button.close");
 	
 	public static void waitBusy(WebDriver browser) {
 		Graphene.waitModel(browser).pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until(new BusyPredicate());
@@ -70,6 +71,8 @@ public class OOGraphene {
 		Graphene.waitModel(browser).pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until().element(element).is().visible();
 	}
 	
+	// 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(5, TimeUnit.SECONDS)
 			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until(new TinyMCELoadedPredicate());
@@ -212,6 +215,33 @@ public class OOGraphene {
 		}
 	}
 	
+	public static final void closeModalDialogWindow(WebDriver browser) {
+		List<WebElement> closeButtons = browser.findElements(closeModalDialogButtonBy);
+		for(WebElement closeButton:closeButtons) {
+			if(closeButton.isDisplayed()) {
+				try {
+					clickModalDialogCloseButton(browser, closeButton);
+				} catch (TimeoutException e) {
+					try {
+						clickModalDialogCloseButton(browser, closeButton);
+					} catch(Exception e2) {
+						//
+					}
+				}
+			}
+		}
+	}
+	
+	private static final void clickModalDialogCloseButton(WebDriver browser, WebElement closeButton) {
+		try {
+			closeButton.click();
+			By dialogBy = By.cssSelector("div.modal-dialog");
+			OOGraphene.waitElementDisappears(dialogBy, 2, browser);
+		} catch (ElementNotVisibleException e) {
+			//e.printStackTrace();
+		}
+	}
+	
 	/*public static void closeOffCanvas(WebDriver browser) {
 		By closeBy = By.cssSelector("a.o_offcanvas_close");
 		List<WebElement> closeButtons = browser.findElements(closeBy);
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 3f170291be11368987f1a6ba2d94372ceec3c7a2..275184c5cee1da0a45eda9d1186f81a4b23b498e 100644
--- a/src/test/java/org/olat/selenium/page/group/GroupPage.java
+++ b/src/test/java/org/olat/selenium/page/group/GroupPage.java
@@ -123,6 +123,7 @@ public class GroupPage {
 	
 	public IMPage openChat() {
 		openMenuItem(chatTool);
+		OOGraphene.waitElement(By.cssSelector("a.o_sel_im_open_tool_chat"), 2, browser);
 		return new IMPage(browser);
 	}
 	
@@ -134,34 +135,42 @@ public class GroupPage {
 	
 	public ContactPage openContact() {
 		openMenuItem(contactTool);
+		OOGraphene.waitElement(By.cssSelector("fieldset.o_sel_contact_form"), 2, browser);
 		return new ContactPage(browser);
 	}
 	
 	public GroupPage openMembers() {
-		return openMenuItem(membersTool);
+		openMenuItem(membersTool);
+		return this;
 	}
 	
 	public GroupPage openNews() {
-		return openMenuItem(newsTool);
+		openMenuItem(newsTool);
+		OOGraphene.waitElement(By.id("o_msg_info"), 2, browser);
+		return this;
 	}
 	
 	public FolderPage openFolder() {
 		openMenuItem(folderTool);
+		OOGraphene.waitElement(FolderPage.folderBy, 2, browser);
 		return new FolderPage(browser);
 	}
 	
 	public ForumPage openForum() {
 		openMenuItem(forumTool);
+		OOGraphene.waitElement(ForumPage.threadTableBy, 2, browser);
 		return ForumPage.getGroupForumPage(browser);
 	}
 	
 	public WikiPage openWiki() {
 		openMenuItem(wikiTool);
+		OOGraphene.waitElement(WikiPage.wikiWrapperBy, 2, browser);
 		return WikiPage.getGroupWiki(browser);
 	}
 	
 	public PortfolioPage openPortfolio() {
 		openMenuItem(portfolioTool);
+		OOGraphene.waitElement(PortfolioPage.mapBy, 2, browser);
 		return new PortfolioPage(browser);
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/group/GroupsPage.java b/src/test/java/org/olat/selenium/page/group/GroupsPage.java
index 5e957027a67bd3d36d3229cc1c868f4534eeae12..40806cc168896ca45228d270ed8a11974efa3f23 100644
--- a/src/test/java/org/olat/selenium/page/group/GroupsPage.java
+++ b/src/test/java/org/olat/selenium/page/group/GroupsPage.java
@@ -140,4 +140,27 @@ public class GroupsPage {
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
+	
+	public GroupsPage deleteGroup(String name) {
+		By groupNameBy = By.xpath("//table//td[//a[text()[contains(.,'" + name+ "')]]]//a[contains(@href,'bgTblDelete')]");
+		browser.findElement(groupNameBy).click();
+		OOGraphene.waitBusy(browser);
+		
+		//wait confirm dialog
+		By popupBy = By.cssSelector("div.modal-dialog");
+		OOGraphene.waitElement(popupBy, 2, browser);
+		
+		By okBy = By.cssSelector("div.modal-dialog button.btn.btn-primary");
+		browser.findElement(okBy).click();
+		OOGraphene.waitBusy(browser);
+		OOGraphene.waitAndCloseBlueMessageWindow(browser);
+		return this;
+	}
+	
+	public GroupsPage assertDeleted(String name) {
+		By groupNameBy = By.xpath("//table//td[//a[text()[contains(.,'" + name+ "')]]]");
+		List<WebElement> groupEls = browser.findElements(groupNameBy);
+		Assert.assertTrue(groupEls.isEmpty());
+		return this;
+	}
 }
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 8259de536752d96bf92b91e8ef0a65afcebb2f74..52fe874735b10e847c2167cb9022c2497f48de09 100644
--- a/src/test/java/org/olat/selenium/page/group/MembersWizardPage.java
+++ b/src/test/java/org/olat/selenium/page/group/MembersWizardPage.java
@@ -108,6 +108,30 @@ public class MembersWizardPage {
 		return this;
 	}
 	
+	public MembersWizardPage selectRepositoryEntryRole(boolean owner, boolean coach, boolean participant) {
+		if(owner) {
+			By ownerBy = By.cssSelector("label input[name='repoRights'][type='checkbox'][value='owner']");
+			WebElement ownerEl = browser.findElement(ownerBy);
+			OOGraphene.check(ownerEl, new Boolean(owner));
+			OOGraphene.waitBusy(browser);
+		}
+		
+		if(coach) {
+			By coachBy = By.cssSelector("label input[name='repoRights'][type='checkbox'][value='tutor']");
+			WebElement coachEl = browser.findElement(coachBy);
+			OOGraphene.check(coachEl, new Boolean(coach));
+			OOGraphene.waitBusy(browser);
+		}
+		
+		if(participant) {
+			By participantBy = By.cssSelector("label input[name='repoRights'][type='checkbox'][value='participant']");
+			WebElement participantEl = browser.findElement(participantBy);
+			OOGraphene.check(participantEl, new Boolean(participant));
+			OOGraphene.waitBusy(browser);
+		}
+		return this;
+	}
+	
 	public MembersWizardPage selectGroupAsParticipant(String groupName) {
 		By rolesBy = By.xpath("//div[contains(@class,'o_table_wrapper')]//table//tr[td[text()='" + groupName + "']]//label[contains(@class,'o_sel_role_participant')]/input");
 		List<WebElement> roleEls = browser.findElements(rolesBy);
diff --git a/src/test/java/org/olat/selenium/page/portfolio/PortfolioPage.java b/src/test/java/org/olat/selenium/page/portfolio/PortfolioPage.java
index 5b3cb26325b18a48723b3f7436e7152adc1cc793..07ff209fc53c7658ac289437e8e7d61e4723acdd 100644
--- a/src/test/java/org/olat/selenium/page/portfolio/PortfolioPage.java
+++ b/src/test/java/org/olat/selenium/page/portfolio/PortfolioPage.java
@@ -38,6 +38,8 @@ import org.openqa.selenium.WebElement;
  */
 public class PortfolioPage {
 	
+	public static final By mapBy = By.cssSelector("div.o_eportfolio_map");
+	
 	@Drone
 	private WebDriver browser;
 	
@@ -244,11 +246,11 @@ public class PortfolioPage {
 	}
 	
 	public PortfolioPage openMap(String mapTitle) {
-		By mapBy = By.cssSelector("div.o_eportfolio_maps div.o_map-default");
+		By defaultMapBy = By.cssSelector("div.o_eportfolio_maps div.o_map-default");
 		By headingBy = By.cssSelector("div.panel-heading h4");
 		By openBy = By.className("o_sel_ep_open_map");
 		
-		List<WebElement> mapEls = browser.findElements(mapBy);
+		List<WebElement> mapEls = browser.findElements(defaultMapBy);
 		WebElement mapEl = null;
 		for(WebElement el:mapEls) {
 			WebElement headingEl = el.findElement(headingBy);
diff --git a/src/test/java/org/olat/selenium/page/repository/AuthoringEnvPage.java b/src/test/java/org/olat/selenium/page/repository/AuthoringEnvPage.java
index e013b43d8b3782898947d39cddc0c4f56c17faab..1d7769989cbc3038084fc8db6ff9426cd594aad2 100644
--- a/src/test/java/org/olat/selenium/page/repository/AuthoringEnvPage.java
+++ b/src/test/java/org/olat/selenium/page/repository/AuthoringEnvPage.java
@@ -21,7 +21,6 @@ package org.olat.selenium.page.repository;
 
 import java.io.File;
 
-import org.jboss.arquillian.drone.api.annotation.Drone;
 import org.jboss.arquillian.graphene.Graphene;
 import org.junit.Assert;
 import org.olat.selenium.page.course.CourseWizardPage;
@@ -47,9 +46,12 @@ public class AuthoringEnvPage {
 	public static final By createMenuCaretBy = By.cssSelector("a.o_sel_author_create");
 	public static final By createMenuBy = By.cssSelector("ul.o_sel_author_create");
 	
-	@Drone
 	private WebDriver browser;
 	
+	public AuthoringEnvPage(WebDriver browser) {
+		this.browser = browser;
+	}
+	
 	public RepositoryEditDescriptionPage createCP(String title) {
 		return openCreateDropDown()
 			.clickCreate(ResourceType.cp)
@@ -166,10 +168,21 @@ public class AuthoringEnvPage {
 		WebElement saveButton = browser.findElement(saveBy);
 		saveButton.click();
 		OOGraphene.waitBusy(browser);
-
 		return this;
 	}
 	
+	public void selectResource(String title) {
+		By selectBy = By.xpath("//div[contains(@class,'o_coursetable')]//a[contains(text(),'" + title + "')]");
+		browser.findElement(selectBy).click();
+		OOGraphene.waitBusy(browser);
+	}
+	
+	public void editResource(String title) {
+		By editBy = By.xpath("//div[contains(@class,'o_coursetable')]//tr[//a[contains(text(),'" + title + "')]]//a[contains(@href,'edit')]");
+		browser.findElement(editBy).click();
+		OOGraphene.waitBusy(browser);
+	}
+	
 	public enum ResourceType {
 		course("CourseModule"),
 		cp("FileResource.IMSCP"),
diff --git a/src/test/java/org/olat/selenium/page/repository/CPPage.java b/src/test/java/org/olat/selenium/page/repository/CPPage.java
index 42b7269ff2c48cda0ad83d2fd90363b256996816..61bd1eb6cbc8fde223218d284e0acf5d78ed4c13 100644
--- a/src/test/java/org/olat/selenium/page/repository/CPPage.java
+++ b/src/test/java/org/olat/selenium/page/repository/CPPage.java
@@ -50,6 +50,7 @@ public class CPPage {
 		List<WebElement> iframes = browser.findElements(iframeBy);
 		browser = browser.switchTo().frame(iframes.get(0));
 		
+		OOGraphene.waitElement(by, 5, browser);
 		List<WebElement> elements = browser.findElements(by);
 		Assert.assertFalse(elements.isEmpty());
 		
diff --git a/src/test/java/org/olat/selenium/page/wiki/WikiPage.java b/src/test/java/org/olat/selenium/page/wiki/WikiPage.java
index 229ef340e91548f1e33186ee1edd0bc7b6556920..aff212c345d33fb2dda31369db2104e391400a89 100644
--- a/src/test/java/org/olat/selenium/page/wiki/WikiPage.java
+++ b/src/test/java/org/olat/selenium/page/wiki/WikiPage.java
@@ -40,6 +40,8 @@ import org.openqa.selenium.WebElement;
  */
 public class WikiPage {
 	
+	public static final By wikiWrapperBy = By.cssSelector("div.o_wiki_wrapper");
+	
 	@Drone
 	private WebDriver browser;