diff --git a/src/test/java/org/olat/login/FunctionalResumeTest.java b/src/test/java/org/olat/login/FunctionalResumeTest.java
index 11c0939e644735ba8f977e1cabaf19d37319a5b4..c9ae29a14808d4dc5a7bc246eebde62c55c872f8 100644
--- a/src/test/java/org/olat/login/FunctionalResumeTest.java
+++ b/src/test/java/org/olat/login/FunctionalResumeTest.java
@@ -33,6 +33,7 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.olat.restapi.support.vo.CourseVO;
 import org.olat.restapi.support.vo.RepositoryEntryVO;
 import org.olat.test.ArquillianDeployments;
 import org.olat.util.FunctionalHomeSiteUtil;
@@ -80,14 +81,14 @@ public class FunctionalResumeTest {
 	@RunAsClient
 	public void checkResume() throws IOException, URISyntaxException{	
 		/* deploy course with rest */
-		RepositoryEntryVO repositoryEntry = functionalVOUtil.importAllElementsCourseCourse(deploymentUrl);
+		CourseVO course = functionalVOUtil.importAllElementsCourse(deploymentUrl);
 		
 		/* create xpath to check if course is open */
 		StringBuffer selectorBuffer = new StringBuffer();
 		
 		selectorBuffer.append("xpath=//li[@class='b_nav_tab b_nav_active b_resource_CourseModule'")
 		.append("//a[@title='")
-		.append(repositoryEntry.getDisplayname())
+		.append(functionalVOUtil.getAllElementsCourseDisplayname())
 		.append("']");
 		
 		String courseXPath = selectorBuffer.toString();
@@ -100,7 +101,7 @@ public class FunctionalResumeTest {
 		
 		/* open course and check if it's open */
 		Assert.assertTrue(functionalUtil.openSite(browser, OlatSite.LEARNING_RESOURCES));
-		Assert.assertTrue(functionalResourcesSiteUtil.openCourse(browser, repositoryEntry.getResourceableId()));
+		Assert.assertTrue(functionalResourcesSiteUtil.openCourse(browser, course.getRepoEntryKey()));
 
 		Assert.assertTrue(browser.isElementPresent(courseXPath));
 		
diff --git a/src/test/java/org/olat/portal/FunctionalSettingsTest.java b/src/test/java/org/olat/portal/FunctionalSettingsTest.java
index f931e3ba1c18f5c3ae724f245b6e59085fae60c7..5606cd4be97d0753e87b077b54136fcdf59a95d6 100644
--- a/src/test/java/org/olat/portal/FunctionalSettingsTest.java
+++ b/src/test/java/org/olat/portal/FunctionalSettingsTest.java
@@ -68,6 +68,8 @@ public class FunctionalSettingsTest {
 	FunctionalUtil functionalUtil;
 	FunctionalVOUtil functionalVOUtil;
 	FunctionalHomeSiteUtil functionalHomeSiteUtil;
+	
+	int portalColumnCount;
 
 	@Before
 	public void setup(){
@@ -76,6 +78,8 @@ public class FunctionalSettingsTest {
 		
 		functionalVOUtil = new FunctionalVOUtil(functionalUtil.getUsername(), functionalUtil.getPassword());
 		functionalHomeSiteUtil = new FunctionalHomeSiteUtil(functionalUtil);
+		
+		portalColumnCount = 2;
 	}
 	
 	@Test
@@ -86,40 +90,61 @@ public class FunctionalSettingsTest {
 		
 		/* login for test setup */
 		Assert.assertTrue(functionalUtil.login(browser));
-		Thread.sleep(5000);
+		//Thread.sleep(5000);
 		
 		/* reset settings */
 		Assert.assertTrue(functionalHomeSiteUtil.resetSettings(browser));
-		Thread.sleep(5000);
+		//Thread.sleep(10000);
+		
+		//TODO:JK: check if still logged in
 		
 		/* set language */
 		functionalHomeSiteUtil.selectLanguage(browser, FunctionalHomeSiteUtil.GERMAN_LANGUAGE_VALUE);
-		Thread.sleep(10000);
+		//Thread.sleep(10000);
 		
 		/* resume off */
 		functionalHomeSiteUtil.disableResume(browser);
 		
 		/* logout */
 		Assert.assertTrue(functionalUtil.logout(browser));
-		Thread.sleep(5000);
+		//Thread.sleep(5000);
 		
 		/* login for test case */
 		Assert.assertTrue(functionalUtil.login(browser));
 		
 		/* click configure */
 		functionalHomeSiteUtil.beginEditingPortal(browser);
-		Thread.sleep(5000);
+		//Thread.sleep(5000);
 		
 		/* de-/activate portlets */
-		functionalHomeSiteUtil.deactivatePortlet(browser, functionalHomeSiteUtil.getPortletEffCss());
-		functionalHomeSiteUtil.activatePortlet(browser, functionalHomeSiteUtil.getPortletNotesCss());
+		if(functionalHomeSiteUtil.deactivatePortlet(browser, functionalHomeSiteUtil.getPortletEffCss())){
+			Assert.assertFalse(functionalHomeSiteUtil.checkPortletActive(browser, functionalHomeSiteUtil.getPortletEffCss()));
+		}
 		
-		functionalHomeSiteUtil.movePortlet(browser, functionalHomeSiteUtil.getPortletDykCss(), FunctionalHomeSiteUtil.Direction.UP);
-		functionalHomeSiteUtil.movePortlet(browser, functionalHomeSiteUtil.getPortletNotiCss(), FunctionalHomeSiteUtil.Direction.LEFT);
+		if(functionalHomeSiteUtil.activatePortlet(browser, functionalHomeSiteUtil.getPortletNotesCss())){
+			Assert.assertTrue(functionalHomeSiteUtil.checkPortletActive(browser, functionalHomeSiteUtil.getPortletNotesCss()));
+		}
 		
-		functionalHomeSiteUtil.endEditingPortal(browser);
+		/* move portlets */
+		int oldPositionDyk[] = functionalHomeSiteUtil.findPortletPosition(browser, functionalHomeSiteUtil.getPortletDykCss(), portalColumnCount);
+		
+		if(functionalHomeSiteUtil.movePortlet(browser, functionalHomeSiteUtil.getPortletDykCss(), FunctionalHomeSiteUtil.Direction.UP)){
+			browser.refresh();
+			int newPosition[] = functionalHomeSiteUtil.findPortletPosition(browser, functionalHomeSiteUtil.getPortletDykCss(), portalColumnCount);
+			
+			Assert.assertEquals(oldPositionDyk[1], newPosition[1] + 1);
+		}
 		
-		//TODO:JK: do something fancy to test the result
+		int oldPositionNoti[] = functionalHomeSiteUtil.findPortletPosition(browser, functionalHomeSiteUtil.getPortletNotiCss(), portalColumnCount);
+		
+		if(functionalHomeSiteUtil.movePortlet(browser, functionalHomeSiteUtil.getPortletNotiCss(), FunctionalHomeSiteUtil.Direction.LEFT)){
+			int newPosition[] = functionalHomeSiteUtil.findPortletPosition(browser, functionalHomeSiteUtil.getPortletNotiCss(), portalColumnCount);
+
+			Assert.assertEquals(oldPositionNoti[0] - 1, newPosition[0]);
+		}
+		
+		/* end editing portal */
+		functionalHomeSiteUtil.endEditingPortal(browser);
 		
 		/* edit settings */
 		functionalHomeSiteUtil.openActionByMenuTree(browser, FunctionalHomeSiteUtil.HomeSiteAction.SETTINGS);
diff --git a/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java b/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java
index a11037a4ddfa23b401f140c9a78662f9a832d541..b2c38d54bf1c68a4def56d4cba6ebcb606e747d2 100644
--- a/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java
+++ b/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java
@@ -34,6 +34,7 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.olat.restapi.support.vo.CourseVO;
 import org.olat.restapi.support.vo.RepositoryEntryVO;
 import org.olat.test.ArquillianDeployments;
 import org.olat.user.restapi.UserVO;
@@ -85,14 +86,14 @@ public class FunctionalArtefactTest {
 		String password = userVO.get(0).getPassword();
 		
 		/* deploy course with REST */
-		RepositoryEntryVO repositoryEntry = functionalVOUtil.importAllElementsCourseCourse(deploymentUrl);
+		CourseVO repositoryEntry = functionalVOUtil.importAllElementsCourse(deploymentUrl);
 		
 		/* login for test setup */
 		Assert.assertTrue(functionalUtil.login(browser, username, password, true));
 		
 		/* open course and check if it's open */
 		Assert.assertTrue(functionalUtil.openSite(browser, OlatSite.LEARNING_RESOURCES));
-		Assert.assertTrue(functionalResourcesSiteUtil.openCourse(browser, repositoryEntry.getResourceableId()));
+		Assert.assertTrue(functionalResourcesSiteUtil.openCourse(browser, repositoryEntry.getRepoEntryKey()));
 		
 		//TODO:JK: implement me
 	}
diff --git a/src/test/java/org/olat/util/FunctionalHomeSiteUtil.java b/src/test/java/org/olat/util/FunctionalHomeSiteUtil.java
index f998b1b2c3e0d4975b98d319efc2c85fb9b4f8de..5022f31bc9030f807c9c0c49907deec1679c0312 100644
--- a/src/test/java/org/olat/util/FunctionalHomeSiteUtil.java
+++ b/src/test/java/org/olat/util/FunctionalHomeSiteUtil.java
@@ -19,7 +19,18 @@
  */
 package org.olat.util;
 
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.Calendar;
+
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.exception.ParseErrorException;
+import org.apache.velocity.exception.ResourceNotFoundException;
 import org.junit.Assert;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
 import org.olat.util.FunctionalUtil.OlatSite;
 
 import com.thoughtworks.selenium.Selenium;
@@ -29,12 +40,13 @@ import com.thoughtworks.selenium.Selenium;
  * @author jkraehemann, joel.kraehemann@frentix.com, frentix.com
  */
 public class FunctionalHomeSiteUtil {
+	private final static OLog log = Tracing.createLoggerFor(FunctionalHomeSiteUtil.class);
 	
 	public final static String HOME_SITE_MENU_TREE_SELECTED_CSS = "b_tree_selected";
-	
+
 	public final static String FORM_ELEMENT_WRAPPER = "b_form_element_wrapper";
 	public final static String CLEARFIX = "b_clearfix";
-	
+
 	/* menu tree */
 	public final static String HOME_ACTION_PORTAL_CSS = "o_sel_portal";
 	public final static String HOME_ACTION_SETTINGS_CSS = "o_sel_mysettings";
@@ -44,24 +56,25 @@ public class FunctionalHomeSiteUtil {
 	public final static String HOME_ACTION_PERSONAL_FOLDER_CSS = "o_sel_userfolder";
 	public final static String HOME_ACTION_NOTES_CSS = "o_sel_notelist";
 	public final static String HOME_ACTION_EVIDENCES_OF_ACHIEVEMENT_CSS = "o_sel_effstatements";
-	
+
 	public final static String EPORTFOLIO_ACTION_MY_ARTIFACTS_CSS = "o_sel_EPArtefacts";
 	public final static String EPORTFOLIO_ACTION_MY_BINDERS_CSS = "o_sel_EPMaps";
 	public final static String EPORTFOLIO_ACTION_MY_PORTFOLIO_TASKS_CSS = "o_sel_EPStructuredMaps";
 	public final static String EPORTFOLIO_ACTION_RELEASED_BINDERS_CSS = "o_sel_EPSharedMaps";
-	
+
 	/* portal */
 	public final static String PORTAL_EDIT_LINK_CSS = "o_home_portaleditlink";
-	
+
 	public final static String PORTAL_WRAPPER_CSS = "b_portal_wrapper";
+	public final static String PORTAL_CSS = "b_portal";
 	public final static String PORTAL_COLUMN_CSS_PREFIX = "o_sel_portal_col_";
 	public final static String PORTAL_SUBCOLUMNS_CSS = "b_subcolumns";
 	public final static String PORTAL_INACTIVE_CSS = "b_portal_inactive";
-	
+
 	public final static String PORTLET_CSS = "b_portlet";
 	public final static String PORTLET_EDIT_CSS = "b_portlet_edit";
 	public final static String PORTLET_INACTIVE_CSS = "b_portlet_incactive";
-	
+
 	public final static String PORTLET_QUICKSTART_CSS = "o_portlet_quickstart";
 	public final static String PORTLET_REPOSITORY_STUDENT_CSS = "o_portlet_repository_student";
 	public final static String PORTLET_REPOSITORY_TEACHER_CSS = "o_portlet_repository_teacher";
@@ -72,71 +85,71 @@ public class FunctionalHomeSiteUtil {
 	public final static String PORTLET_NOTI_CSS = "o_portlet_noti";
 	public final static String PORTLET_EFF_CSS = "o_portlet_eff";
 	public final static String PORTLET_NOTES_CSS = "o_portlet_notes";
-	public final static String PORTLET_DYK_CSS = "o_portlet_dyk";
-	
+	public final static String PORTLET_DYK_CSS = "b_portlet_dyk";
+
 	public final static String PORTLET_MOVE_LEFT_CSS = "b_portlet_edit_left";
 	public final static String PORTLET_MOVE_RIGHT_CSS = "b_portlet_edit_right";
 	public final static String PORTLET_MOVE_UPWARDS_CSS = "b_portlet_edit_up";
 	public final static String PORTLET_MOVE_DOWNWARDS_CSS = "b_portlet_edit_down";
 	public final static String PORTLET_EDIT_INACTIVATE_CSS = "b_portlet_edit_delete";
 	public final static String PORTLET_EDIT_ACTIVATE_CSS = "b_portlet_add";
-	
+
 	/* General System Settings */
 	public final static String PREFS_BUTTONS_CSS = "o_sel_home_settings_prefs_buttons";
-	
+
 	public final static String LANGUAGE_OPTIONS_ID = "o_fioform_language_SELBOX";
-	
+
 	public final static String GERMAN_LANGUAGE_VALUE = "de";
 	public final static String ENGLISH_LANGUAGE_VALUE = "en";
 	public final static String FRENCH_LANGUAGE_VALUE = "fr";
 	public final static String SPANISH_LANGUAGE_VALUE = "es";
 	public final static String ITALIAN_LANGUAGE_VALUE = "it";
-	
+
 	/* Specific System Settings */
 	public final static String GUI_BUTTONS_CSS = "o_sel_home_settings_gui_buttons";
-	
+
 	public final static String ACCESSIBILITY_CSS = "o_sel_home_settings_accessibility";
 	public final static String RESUME_LAST_SESSION_CSS = "o_sel_home_settings_resume";
 	public final static String SUPPORT_FOR_BROWSER_BACK_CSS = "o_sel_home_settings_back_enabling";
-	
+
 	public final static String NO_VALUE = "none";
 	public final static String YES_AUTOMATICALLY_VALUE = "auto";
 	public final static String YES_ON_REQUEST_VALUE = "request";
-	
+
 	public final static String OFF_VALUE = "no";
 	public final static String ON_VALUE = "yes";
-	
+
 	/* Reset Configurations */
 	public final static String SYSPREFS_BUTTONS_CSS = "o_sel_home_settings_reset_sysprefs_buttons";
-	
+
 	public final static String CONFIGURATIONS_CSS = "o_sel_home_settings_reset_sysprefs";
-	
+
 	public final static String GUI_PREFERENCES_VALUE = "guiprefs";
 	public final static String SYS_PREFERENCES_VALUE = "sysprefs";
 	public final static String RESUME_VALUE = "resume";
-	
+
 	/* password tab */
 	//TODO:JK: add CSS classes to olat
 	public final static String OLD_PASSWORD_CSS = "";
 	public final static String NEW_PASSWORD_CSS = "";
 	public final static String CONFIRM_PASSWORD_CSS = "";
-	
+
 	public enum PortalSettingsForms {
 		GENERAL_SYSTEM_SETTINGS,
 		SPECIFIC_SYSTEM_SETTINGS,
 		RESET_CONFIGURATIONS;
-		
+
 		public enum SpecificSystemSettingsRadios {
 			ACCESSIBILITY(ACCESSIBILITY_CSS),
 			RESUME_LAST_SESSION(RESUME_LAST_SESSION_CSS),	
 			SUPPORT_FOR_BROWSER_BACK(SUPPORT_FOR_BROWSER_BACK_CSS);
-			
+
 			private String groupCss;
-			
+
 			SpecificSystemSettingsRadios(String groupCss){
 				setGroupCss(groupCss);
 			}
-			
+
 			public String getGroupCss() {
 				return groupCss;
 			}
@@ -149,9 +162,9 @@ public class FunctionalHomeSiteUtil {
 				NO(NO_VALUE),
 				YES_AUTOMATICALLY(YES_AUTOMATICALLY_VALUE),
 				YES_ON_REQUEST(YES_ON_REQUEST_VALUE);
-				
+
 				private String valueAttribute;
-				
+
 				ResumeLastSession(String valueAttribute){
 					setValueAttribute(valueAttribute);
 				}
@@ -164,13 +177,13 @@ public class FunctionalHomeSiteUtil {
 					this.valueAttribute = valueAttribute;
 				}
 			}
-			
+
 			public enum SupportForBrowserBack {
 				ON(ON_VALUE),
 				OFF(OFF_VALUE);
-				
+
 				private String valueAttribute;
-				
+
 				SupportForBrowserBack(String valueAttribute){
 					setValueAttribute(valueAttribute);
 				}
@@ -184,17 +197,17 @@ public class FunctionalHomeSiteUtil {
 				}
 			}
 		}
-		
+
 
 		public enum ResetConfigurations{
 			Configurations(CONFIGURATIONS_CSS);
-			
+
 			private String groupCss;
-			
+
 			ResetConfigurations(String groupCss){
 				setGroupCss(groupCss);
 			}
-			
+
 			public String getGroupCss() {
 				return groupCss;
 			}
@@ -207,14 +220,14 @@ public class FunctionalHomeSiteUtil {
 				GUI_PREFERENCES(GUI_PREFERENCES_VALUE),
 				SYS_PREFERENCES(SYS_PREFERENCES_VALUE),
 				RESUME(RESUME_VALUE);
-				
+
 				private String valueAttribute;
 
 				ConfigurationsCheckboxes (String valueAttribute){
 					setValueAttribute(valueAttribute);
 				}
-				
-				
+
+
 				public String getValueAttribute() {
 					return valueAttribute;
 				}
@@ -225,7 +238,7 @@ public class FunctionalHomeSiteUtil {
 			}
 		}
 	}
-	
+
 	public enum HomeSiteAction {
 		PORTAL,
 		SETTINGS,
@@ -237,14 +250,14 @@ public class FunctionalHomeSiteUtil {
 		EVIDENCES_OF_ACHIEVEMENT,
 		OTHER_USERS, /* no corresponding CSS class available */
 	};
-	
+
 	public enum EPortfolioAction {
 		MY_ARTIFACTS,
 		MY_BINDERS,
 		MY_PORTFOLIO_TASKS,
 		RELEASED_BINDERS,
 	};
-	
+
 	public enum Direction {
 		UP,
 		DOWN,
@@ -259,11 +272,11 @@ public class FunctionalHomeSiteUtil {
 		WEB_DAV,
 		TERMS_OF_USE;
 	}
-	
+
 	private FunctionalUtil functionalUtil;
-	
+
 	private String homeActionNavigationSelectedCss;
-	
+
 	private String homeActionPortalCss;
 	private String homeActionSettingsCss;
 	private String homeActionCalendarCss;
@@ -277,17 +290,18 @@ public class FunctionalHomeSiteUtil {
 	private String ePortfolioActionMyBindersCss;
 	private String ePortfolioActionMyPortfolioTasksCss;
 	private String ePortfolioActionReleasedBindersCss;
-	
+
 	private String portalEditLinkCss;
 	private String portalWrapperCss;
+	private String portalCss;
 	private String portalColumnCssPrefix;
 	private String portalSubcolumnsCss;
 	private String portalInactiveCss;
-	
+
 	private String portletCss;
 	private String portletEditCss;
 	private String portletInactiveCss;
-	
+
 	private String portletQuickstartCss;
 	private String portletRepositoryStudentCss;
 	private String portletRepositoryTeacherCss;
@@ -299,14 +313,14 @@ public class FunctionalHomeSiteUtil {
 	private String portletEffCss;
 	private String portletNotesCss;
 	private String portletDykCss;
-	
+
 	private String portletActivateCss;
 	private String portletInactivateCss;
 	private String portletMoveLeftCss;
 	private String portletMoveRightCss;
 	private String portletMoveUpCss;
 	private String portletMoveDownCss;
-	
+
 	private String prefsButtonsCss;
 	private String guiButtonsCss;
 	private String sysprefsButtonsCss;
@@ -314,7 +328,7 @@ public class FunctionalHomeSiteUtil {
 	private String oldPasswordCss;
 	private String newPasswordCss;
 	private String confirmPasswordCss;
-	
+
 	/**
 	 * @param functionalUtil
 	 * 
@@ -322,9 +336,9 @@ public class FunctionalHomeSiteUtil {
 	 */
 	public FunctionalHomeSiteUtil(FunctionalUtil functionalUtil){
 		setUtil(functionalUtil);
-		
+
 		setHomeActionNavigationSelectedCss(HOME_SITE_MENU_TREE_SELECTED_CSS);
-		
+
 		setHomeActionPortalCss(HOME_ACTION_PORTAL_CSS);
 		setHomeActionSettingsCss(HOME_ACTION_SETTINGS_CSS);
 		setHomeActionCalendarCss(HOME_ACTION_CALENDAR_CSS);
@@ -333,21 +347,22 @@ public class FunctionalHomeSiteUtil {
 		setHomeActionPersonalFolderCss(HOME_ACTION_PERSONAL_FOLDER_CSS);
 		setHomeActionNotesCss(HOME_ACTION_NOTES_CSS);
 		setHomeActionEvidencesOfAchievementCss(HOME_ACTION_EVIDENCES_OF_ACHIEVEMENT_CSS);
-		
+
 		setEPortfolioActionMyArtifactsCss(EPORTFOLIO_ACTION_MY_ARTIFACTS_CSS);
 		setEPortfolioActionMyBindersCss(EPORTFOLIO_ACTION_MY_BINDERS_CSS);
 		setEPortfolioActionMyPortfolioTasksCss(EPORTFOLIO_ACTION_MY_PORTFOLIO_TASKS_CSS);
 		setEPortfolioActionReleasedBindersCss(EPORTFOLIO_ACTION_RELEASED_BINDERS_CSS);
-		
+
 		setPortalEditLinkCss(PORTAL_EDIT_LINK_CSS);
 		setPortalWrapperCss(PORTAL_WRAPPER_CSS);
+		setPortalCss(PORTAL_CSS);
 		setPortalColumnCssPrefix(PORTAL_COLUMN_CSS_PREFIX);
 		setPortalSubcolumnsCss(PORTAL_SUBCOLUMNS_CSS);
-		
+
 		setPortletCss(PORTLET_CSS);
 		setPortletEditCss(PORTLET_EDIT_CSS);
 		setPortletInactiveCss(PORTLET_INACTIVE_CSS);
-		
+
 		setPortletQuickstartCss(PORTLET_QUICKSTART_CSS);
 		setPortletRepositoryStudentCss(PORTLET_REPOSITORY_STUDENT_CSS);
 		setPortletRepositoryTeacherCss(PORTLET_REPOSITORY_TEACHER_CSS);
@@ -359,23 +374,23 @@ public class FunctionalHomeSiteUtil {
 		setPortletEffCss(PORTLET_EFF_CSS);
 		setPortletNotesCss(PORTLET_NOTES_CSS);
 		setPortletDykCss(PORTLET_DYK_CSS);
-		
+
 		setPortletActivateCss(PORTLET_EDIT_ACTIVATE_CSS);
 		setPortletInactivateCss(PORTLET_EDIT_INACTIVATE_CSS);
 		setPortletMoveLeftCss(PORTLET_MOVE_LEFT_CSS);
 		setPortletMoveRightCss(PORTLET_MOVE_RIGHT_CSS);
 		setPortletMoveUpCss(PORTLET_MOVE_UPWARDS_CSS);
 		setPortletMoveDownCss(PORTLET_MOVE_DOWNWARDS_CSS);
-		
+
 		setPrefsButtonsCss(FORM_ELEMENT_WRAPPER + " " + PREFS_BUTTONS_CSS + " " + CLEARFIX);
 		setGuiButtonsCss(FORM_ELEMENT_WRAPPER + " " + GUI_BUTTONS_CSS + " " + CLEARFIX);
 		setSysprefsButtonsCss(FORM_ELEMENT_WRAPPER + " " + SYSPREFS_BUTTONS_CSS + " " + CLEARFIX);
-		
+
 		setOldPasswordCss(OLD_PASSWORD_CSS);
 		setNewPasswordCss(NEW_PASSWORD_CSS);
 		setConfirmPasswordCss(CONFIRM_PASSWORD_CSS);
 	}
-	
+
 	/**
 	 * @param page
 	 * @return the matching CSS class
@@ -385,7 +400,7 @@ public class FunctionalHomeSiteUtil {
 	public String findCssClassOfAction(Object page){
 		if(page == null)
 			return(null);
-		
+
 		String selectedCss = null;
 
 		if(page instanceof HomeSiteAction){
@@ -453,10 +468,10 @@ public class FunctionalHomeSiteUtil {
 			}
 			}
 		}
-		
+
 		return(selectedCss);
 	}
-	
+
 	/**
 	 * @param browser
 	 * @param action
@@ -465,26 +480,46 @@ public class FunctionalHomeSiteUtil {
 	 * Check if the correct page is open.
 	 */
 	public boolean checkCurrentAction(Selenium browser, Object action){
+		return(checkCurrentAction(browser, action, -1));
+	}
+
+	public boolean checkCurrentAction(Selenium browser, Object action, long timeout){
 		String selectedCss = findCssClassOfAction(action);
-		
+
 		if(selectedCss == null)
 			return(false);
-		
+
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("css=ul li.")
 		.append(selectedCss)
 		.append('.')
 		.append(getHomeActionNavigationSelectedCss())
 		.append(" * a");
-		
-		if(browser.isElementPresent(selectorBuffer.toString())){
-			return(true);
-		}else{
-			return(false);
-		}
+
+		long timeElapsed = 0;
+		long startTime = Calendar.getInstance().getTimeInMillis();
+
+		do{
+			if(browser.isElementPresent(selectorBuffer.toString())){
+				return(true);
+			}
+
+			if(timeout != -1){
+				try {
+					Thread.sleep(100);
+				} catch (InterruptedException e) {
+					//TODO:JK: Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+
+			timeElapsed = Calendar.getInstance().getTimeInMillis() - startTime;
+		}while(timeElapsed <= timeout && timeout != -1);
+
+		return(false);
 	}
-	
+
 	/**
 	 * @param browser
 	 * @param action
@@ -494,22 +529,23 @@ public class FunctionalHomeSiteUtil {
 	 */
 	public boolean openActionByMenuTree(Selenium browser, Object action){
 		String selectedCss = findCssClassOfAction(action);
-		
+
 		if(selectedCss == null){
 			return(false);
 		}
-		
-		if(!checkCurrentAction(browser, action)){
+
+		if(!checkCurrentAction(browser, action, 15000)){
 			StringBuffer selectorBuffer = new StringBuffer();
-			
+
 			selectorBuffer.append("css=ul .")
 			.append(selectedCss)
-			.append(" * a");
-			
+			.append(" a");
+
 			browser.click(selectorBuffer.toString());
 			browser.waitForPageToLoad(functionalUtil.getWaitLimit());
+			functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
 		}
-		
+
 		return(true);
 	}
 
@@ -522,21 +558,21 @@ public class FunctionalHomeSiteUtil {
 		if(!functionalUtil.checkCurrentSite(browser, OlatSite.HOME)){
 			functionalUtil.openSite(browser, OlatSite.HOME);
 		}
-		
+
 		/* goto home site */
 		Assert.assertTrue(openActionByMenuTree(browser, HomeSiteAction.PORTAL));
 		Assert.assertTrue(checkCurrentAction(browser, HomeSiteAction.PORTAL));
-		
+
 		/* begin editing */
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("css=.")
 		.append(PORTAL_EDIT_LINK_CSS)
 		.append(" * a");
-		
+
 		browser.click(selectorBuffer.toString());
 	}
-	
+
 	/**
 	 * @param browser
 	 * 
@@ -546,18 +582,18 @@ public class FunctionalHomeSiteUtil {
 		if(!functionalUtil.checkCurrentSite(browser, OlatSite.HOME)){
 			functionalUtil.openSite(browser, OlatSite.HOME);
 		}
-		
+
 		/* goto home site */
 		Assert.assertTrue(openActionByMenuTree(browser, HomeSiteAction.PORTAL));
 		Assert.assertTrue(checkCurrentAction(browser, HomeSiteAction.PORTAL));
-		
+
 		/* end editing */
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("css=.")
 		.append(PORTAL_EDIT_LINK_CSS)
 		.append(" * a");
-		
+
 		browser.click(selectorBuffer.toString());
 	}
 
@@ -569,11 +605,44 @@ public class FunctionalHomeSiteUtil {
 	 * Check the state of a portlet.
 	 */
 	public boolean checkPortletActive(Selenium browser, String portletCss){
-		//TODO:JK: implement me
-		
-		return(false);
+		StringBuffer selectorBuffer = new StringBuffer();
+
+		selectorBuffer.append("xpath=//div[@class='")
+		.append(getPortalCss())
+		.append(' ')
+		.append(getPortalSubcolumnsCss())
+		.append("']//div[@class='")
+		.append(getPortletCss())
+		.append(' ')
+		.append(portletCss)
+		.append("']");
+
+		if(browser.isElementPresent(selectorBuffer.toString())){
+			return(true);
+		}else{
+			/* selector of editing portlets */
+			selectorBuffer = new StringBuffer();
+
+			selectorBuffer.append("xpath=//div[@class='")
+			.append(getPortalCss())
+			.append(' ')
+			.append(getPortalSubcolumnsCss())
+			.append("']//div[@class='")
+			.append(getPortletCss())
+			.append(' ')
+			.append(getPortletEditCss())
+			.append(' ')
+			.append(portletCss)
+			.append("']");
+
+			if(browser.isElementPresent(selectorBuffer.toString())){
+				return(true);
+			}else{
+				return(false);
+			}
+		}
 	}
-	
+
 	/**
 	 * @param browser
 	 * @param portletCss
@@ -584,13 +653,84 @@ public class FunctionalHomeSiteUtil {
 	 * Find the position of the portlet within the portal.
 	 */
 	public int[] findPortletPosition(Selenium browser, String portletCss, int columnCount){
-		int position[] = new int[2];
-		
-		//TODO:JK: implement me
-		
+		for(int i = 0; i < columnCount; i++){
+			StringBuffer selectorBuffer = new StringBuffer();
+
+			selectorBuffer.append("css=.")
+			.append(getPortalCss())
+			.append('.')
+			.append(getPortalSubcolumnsCss())
+			.append(" .")
+			.append(getPortalColumnCssPrefix())
+			.append(i + 1)
+			.append(" .")
+			.append(getPortletCss())
+			.append('.')
+			.append(getPortletEditCss())
+			.append('.')
+			.append(portletCss);
+
+			if(browser.isElementPresent(selectorBuffer.toString())){
+				int position[] = new int[2];
+
+				position[0] = i;
+
+				selectorBuffer = new StringBuffer();
+
+				selectorBuffer.append("css=.")
+				.append(getPortalCss())
+				.append(" .")
+				.append(getPortalColumnCssPrefix())
+				.append(i + 1)
+				.append(" .")
+				.append(getPortletCss());
+
+				VelocityContext context = new VelocityContext();
+
+				context.put("portalCss", getPortalCss());
+				context.put("portalSubcolumnsCss", getPortalSubcolumnsCss());
+				context.put("portletCss", getPortletCss());
+
+				context.put("portlet", portletCss);
+
+				context.put("column", i);
+				context.put("j_stop", browser.getCssCount(selectorBuffer.toString()).intValue());
+
+				VelocityEngine engine = null;
+
+				engine = new VelocityEngine();
+
+				StringWriter sw = new StringWriter();
+
+				try {
+					engine.evaluate(context, sw, "portletPosition", FunctionalHomeSiteUtil.class.getResourceAsStream("PortletPosition.vm"));
+
+					Integer j = new Integer(browser.getEval(sw.toString()));
+					position[1] = j.intValue();
+
+					return(position);
+				} catch (ParseErrorException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				} catch (MethodInvocationException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				} catch (ResourceNotFoundException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+
+
+				return(null);
+			}
+		}
+
 		return(null);
 	}
-	
+
 	/**
 	 * @param browser
 	 * @param portletCss
@@ -601,7 +741,7 @@ public class FunctionalHomeSiteUtil {
 	 */
 	public boolean activatePortlet(Selenium browser, String portletCss){
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("css=.")
 		.append(getPortletCss())
 		.append('.')
@@ -611,16 +751,16 @@ public class FunctionalHomeSiteUtil {
 		.append(" .")
 		.append(getPortletActivateCss())
 		.append(" * a");
-		
+
 		if(browser.isElementPresent(selectorBuffer.toString())){
 			browser.click(selectorBuffer.toString());
-			
+
 			return(true);
 		}else{
 			return(false);
 		}
 	}
-	
+
 	/**
 	 * @param browser
 	 * @param portletCss
@@ -631,7 +771,7 @@ public class FunctionalHomeSiteUtil {
 	 */
 	public boolean deactivatePortlet(Selenium browser, String portletCss){
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("css=.")
 		.append(getPortletCss())
 		.append('.')
@@ -640,16 +780,16 @@ public class FunctionalHomeSiteUtil {
 		.append(portletCss)
 		.append(" * .")
 		.append(getPortletInactivateCss());
-		
+
 		if(browser.isElementPresent(selectorBuffer.toString())){
 			browser.click(selectorBuffer.toString());
-			
+
 			return(true);
 		}else{
 			return(false);
 		}
 	}
-	
+
 	/**
 	 * @param browser
 	 * @param portletCss
@@ -660,7 +800,7 @@ public class FunctionalHomeSiteUtil {
 	 */
 	public boolean movePortlet(Selenium browser, String portletCss, Direction direction){
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("css=.")
 		.append(getPortletCss())
 		.append('.')
@@ -668,45 +808,45 @@ public class FunctionalHomeSiteUtil {
 		.append('.')
 		.append(portletCss)
 		.append(" * .");
-		
+
 		switch(direction){
 		case LEFT:
 		{
 			selectorBuffer.append(getPortletMoveLeftCss());
-			
+
 			break;
 		}
 		case RIGHT:
 		{
 			selectorBuffer.append(getPortletMoveRightCss());
-			
+
 			break;
 		}
 		case UP:
 		{
 			selectorBuffer.append(getPortletMoveUpCss());
-			
+
 			break;
 		}
 		case DOWN:
 		{
 			selectorBuffer.append(getPortletMoveDownCss());
-			
+
 			break;
 		}
 		}
-		
+
 		if(browser.isElementPresent(selectorBuffer.toString())){
 			browser.click(selectorBuffer.toString());
-			
+
 			return(true);
 		}else{
 			return(false);
 		}
-			
+
 	}
-	
-	
+
+
 	/**
 	 * @param browser
 	 * @param language permitted values are: en, es, fr, de, it
@@ -715,28 +855,29 @@ public class FunctionalHomeSiteUtil {
 	 */
 	public void selectLanguage(Selenium browser, String language){
 		functionalUtil.openSite(browser, OlatSite.HOME);
-		
+
 		/* goto home site */
 		Assert.assertTrue(openActionByMenuTree(browser, HomeSiteAction.SETTINGS));
-		Assert.assertTrue(checkCurrentAction(browser, HomeSiteAction.SETTINGS));
-		
+		//Assert.assertTrue(checkCurrentAction(browser, HomeSiteAction.SETTINGS));
+
 		/* open System tab */
 		Assert.assertTrue(functionalUtil.openContentTab(browser, SettingsTab.SYSTEM.ordinal()));
-		
+
 		/* select language */
 		functionalUtil.selectOption(browser, LANGUAGE_OPTIONS_ID, language);
-		
+
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("xpath=//form//div[@class='");
 		selectorBuffer.append(getPrefsButtonsCss());
 		selectorBuffer.append("']//");
 		selectorBuffer.append("button[@type='button']");
-		
+
 		browser.click(selectorBuffer.toString());
 		browser.waitForPageToLoad(functionalUtil.getWaitLimit());
+		functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
 	}
-	
+
 	/**
 	 * @param browser
 	 * 
@@ -744,28 +885,29 @@ public class FunctionalHomeSiteUtil {
 	 */
 	public void enableResume(Selenium browser){
 		functionalUtil.openSite(browser, OlatSite.HOME);
-		
+
 		/* goto home site */
 		Assert.assertTrue(openActionByMenuTree(browser, HomeSiteAction.SETTINGS));
 		Assert.assertTrue(checkCurrentAction(browser, HomeSiteAction.SETTINGS));
-		
+
 		/* open System tab */
 		Assert.assertTrue(functionalUtil.openContentTab(browser, SettingsTab.SYSTEM.ordinal()));
-		
+
 		/* enable resume */
 		Assert.assertTrue(functionalUtil.clickRadio(browser,
 				FunctionalHomeSiteUtil.PortalSettingsForms.SpecificSystemSettingsRadios.RESUME_LAST_SESSION.getGroupCss(),
 				FunctionalHomeSiteUtil.PortalSettingsForms.SpecificSystemSettingsRadios.ResumeLastSession.YES_AUTOMATICALLY.getValueAttribute()));
-		
+
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("xpath=//form//div[@class='");
 		selectorBuffer.append(getGuiButtonsCss());
 		selectorBuffer.append("']//");
 		selectorBuffer.append("button[@type='button']");
-		
+
 		browser.click(selectorBuffer.toString());
 		browser.waitForPageToLoad(functionalUtil.getWaitLimit());
+		functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
 	}
 
 	/**
@@ -775,30 +917,31 @@ public class FunctionalHomeSiteUtil {
 	 */
 	public void enableResumeOnRequest(Selenium browser){
 		functionalUtil.openSite(browser, OlatSite.HOME);
-		
+
 		/* goto home site */
 		Assert.assertTrue(openActionByMenuTree(browser, HomeSiteAction.SETTINGS));
 		Assert.assertTrue(checkCurrentAction(browser, HomeSiteAction.SETTINGS));
-		
+
 		/* open system tab */
 		Assert.assertTrue(functionalUtil.openContentTab(browser, SettingsTab.SYSTEM.ordinal()));
-		
+
 		/* enable resume */
 		Assert.assertTrue(functionalUtil.clickRadio(browser,
 				FunctionalHomeSiteUtil.PortalSettingsForms.SpecificSystemSettingsRadios.RESUME_LAST_SESSION.getGroupCss(),
 				FunctionalHomeSiteUtil.PortalSettingsForms.SpecificSystemSettingsRadios.ResumeLastSession.YES_ON_REQUEST.getValueAttribute()));
-		
+
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("xpath=//form//div[@class='");
 		selectorBuffer.append(getGuiButtonsCss());
 		selectorBuffer.append("']//");
 		selectorBuffer.append("button[@type='button']");
-		
+
 		browser.click(selectorBuffer.toString());
 		browser.waitForPageToLoad(functionalUtil.getWaitLimit());
+		functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
 	}
-	
+
 	/**
 	 * @param browser
 	 * 
@@ -806,88 +949,91 @@ public class FunctionalHomeSiteUtil {
 	 */
 	public boolean disableResume(Selenium browser){
 		functionalUtil.openSite(browser, OlatSite.HOME);
-		
+
 		/* goto home site */
 		Assert.assertTrue(openActionByMenuTree(browser, HomeSiteAction.SETTINGS));
-		Assert.assertTrue(checkCurrentAction(browser, HomeSiteAction.SETTINGS));
-		
+		//Assert.assertTrue(checkCurrentAction(browser, HomeSiteAction.SETTINGS));
+
 		/* open system tab */
 		Assert.assertTrue(functionalUtil.openContentTab(browser, SettingsTab.SYSTEM.ordinal()));
-		
+
 		/* enable resume */
 		Assert.assertTrue(functionalUtil.clickRadio(browser,
 				FunctionalHomeSiteUtil.PortalSettingsForms.SpecificSystemSettingsRadios.RESUME_LAST_SESSION.getGroupCss(),
 				FunctionalHomeSiteUtil.PortalSettingsForms.SpecificSystemSettingsRadios.ResumeLastSession.NO.getValueAttribute()));
-		
+
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("xpath=//form//div[@class='");
 		selectorBuffer.append(getGuiButtonsCss());
 		selectorBuffer.append("']//");
 		selectorBuffer.append("button[@type='button']");
-		
+
 		browser.click(selectorBuffer.toString());
 		browser.waitForPageToLoad(functionalUtil.getWaitLimit());
-		
+		functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
+
 		return(true);
 	}
-	
+
 	public boolean enableBack(Selenium browser){
 		functionalUtil.openSite(browser, OlatSite.HOME);
-		
+
 		/* goto home site */
 		Assert.assertTrue(openActionByMenuTree(browser, HomeSiteAction.SETTINGS));
 		Assert.assertTrue(checkCurrentAction(browser, HomeSiteAction.SETTINGS));
-		
+
 		/* open system tab */
 		Assert.assertTrue(functionalUtil.openContentTab(browser, SettingsTab.SYSTEM.ordinal()));
-		
+
 		/* enable resume */
 		Assert.assertTrue(functionalUtil.clickRadio(browser,
 				FunctionalHomeSiteUtil.PortalSettingsForms.SpecificSystemSettingsRadios.SUPPORT_FOR_BROWSER_BACK.getGroupCss(),
 				FunctionalHomeSiteUtil.PortalSettingsForms.SpecificSystemSettingsRadios.SupportForBrowserBack.ON.getValueAttribute()));
-		
+
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("xpath=//form//div[@class='");
 		selectorBuffer.append(getGuiButtonsCss());
 		selectorBuffer.append("']//");
 		selectorBuffer.append("button[@type='button']");
-		
+
 		browser.click(selectorBuffer.toString());
 		browser.waitForPageToLoad(functionalUtil.getWaitLimit());
-		
+		functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
+
 		return(true);
 	}
-	
+
 	public boolean disableBack(Selenium browser){
 		functionalUtil.openSite(browser, OlatSite.HOME);
-		
+
 		/* goto home site */
 		Assert.assertTrue(openActionByMenuTree(browser, HomeSiteAction.SETTINGS));
 		Assert.assertTrue(checkCurrentAction(browser, HomeSiteAction.SETTINGS));
-		
+
 		/* open system tab */
 		Assert.assertTrue(functionalUtil.openContentTab(browser, SettingsTab.SYSTEM.ordinal()));
-		
+
 		/* enable resume */
 		Assert.assertTrue(functionalUtil.clickRadio(browser,
 				FunctionalHomeSiteUtil.PortalSettingsForms.SpecificSystemSettingsRadios.SUPPORT_FOR_BROWSER_BACK.getGroupCss(),
 				FunctionalHomeSiteUtil.PortalSettingsForms.SpecificSystemSettingsRadios.SupportForBrowserBack.OFF.getValueAttribute()));
-		
+
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("xpath=//form//div[@class='");
 		selectorBuffer.append(getGuiButtonsCss());
 		selectorBuffer.append("']//");
 		selectorBuffer.append("button[@type='button']");
-		
+
 		browser.click(selectorBuffer.toString());
 		browser.waitForPageToLoad(functionalUtil.getWaitLimit());
-		
+		functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
+
 		return(true);
 	}
-	
+
 	/**
 	 * @param browser
 	 * @return true on success
@@ -895,38 +1041,44 @@ public class FunctionalHomeSiteUtil {
 	 * Resets portal settings to default.
 	 */
 	public boolean resetSettings(Selenium browser){
+		log.info("open portal");
 		functionalUtil.openSite(browser, OlatSite.HOME);
-		
+
 		/* open settings page */
+		log.info("open settings tab");
 		if(!openActionByMenuTree(browser, HomeSiteAction.SETTINGS)){
 			return(false);
 		}
-		
+
 		/* click system tab */
-		functionalUtil.openContentTab(browser, 1);
+		log.info("open system settings tab");
+		functionalUtil.openContentTab(browser, SettingsTab.SYSTEM.ordinal());
 		
 		/* using reset configurations form */
 		/* click all checkboxes */
+		log.info("clicking all reset configurations checkboxes");
 		functionalUtil.clickCheckbox(browser, CONFIGURATIONS_CSS, GUI_PREFERENCES_VALUE);
-		
+
 		functionalUtil.clickCheckbox(browser, CONFIGURATIONS_CSS, SYS_PREFERENCES_VALUE);
-		
+
 		functionalUtil.clickCheckbox(browser, CONFIGURATIONS_CSS, RESUME_VALUE);
-		
+
 		/* click Reset */
 		StringBuffer selectorBuffer = new StringBuffer();
-		
+
 		selectorBuffer.append("xpath=//form//div[@class='");
 		selectorBuffer.append(getSysprefsButtonsCss());
 		selectorBuffer.append("']//");
 		selectorBuffer.append("button[@type='button']");
-		
+
+		log.info("submitting changes");
 		browser.click(selectorBuffer.toString());
 		browser.waitForPageToLoad(functionalUtil.getWaitLimit());
+		functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
 		
 		return(true);
 	}
-	
+
 	public FunctionalUtil getUtil() {
 		return functionalUtil;
 	}
@@ -1059,6 +1211,14 @@ public class FunctionalHomeSiteUtil {
 		this.portalWrapperCss = portalWrapperCss;
 	}
 
+	public String getPortalCss() {
+		return portalCss;
+	}
+
+	public void setPortalCss(String portalCss) {
+		this.portalCss = portalCss;
+	}
+
 	public String getPortalColumnCssPrefix() {
 		return portalColumnCssPrefix;
 	}
diff --git a/src/test/java/org/olat/util/FunctionalUtil.java b/src/test/java/org/olat/util/FunctionalUtil.java
index fe0f5073d83e77d7650a5d0eea45aa6500c19dc2..0ed138b5cfb53a4c645264b8535b79a728cdd005 100644
--- a/src/test/java/org/olat/util/FunctionalUtil.java
+++ b/src/test/java/org/olat/util/FunctionalUtil.java
@@ -20,8 +20,13 @@
 package org.olat.util;
 
 import java.io.IOException;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.Properties;
 
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
+
 import com.thoughtworks.selenium.Selenium;
 
 /**
@@ -29,6 +34,8 @@ import com.thoughtworks.selenium.Selenium;
  * @author jkraehemann, joel.kraehemann@frentix.com, frentix.com
  */
 public class FunctionalUtil {
+	private final static OLog log = Tracing.createLoggerFor(FunctionalUtil.class);
+	
 	public final static String DEPLOYMENT_URL = "http://localhost:8080/olat";
 	public final static String WAIT_LIMIT = "15000";
 	
@@ -159,6 +166,43 @@ public class FunctionalUtil {
 		browser.waitForPageToLoad(getWaitLimit());
 	}
 
+	/**
+	 * @param browser
+	 * @param locator
+	 * @return true on success otherwise false
+	 * 
+	 * Waits at most waitLimit amount of time for element to load
+	 * specified by locator.
+	 */
+	public boolean waitForPageToLoadElement(Selenium browser, String locator){
+		long startTime = Calendar.getInstance().getTimeInMillis();
+		long currentTime = startTime;
+		long waitLimit = Long.parseLong(getWaitLimit());
+
+		log.info("waiting for page to load element");
+		
+		do{
+			if(browser.isElementPresent(locator)){
+				log.info("found element after " + (currentTime - startTime) + "ms");
+				
+				return(true);
+			}
+			
+			try {
+				Thread.sleep(100);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+			
+			
+			currentTime = Calendar.getInstance().getTimeInMillis();
+		}while(waitLimit >  currentTime - startTime);
+		
+		log.warn("giving up after " + waitLimit + "ms");
+		
+		return(false);
+	}
+	
 	/**
 	 * @param site
 	 * @return the matching CSS class
@@ -214,6 +258,10 @@ public class FunctionalUtil {
 	 * Check if the correct olat site is open.
 	 */
 	public boolean checkCurrentSite(Selenium browser, OlatSite site){
+		return(checkCurrentSite(browser, site, -1));
+	}
+	
+	public boolean checkCurrentSite(Selenium browser, OlatSite site, long timeout){
 		String selectedCss = findCssClassOfSite(site);
 		
 		if(selectedCss == null){
@@ -228,12 +276,28 @@ public class FunctionalUtil {
 		.append(getOlatActiveNavigationSiteCss())
 		.append(".")
 		.append(selectedCss);
+
+		long timeElapsed = 0;
+		long startTime = Calendar.getInstance().getTimeInMillis();
 		
-		if(browser.isElementPresent(selectorBuffer.toString())){
-			return(true);
-		}else{
-			return(false);	
-		}
+		do{
+			if(browser.isElementPresent(selectorBuffer.toString())){
+				return(true);
+			}
+			
+			if(timeout != -1){
+				try {
+					Thread.sleep(100);
+				} catch (InterruptedException e) {
+					//TODO:JK: Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+			
+			timeElapsed = Calendar.getInstance().getTimeInMillis() - startTime;
+		}while(timeElapsed <= timeout && timeout != -1);
+		
+		return(false);
 	}
 	
 	/**
@@ -250,20 +314,21 @@ public class FunctionalUtil {
 			return(false);
 		}
 		
-		if(checkCurrentSite(browser, site)){
+		if(checkCurrentSite(browser, site, 15000)){
 			return(true);
 		}
 		
-		StringBuffer selectorBuffer = new StringBuffer();
+		StringBuilder selectorBuffer = new StringBuilder();
 		
 		selectorBuffer.append("css=.")
 		.append(getOlatNavigationSiteCss())
 		.append(".")
 		.append(selectedCss)
-		.append(" * a");
+		.append(" a");
 		
 		browser.click(selectorBuffer.toString());
 		browser.waitForPageToLoad(getWaitLimit());
+		waitForPageToLoadElement(browser, selectorBuffer.toString());
 		
 		return(true);
 	}
@@ -351,7 +416,7 @@ public class FunctionalUtil {
 		
 		activeTabSelectorBuffer.append("css=#")
 		.append(getContentCss())
-		.append(" * ul .")
+		.append(" ul .")
 		.append(getContentTabCss())
 		.append(tabIndex + 1)
 		.append('.')
@@ -362,10 +427,10 @@ public class FunctionalUtil {
 			
 			selectorBuffer.append("css=#")
 			.append(getContentCss())
-			.append(" * ul .")
+			.append(" ul .")
 			.append(getContentTabCss())
 			.append(tabIndex + 1)
-			.append(" * a");
+			.append(" a");
 			
 			browser.click(selectorBuffer.toString());
 			browser.waitForPageToLoad(getWaitLimit());
diff --git a/src/test/java/org/olat/util/FunctionalVOUtil.java b/src/test/java/org/olat/util/FunctionalVOUtil.java
index 0b745bcfc7c384244b0a204085a8eb754e7dcb0d..5ecddc9fb827b536af8d50f5971f8c14d8bc91a8 100644
--- a/src/test/java/org/olat/util/FunctionalVOUtil.java
+++ b/src/test/java/org/olat/util/FunctionalVOUtil.java
@@ -36,24 +36,30 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriBuilder;
 
 import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPost;
 import org.apache.http.client.methods.HttpPut;
 import org.apache.http.entity.mime.HttpMultipartMode;
 import org.apache.http.entity.mime.MultipartEntity;
 import org.apache.http.entity.mime.content.FileBody;
 import org.apache.http.entity.mime.content.StringBody;
 import org.junit.Assert;
-import org.olat.restapi.RepositoryEntriesTest;
 import org.olat.restapi.RestConnection;
-import org.olat.restapi.support.vo.RepositoryEntryVO;
+import org.olat.restapi.support.vo.CourseVO;
 import org.olat.user.restapi.UserVO;
 
 public class FunctionalVOUtil {
+	public final static String ALL_ELEMENTS_COURSE_DISPLAYNAME = "All Elements Course";
+	
 	private String username;
 	private String password;
 	
+	private String allElementsCourseDisplayname;
+	
 	public FunctionalVOUtil(String username, String password){
 		setUsername(username);
 		setPassword(password);
+		
+		setAllElementsCourseDisplayname(ALL_ELEMENTS_COURSE_DISPLAYNAME);
 	}
 	
 	/**
@@ -107,8 +113,8 @@ public class FunctionalVOUtil {
 		return(user);
 	}
 	
-	public RepositoryEntryVO importAllElementsCourseCourse(URL deploymentUrl) throws URISyntaxException, IOException{
-		URL courseUrl = RepositoryEntriesTest.class.getResource("../course/All_Elements_Course.zip");
+	public CourseVO importAllElementsCourse(URL deploymentUrl) throws URISyntaxException, IOException{
+		URL courseUrl = FunctionalVOUtil.class.getResource("/org/olat/course/All_Elements_Course.zip");
 		Assert.assertNotNull(courseUrl);
 		
 		File course = new File(courseUrl.toURI());
@@ -117,25 +123,35 @@ public class FunctionalVOUtil {
 
 		assertTrue(restConnection.login(getUsername(), getPassword()));
 		
-		URI request = UriBuilder.fromUri(deploymentUrl.toURI()).path("repo/entries").build();
-		HttpPut method = restConnection.createPut(request, MediaType.APPLICATION_JSON, true);
-		method.addHeader("Content-Type", MediaType.MULTIPART_FORM_DATA);
+		URI request = UriBuilder.fromUri(deploymentUrl.toURI()).path("restapi").path("repo/courses").build();
+		HttpPost method = restConnection.createPost(request, MediaType.APPLICATION_JSON, true);
 		MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
 		entity.addPart("file", new FileBody(course));
 		entity.addPart("filename", new StringBody("All_Elements_Course.zip"));
 		entity.addPart("resourcename", new StringBody("All Elements Course"));
-		entity.addPart("displayname", new StringBody("All Elements Course"));
+		entity.addPart("displayname", new StringBody(""));
+		entity.addPart("access", new StringBody("3"));
+		String softKey = UUID.randomUUID().toString().replace("-", "").substring(0, 30);
+		entity.addPart("softkey", new StringBody(softKey));
 		method.setEntity(entity);
 		
 		HttpResponse response = restConnection.execute(method);
-		System.out.println("*===============*" + response.getStatusLine().getStatusCode());
-		
 		assertTrue(response.getStatusLine().getStatusCode() == 200 || response.getStatusLine().getStatusCode() == 201);
 		
 		InputStream body = response.getEntity().getContent();
 		
-		RepositoryEntryVO vo = restConnection.parse(body, RepositoryEntryVO.class);
+		CourseVO vo = restConnection.parse(body, CourseVO.class);
 		assertNotNull(vo);
+		assertNotNull(vo.getRepoEntryKey());
+		assertNotNull(vo.getKey());
+		
+//		Long repoKey = vo.getRepoEntryKey();
+//		RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(repoKey);
+//		assertNotNull(re);
+//		assertNotNull(re.getOwnerGroup());
+//		assertNotNull(re.getOlatResource());
+//		assertEquals("All Elements Course", re.getDisplayname());
+//		assertEquals(softKey, re.getSoftkey());
 		
 		return(vo);
 	}
@@ -155,4 +171,12 @@ public class FunctionalVOUtil {
 	public void setPassword(String password) {
 		this.password = password;
 	}
+
+	public String getAllElementsCourseDisplayname() {
+		return allElementsCourseDisplayname;
+	}
+
+	public void setAllElementsCourseDisplayname(String allElementsCourseDisplayname) {
+		this.allElementsCourseDisplayname = allElementsCourseDisplayname;
+	}
 }
diff --git a/src/test/java/org/olat/util/PortletPosition.vm b/src/test/java/org/olat/util/PortletPosition.vm
new file mode 100644
index 0000000000000000000000000000000000000000..6cb850aa201d552fc9b6c71c2b8c58cd7fc6c550
--- /dev/null
+++ b/src/test/java/org/olat/util/PortletPosition.vm
@@ -0,0 +1,22 @@
+if (document.querySelector){
+	var portalCss = "${portalCss}";
+	var portalSubcolumns = "${portalSubcolumnsCss}";
+	var portletCss = "${portletCss}";
+	
+	var portlet = "${portlet}";
+	
+	var j_stop = ${j_stop};
+	var column = ${column};
+	
+	var selection = document.querySelectorAll('.' + portalCss + '.' + portalSubcolumns + ':nth-child(' + (column + 1) + ') .' + portletCss);
+		
+	for(j=0; j < j_stop; j++){
+		var current = selection.item(j);
+		
+		if(current.className.contains(portlet)){
+			return(j);
+		}
+	}
+}
+
+return(-1);