diff --git a/src/test/java/org/olat/course/FunctionalCourseTest.java b/src/test/java/org/olat/course/FunctionalCourseTest.java
index c1fe7b9f7f457734b6e08ce95ef68ff565369446..ae299310e38f55a37bdfe5f6b3d39c9f19dfa281 100644
--- a/src/test/java/org/olat/course/FunctionalCourseTest.java
+++ b/src/test/java/org/olat/course/FunctionalCourseTest.java
@@ -86,7 +86,7 @@ public class FunctionalCourseTest {
 	
 	@Test
 	@RunAsClient
-	public void checkCreate(){
+	public void checkCreateUsingWizard(){
 		/* login */
 		Assert.assertTrue(functionalUtil.login(browser, functionalUtil.getUsername(), functionalUtil.getPassword(), true));
 		
diff --git a/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java b/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java
index 6dcfdc32e584baf497d0820a55a7e6ceb744f276..54e86a6180d4d4f6ade21936d59897b630214f38 100644
--- a/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java
+++ b/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.List;
 
 import org.jboss.arquillian.container.test.api.Deployment;
@@ -55,9 +56,11 @@ import com.thoughtworks.selenium.DefaultSelenium;
  */
 @RunWith(Arquillian.class)
 public class FunctionalArtefactTest {
+
+	/* content */
 	public final static String BINDER_PROGRAMMING_THEORIE = "programming (theorie)";
 	public final static String BINDER_PROGRAMMING_SAMPLES = "programming (code samples)";
-	
+
 	public final static String FORUM_POST_TITLE = "question about multiplexing";
 	public final static String FORUM_POST_MESSAGE = "What multiplexing exists in operating systems?";
 	public final static String FORUM_ARTEFACT_TITLE = "multiplexing forum post";
@@ -66,7 +69,7 @@ public class FunctionalArtefactTest {
 	public final static String FORUM_BINDER = BINDER_PROGRAMMING_THEORIE;
 	public final static String FORUM_PAGE = "operating systems";
 	public final static String FORUM_STRUCTURE = "issue 1";
-	
+
 	public final static String WIKI_ARTICLE_PAGENAME = "Multiplexing";
 	public final static String WIKI_ARTICLE_CONTENT = "==Time Multiplexing==\nscheduling a serially-reusable resource among several users\n\n==Space multiplexing==\ndividing a multiple-use resource up among several users";
 	public final static String WIKI_ARTEFACT_TITLE = "multiplexing wiki";
@@ -75,7 +78,7 @@ public class FunctionalArtefactTest {
 	public final static String WIKI_BINDER = BINDER_PROGRAMMING_THEORIE;
 	public final static String WIKI_PAGE = "operating systems";
 	public final static String WIKI_STRUCTURE = "issue 2";
-	
+
 	public final static String BLOG_TITLE = "My Blog";
 	public final static String BLOG_DESCRIPTION = "Blog created with Selenium";
 	public final static String BLOG_POST_TITLE = "Multiplexing articles";
@@ -87,7 +90,7 @@ public class FunctionalArtefactTest {
 	public final static String BLOG_BINDER = BINDER_PROGRAMMING_THEORIE;
 	public final static String BLOG_PAGE = "operating systems";
 	public final static String BLOG_STRUCTURE = "issue 3";
-	
+
 	public final static String TEXT_ARTEFACT_CONTENT = "Bufferbloat is a phenomenon in a packet-switched computer network whereby excess buffering of packets inside the network causes high latency and jitter, as well as reducing the overall network throughput.";
 	public final static String TEXT_ARTEFACT_TITLE = "Definition bufferbloat";
 	public final static String TEXT_ARTEFACT_DESCRIPTION = "Definition bufferbloat";
@@ -95,7 +98,7 @@ public class FunctionalArtefactTest {
 	public final static String TEXT_ARTEFACT_BINDER = BINDER_PROGRAMMING_THEORIE;
 	public final static String TEXT_ARTEFACT_PAGE = "networking";
 	public final static String TEXT_ARTEFACT_STRUCTURE = "issue 1";
-	
+
 	public final static String FILE_ARTEFACT_PATH = "/org/olat/portfolio/sfqcodel.cc";
 	public final static String FILE_ARTEFACT_TITLE = "CoDel";
 	public final static String FILE_ARTEFACT_DESCRIPTION = "CoDel Algorithm";
@@ -103,14 +106,14 @@ public class FunctionalArtefactTest {
 	public final static String FILE_ARTEFACT_BINDER = BINDER_PROGRAMMING_SAMPLES;
 	public final static String FILE_ARTEFACT_PAGE = "cpp";
 	public final static String FILE_ARTEFACT_STRUCTURE = "issue 1";
-	
+
 	public final static String LEARNING_JOURNAL_TITLE = "Programming Topics";
 	public final static String LEARNING_JOURNAL_DESCRIPTION = "Some hot programming topics";
 	public final static String[] LEARNING_JOURNAL_TAGS = {"programming", "c", "c++"};
 	public final static String LEARNING_JOURNAL_BINDER = BINDER_PROGRAMMING_THEORIE;
 	public final static String LEARNING_JOURNAL_PAGE = "journal";
 	public final static String LEARNING_JOURNAL_STRUCTURE = "2012/08/13";
-	
+
 	@Deployment(testable = false)
 	public static WebArchive createDeployment() {
 		return ArquillianDeployments.createDeployment();
@@ -128,11 +131,12 @@ public class FunctionalArtefactTest {
 	static FunctionalCourseUtil functionalCourseUtil;
 	static FunctionalEPortfolioUtil functionalEportfolioUtil;
 	static FunctionalVOUtil functionalVOUtil;
-	
+
 	static UserVO user;
-	
+	static List<Binder> map = new ArrayList<Binder>();
+
 	static boolean initialized = false;
-	
+
 	@Before
 	public void setup() throws IOException, URISyntaxException{
 		if(!initialized){
@@ -155,54 +159,201 @@ public class FunctionalArtefactTest {
 		}
 	}
 	
+	Object[] prepareVerification(String binderName, String binderDescription,
+			String pageName, String pageDescription,
+			String structureName, String structureDescription,
+			String artefactName, String artefactDescription, String[] artefactTags, Object artefactContent){
+		Binder binder = findBinderByName(this.map, binderName);
+		
+		if(binder == null){
+			binder = new Binder(binderName, binderDescription);
+			this.map.add(binder);
+		}
+		
+		Binder.Page page = findPageByName(binder.page, pageName);
+		
+		if(page == null){
+			page = binder.new Page(pageName, pageDescription);
+			binder.page.add(page);
+		}
+		
+		Binder.Page.Structure structure = findStructureByName(page.child, structureName);
+		
+		if(structure == null && structureName != null){
+			structure = page.new Structure(structureName, structureDescription);
+			page.child.add(structure);
+		}
+		
+		Binder.Page.Artefact artefact = findArtefactByName(page.child, artefactName);
+		
+		if(artefact == null && structure != null){
+			artefact = findArtefactByName(structure.child, artefactName);
+		}
+		
+		if(artefact == null){
+			artefact = page.new Artefact(artefactName, artefactDescription, artefactTags, artefactContent);
+			
+			if(structure != null){
+				structure.child.add(artefact);
+			}else{
+				page.child.add(artefact);
+			}
+		}
+		
+		Object[] retval = new Object[]{binder, page, structure, artefact};
+		
+		return(retval);
+	}
+	
+	Binder findBinderByName(List<Binder> binder, String name){
+		if(name == null)
+			return(null);
+		
+		for(Binder current: binder){
+			if(name.equals(current.name)){
+				return(current);
+			}
+		}	
+		
+		return(null);
+	}
+	
+	Binder.Page findPageByName(List<Binder.Page> page, String name){
+		if(name == null)
+			return(null);
+		
+		for(Binder.Page current: page){
+			if(name.equals(current.name)){
+				return(current);
+			}
+		}	
+		
+		return(null);
+	}
+	
+	Binder.Page.Artefact findArtefactByName(List<?> list, String name){
+		if(name == null)
+			return(null);
+		
+		for(Object current: list){
+			if(current instanceof Binder.Page.Artefact && name.equals(((Binder.Page.Artefact) current).name)){
+				return((Binder.Page.Artefact) current);
+			}
+		}	
+		
+		return(null);
+	}
+	
+	Binder.Page.Structure findStructureByName(List<?> list, String name){
+		if(name == null)
+			return(null);
+		
+		for(Object current: list){
+			if(current instanceof Binder.Page.Structure && name.equals(((Binder.Page.Structure) current).name)){
+				return((Binder.Page.Structure) current);
+			}
+		}	
+		
+		return(null);
+	}
+	
+	boolean checkArtefact(Binder.Page.Artefact artefact){
+		
+		if(!functionalEportfolioUtil.openArtefactDetails(browser, user.getKey(), artefact.name)){
+			return(false);
+		}
+		
+		//TODO:JK: implement me
+		return(true);
+	}
+	
+	boolean checkMap(Binder binder){
+		//TODO:JK: implement me
+		return(true);
+	}
+
 	@Test
 	@RunAsClient
 	public void checkCollectForumPost() throws IOException, URISyntaxException{
+		/*
+		 * Prepare for verification
+		 */		
+		Object[] retval = prepareVerification(FORUM_BINDER, null,
+				FORUM_PAGE, null,
+				FORUM_STRUCTURE, null,
+				FORUM_ARTEFACT_TITLE, FORUM_ARTEFACT_DESCRIPTION, FORUM_TAGS, null);
+		
+		Binder binder = (Binder) retval[0];
+		Binder.Page page = (Binder.Page) retval[1];
+		Binder.Page.Structure structure = (Binder.Page.Structure) retval[2];
+		Binder.Page.Artefact artefact = (Binder.Page.Artefact) retval[3];
+		
+		/*
+		 * test case
+		 */
 		/* deploy course with REST */
 		CourseVO course = functionalVOUtil.importCourseIncludingForum(deploymentUrl);
-		
+
 		/* login for test setup */
 		Assert.assertTrue(functionalUtil.login(browser, user.getLogin(), user.getPassword(), true));
-		
+
 		/* create binder, page or structure if necessary */
 		Assert.assertTrue(functionalEportfolioUtil.createElements(browser, FORUM_BINDER, FORUM_PAGE, FORUM_STRUCTURE));
-		
+
 		/* post message to forum */
 		Assert.assertTrue(functionalCourseUtil.postForumMessage(browser, course.getRepoEntryKey(), 0, FORUM_POST_TITLE, FORUM_POST_MESSAGE));
-		
+
 		/* add artefact */
 		Assert.assertTrue(functionalCourseUtil.addToEportfolio(browser, FORUM_BINDER, FORUM_PAGE, FORUM_STRUCTURE,
 				FORUM_ARTEFACT_TITLE, FORUM_ARTEFACT_DESCRIPTION, FORUM_TAGS,
 				functionalEportfolioUtil));
+
+		/*
+		 * Test for content and make assumptions if the changes were applied.
+		 * Keep it simple use quick access with business paths.
+		 */
+		binder.ignore = false;
+		
+		page.ignore = false;
+		
+		structure.ignore = false;
+		
+		//TODO:JK: find a way to retrieve resourceable key
+		//artefact.content = new String(deploymentUrl.toString() + "/url/RepositoryEntry/" + course.getRepoEntryKey() + "/CourseNode/");
+		artefact.ignore = false;
+		
+		/* verify */
+		Assert.assertTrue(checkArtefact(artefact));
+		Assert.assertTrue(checkMap(binder));
 	}
-	
+
 	@Test
 	@RunAsClient
 	public void checkCollectWikiArticle() throws URISyntaxException, IOException{
 		/* import wiki via rest */
 		RepositoryEntryVO vo = functionalVOUtil.importWiki(deploymentUrl);
-		
+
 		/* login for test setup */
 		Assert.assertTrue(functionalUtil.login(browser, user.getLogin(), user.getPassword(), true));
-		
+
 		/* create binder, page or structure if necessary */
 		Assert.assertTrue(functionalEportfolioUtil.createElements(browser, WIKI_BINDER, WIKI_PAGE, WIKI_STRUCTURE));
-		
+
 		/* create an article for the wiki */
 		Assert.assertTrue(functionalCourseUtil.createWikiArticle(browser, vo.getKey(), WIKI_ARTICLE_PAGENAME, WIKI_ARTICLE_CONTENT));
-		
+
 		/* add artefact */
 		Assert.assertTrue(functionalCourseUtil.addToEportfolio(browser, WIKI_BINDER, WIKI_PAGE, WIKI_STRUCTURE,
 				WIKI_ARTEFACT_TITLE, WIKI_ARTEFACT_DESCRIPTION, WIKI_TAGS,
 				functionalEportfolioUtil));
 	}
-	
+
 	@Test
 	@RunAsClient
 	public void checkCollectBlogPost() throws URISyntaxException, IOException{
 		/* deploy course with REST */
 		CourseVO course = functionalVOUtil.importCourseIncludingBlog(deploymentUrl);	
-		
+
 		/* login for test setup */
 		Assert.assertTrue(functionalUtil.login(browser, user.getLogin(), user.getPassword(), true));
 
@@ -212,26 +363,26 @@ public class FunctionalArtefactTest {
 		/* blog */
 		Assert.assertTrue(functionalCourseUtil.createBlogEntry(browser, course.getRepoEntryKey(), 0,
 				BLOG_POST_TITLE, BLOG_POST_DESCRIPTION, BLOG_POST_CONTENT));
-		
+
 		/* add artefact */
 		Assert.assertTrue(functionalCourseUtil.addToEportfolio(browser, BLOG_BINDER, BLOG_PAGE, BLOG_STRUCTURE,
 				BLOG_ARTEFACT_TITLE, BLOG_ARTEFACT_DESCRIPTION, BLOG_TAGS,
 				functionalEportfolioUtil));
 	}
-	
+
 	@Test
 	@RunAsClient
 	public void checkAddTextArtefact(){
 		/* login for test setup */
 		Assert.assertTrue(functionalUtil.login(browser, user.getLogin(), user.getPassword(), true));
-		
+
 		/* add text artefact */
 		Assert.assertTrue(functionalEportfolioUtil.addTextArtefact(browser, TEXT_ARTEFACT_BINDER, TEXT_ARTEFACT_PAGE, TEXT_ARTEFACT_STRUCTURE,
 				TEXT_ARTEFACT_CONTENT,
 				TEXT_ARTEFACT_TITLE, TEXT_ARTEFACT_DESCRIPTION,
 				TEXT_ARTEFACT_TAGS));
 	}
-	
+
 	@Test
 	@RunAsClient
 	public void checkUploadFileArtefact() throws URISyntaxException, MalformedURLException{
@@ -244,18 +395,75 @@ public class FunctionalArtefactTest {
 				FILE_ARTEFACT_TITLE, FILE_ARTEFACT_DESCRIPTION,
 				FILE_ARTEFACT_TAGS));
 	}
-	
+
 	@Test
 	@RunAsClient
 	public void checkCreateLearningJournal(){
 		/* login for test setup */
 		Assert.assertTrue(functionalUtil.login(browser, user.getLogin(), user.getPassword(), true));
-		
+
 		/* create learning journal */
 		Assert.assertTrue(functionalEportfolioUtil.createLearningJournal(browser, LEARNING_JOURNAL_BINDER, LEARNING_JOURNAL_PAGE, LEARNING_JOURNAL_STRUCTURE,
 				LEARNING_JOURNAL_TITLE, LEARNING_JOURNAL_DESCRIPTION,
 				LEARNING_JOURNAL_TAGS));
-		
+
 		System.out.println();
 	}
+
+	/**
+	 * Description:<br/>
+	 * Helper classes to verify interactions with openolat.
+	 * 
+	 * @author jkraehemann, joel.kraehemann@frentix.com, frentix.com
+	 */
+	class Binder{
+		String name;
+		String description;
+		List<Page> page = new ArrayList<Page>();
+		boolean ignore = true;
+
+		Binder(String name, String description){
+			this.name = name;
+			this.description = description;
+		}
+		
+		class Page{
+			String name;
+			String description;
+			List child = new ArrayList();
+			boolean ignore = true;
+			
+			Page(String name, String description){
+				this.name = name;
+				this.description = description;
+			}
+			
+			class Structure{
+				String name;
+				String description;
+				List<Artefact> child = new ArrayList<Artefact>();
+				boolean ignore = true;
+				
+				Structure(String name, String description){
+					this.name = name;
+					this.description = description;
+				}
+			}
+
+			class Artefact{
+				String name;
+				String description;
+				String[] tags;
+				Object content; /* in general a URL but for text artefact a String */
+				boolean ignore = true;
+				
+				Artefact(String name, String description, String[] tags, Object content){
+					this.name = name;
+					this.description = description;
+					this.tags = tags;
+					this.content = content;
+				}
+			}
+		}
+	}
 }
diff --git a/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java b/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java
index 53e743c292f1cb7329508bcef352be951f1105f3..15021f14f4236f05d2f5bd08d42bac2ad01b288f 100644
--- a/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java
+++ b/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java
@@ -40,6 +40,9 @@ import com.thoughtworks.selenium.Selenium;
  * @author jkraehemann, joel.kraehemann@frentix.com, frentix.com
  */
 public class FunctionalEPortfolioUtil {
+	public final static String EP_ARTEFACTS_BUSINESS_PATH = "EPArtefacts";
+	public final static String EP_MAPS_BUSINESS_PATH = "EPMaps";
+	
 	
 	public final static String EPORTFOLIO_CSS = "b_eportfolio";
 	public final static String EPORTFOLIO_MAP_CSS = "b_eportfolio_map";
@@ -132,7 +135,34 @@ public class FunctionalEPortfolioUtil {
 		setStructIconCss(STRUCT_ICON_CSS);
 	}
 
-
+	/**
+	 * @param browser
+	 * @param key
+	 * @param artefactTitle
+	 * @return
+	 * 
+	 * 
+	 */
+	public boolean openArtefactDetails(Selenium browser, Long key, String artefactTitle){
+		String epArtefactsBusinessPath = functionalUtil.getDeploymentUrl().toString() + "/url/HomeSite/" + key + "/" + EP_ARTEFACTS_BUSINESS_PATH;
+		
+//		do{
+//			browser.open(epArtefactsBusinessPath);
+//		}while();
+		
+		//TODO:JK: implement me
+		
+		return(false);
+	}
+	
+	public boolean openBinder(Selenium browser, Long key, String binderTitle){
+		String epMapsBusinessPath = functionalUtil.getDeploymentUrl().toString() + "/url/HomeSite/" + key + "/" + EP_MAPS_BUSINESS_PATH;
+		
+		//TODO:JK: implement me
+		
+		return(true);
+	}
+	
 	/**
 	 * @param binder
 	 * @param page