diff --git a/src/main/java/org/olat/core/gui/components/progressbar/ProgressBar.java b/src/main/java/org/olat/core/gui/components/progressbar/ProgressBar.java
index f2371179832c92ca6a23fd1b3b016611bbc23c3b..bec350d7dd185ad18654851392251e3318b88d2b 100644
--- a/src/main/java/org/olat/core/gui/components/progressbar/ProgressBar.java
+++ b/src/main/java/org/olat/core/gui/components/progressbar/ProgressBar.java
@@ -41,6 +41,7 @@ public class ProgressBar extends AbstractComponent {
 	private static final int DEFAULT_WIDTH = 200;
 
 	private int width = DEFAULT_WIDTH;
+	private boolean widthInPercent = false;
 	private float actual;
 	private float max;
 	private boolean isNoMax = false;
@@ -73,8 +74,9 @@ public class ProgressBar extends AbstractComponent {
 	/**
 	 * @see org.olat.core.gui.components.Component#dispatchRequest(org.olat.core.gui.UserRequest)
 	 */
+	@Override
 	protected void doDispatchRequest(UserRequest ureq) {
-	//
+		//
 	}
 
 	/**
@@ -112,66 +114,62 @@ public class ProgressBar extends AbstractComponent {
 	 * @param string
 	 */
 	public void setUnitLabel(String string) {
-		// FIXME:fj:a remove all those unnecessary setters, put them in the
-		// constructor
 		setDirty(true);
 		unitLabel = string;
 	}
 
+	/**
+	 * @return
+	 */
+	public int getWidth() {
+		return width;
+	}
+
 	/**
 	 * @param i
 	 */
-	public void setWidth(int i) {
-		width = i;
+	public void setWidth(int width) {
+		this.width = width;
+	}
+
+	public boolean isWidthInPercent() {
+		width = 100;
+		return widthInPercent;
+	}
+
+	public void setWidthInPercent(boolean widthInPercent) {
+		this.widthInPercent = widthInPercent;
 	}
 
 	/**
 	 * @return
 	 */
-	float getActual() {
+	public float getActual() {
 		return actual;
 	}
 	
-	String getInfo() {
+	public String getInfo() {
 		return info;
 	}
 
 	/**
 	 * @return
 	 */
-	float getMax() {
+	public float getMax() {
 		return max;
 	}
 
-	boolean getIsNoMax() {
+	public boolean getIsNoMax() {
 		return isNoMax;
 	}
 
 	/**
 	 * @return
 	 */
-	String getUnitLabel() {
+	public String getUnitLabel() {
 		return unitLabel;
 	}
 
-	/**
-	 * @return
-	 */
-	int getWidth() {
-		return width;
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.Component#getExtendedDebugInfo()
-	 */
-	public String getExtendedDebugInfo() {
-		return "just a bar";
-	}
-
-	public ComponentRenderer getHTMLRendererSingleton() {
-		return RENDERER;
-	}
-
 	/**
 	 * @return percentagesEnabled true: show percentages; false: show only unit labels, no percentags
 	 */
@@ -186,4 +184,8 @@ public class ProgressBar extends AbstractComponent {
 		this.percentagesEnabled = percentagesEnabled;
 	}
 
+	@Override
+	public ComponentRenderer getHTMLRendererSingleton() {
+		return RENDERER;
+	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarItem.java b/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarItem.java
index aba4462c5f4731515519b7ce377ee53773243494..bed8754af513e26fb3b082b72517726fd7fa7657 100644
--- a/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarItem.java
+++ b/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarItem.java
@@ -56,6 +56,10 @@ public class ProgressBarItem extends FormItemImpl {
 		component.setActual(actual);
 	}
 
+	public void setWidthInPercent(boolean widthInPercent) {
+		component.setWidthInPercent(widthInPercent);
+	}
+
 	@Override
 	protected void rootFormAvailable() {
 		//
diff --git a/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarRenderer.java b/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarRenderer.java
index e00c313524d2984f1b4a79c557ab20aad6b6f7c8..c2814ae3b01ef8dd6ddd1ba9c85ad608637c02b3 100644
--- a/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarRenderer.java
@@ -55,12 +55,19 @@ public class ProgressBarRenderer extends DefaultComponentRenderer {
 		ProgressBar ubar = (ProgressBar) source;
 		boolean renderLabels = (args == null) ? true : false;
 		float percent = 100;
-		if (!ubar.getIsNoMax()) percent = 100 * ubar.getActual() / ubar.getMax();
-		if (percent < 0) percent = 0;
-		if (percent > 100) percent = 100;
+		if (!ubar.getIsNoMax()) {
+			percent = 100 * ubar.getActual() / ubar.getMax();
+		}
+		if (percent < 0) {
+			percent = 0;
+		}
+		if (percent > 100) {
+			percent = 100;
+		}
 		target.append("<div class='progress' style=\"width:")
 			.append(ubar.getWidth())
-			.append("px;\"><div class='progress-bar' style=\"width:")
+			.append("%", "px", ubar.isWidthInPercent())
+			.append(";\"><div class='progress-bar' style=\"width:")
 			.append(Math.round(percent * ubar.getWidth() / 100))
 			.append("px\" title=\"")
 			.append(Math.round(percent))
diff --git a/src/main/java/org/olat/course/assessment/AssessmentToolManager.java b/src/main/java/org/olat/course/assessment/AssessmentToolManager.java
index 5684ca08ec9408fe2fda6fc1c53308641fec7125..29b0f69afa3664791e38041ae2df91d7474b4ce1 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentToolManager.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentToolManager.java
@@ -41,12 +41,21 @@ public interface AssessmentToolManager {
 	public AssessmentStatistics getStatistics(Identity coach, SearchAssessedIdentityParams params);
 	
 	/**
+	 * Return the number of 
+	 * @param coach
+	 * @param params
+	 * @return
+	 */
+	public int getNumberOfAssessedIdentities(Identity coach, SearchAssessedIdentityParams params);
+	
+	/**
+	 * Return the number of participants to the course
 	 * 
 	 * @param coach
 	 * @param params
 	 * @return
 	 */
-	public int getNumberOfAssessedIndetities(Identity coach, SearchAssessedIdentityParams params);
+	public int getNumberOfParticipants(Identity coach, SearchAssessedIdentityParams params);
 	
 	/**
 	 * The number of user who launched the course / resource
diff --git a/src/main/java/org/olat/course/assessment/IndentedNodeRenderer.java b/src/main/java/org/olat/course/assessment/IndentedNodeRenderer.java
index 2103d304533f8808d70b4f85e2efa29c21cb40b8..e69a76a8c3badc76ab1f67ba74e3c55c4b1b1054 100644
--- a/src/main/java/org/olat/course/assessment/IndentedNodeRenderer.java
+++ b/src/main/java/org/olat/course/assessment/IndentedNodeRenderer.java
@@ -90,9 +90,9 @@ public class IndentedNodeRenderer implements CustomCellRenderer, FlexiCellRender
 		
 		sb.append("<i class=\"o_icon ").append(cssClass).append("\"> </i> <span");
 		if (altText != null) {
-			sb.append(" title= \"").append(StringHelper.escapeHtml(altText));
+			sb.append(" title= \"").append(StringHelper.escapeHtml(altText)).append("\"");
 		}
-		sb.append("\">").append(StringHelper.escapeHtml(title)).append("</span>");
+		sb.append(">").append(StringHelper.escapeHtml(title)).append("</span>");
 	}
 	
 	private void appendIndent(StringOutput sb, int indent) {
diff --git a/src/main/java/org/olat/course/assessment/_content/assessment_index.html b/src/main/java/org/olat/course/assessment/_content/assessment_index.html
index 6f69f81445a5754412b40138c061ddb9d8f886f0..a0a4cd4b9d3eceb9ff037f147c91b5c87b9e22e4 100644
--- a/src/main/java/org/olat/course/assessment/_content/assessment_index.html
+++ b/src/main/java/org/olat/course/assessment/_content/assessment_index.html
@@ -22,4 +22,4 @@ $r.contextHelpWithWrapper("Using Course Tools#_bewertungswerkzeug")
 
 #else
 	<p>$r.translate("index.noAssessableNodes")</p>
-#end
+#end
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_de.properties
index a8591c0a8ce399552d7ff95420066e442b8e91ca..5a3bff0151d7bce3bbdd951699f7ddc1be277cf0 100644
--- a/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_de.properties
@@ -68,7 +68,7 @@ bulk.wizard.title=Massenbewertung
 choose.node.desc=W\u00E4hlen Sie einen bewertbaren Baustein aus diesem Kurs f\u00FCr den eine Massenbewertung durchgef\u00FChrt werden soll. 
 choose.node.title=Kursbaustein ausw\u00E4hlen
 chooseColumns.description=W\u00E4hlen Sie die Spalten Ihrer Bewertungsdaten aus die in diesem Import verwendet werden sollen. 
-chooseColumns.skip.description=F\u00FCr den gew\u00E4hlten Kursbaustein kann dieser Schritt \u00FCbersprungen werden, es sind keine Punket, Stati oder Kommentare vorhanden die Spalten zugewiesen werden m\u00FCssten. W\u00E4hlen Sie "weiter".
+chooseColumns.skip.description=F\u00FCr den gew\u00E4hlten Kursbaustein kann dieser Schritt \u00FCbersprungen werden, es sind keine Punkte, Status oder Kommentare vorhanden die Spalten zugewiesen werden m\u00FCssten. W\u00E4hlen Sie "Weiter".
 chooseColumns.title=Spaltenzuweisung
 column=Spalte {0}
 column.dontuse=Ignorieren
diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java
index dd441c9473522c09ef5c1c4cbc1e355c01b41478..da74d28afd8ab6df8445232cf1c95c4a8275019c 100644
--- a/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java
@@ -33,7 +33,6 @@ import org.olat.core.util.StringHelper;
 import org.olat.course.assessment.AssessmentToolManager;
 import org.olat.course.assessment.model.AssessmentStatistics;
 import org.olat.course.assessment.model.SearchAssessedIdentityParams;
-import org.olat.course.assessment.model.UserCourseInfosImpl;
 import org.olat.modules.assessment.AssessmentEntry;
 import org.olat.modules.assessment.model.AssessmentEntryStatus;
 import org.olat.repository.RepositoryEntry;
@@ -55,7 +54,7 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager {
 	private DB dbInstance;
 
 	@Override
-	public int getNumberOfAssessedIndetities(Identity coach, SearchAssessedIdentityParams params) {
+	public int getNumberOfAssessedIdentities(Identity coach, SearchAssessedIdentityParams params) {
 		//count all possible participants for the coach permissions
 		TypedQuery<Long> countUsers = createAssessedIdentities(coach, params, Long.class);
 		int numOfAssessedIdentites = 0;
@@ -65,14 +64,69 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager {
 		}
 		return numOfAssessedIdentites;
 	}
-	
+
+
+	@Override
+	public int getNumberOfParticipants(Identity coach, SearchAssessedIdentityParams params) {
+		RepositoryEntry courseEntry = params.getEntry();
+		
+		int numOfParticipants = 0;
+		if(params.isAdmin()) {
+			StringBuilder sb = new StringBuilder();
+			sb.append("select count(participant.identity.key) from repoentrytogroup as rel")
+	          .append("  inner join rel.group as bGroup")
+	          .append("  inner join bGroup.members as participant on (participant.role='").append(GroupRoles.participant.name()).append("')")
+	          .append("  where rel.entry.key=:repoEntryKey)");
+			
+			List<Number> count = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), Number.class)
+				.setParameter("repoEntryKey", courseEntry.getKey())
+				.getResultList();
+			numOfParticipants = count == null || count.isEmpty() || count.get(0) == null ? 0 : count.get(0).intValue();
+			
+			//count the users which login but are not members of the course
+			if(params.isNonMembers()) {
+				StringBuilder sc = new StringBuilder();
+				sc.append("select count(infos.key) from usercourseinfos as infos ")
+				  .append(" inner join infos.resource as infosResource on (infosResource.key=:resourceKey)")
+				  .append(" where not exists (select membership.identity from repoentrytogroup as rel, bgroupmember as membership")
+		          .append("   where rel.entry.key=:repoEntryKey and rel.group.key=membership.group.key and membership.identity.key=infos.identity.key")
+		          .append("  )");
+				
+				List<Number> countAlt = dbInstance.getCurrentEntityManager()
+					.createQuery(sc.toString(), Number.class)
+					.setParameter("repoEntryKey", courseEntry.getKey())
+					.setParameter("resourceKey", courseEntry.getOlatResource().getKey())
+					.getResultList();
+				numOfParticipants += countAlt == null || countAlt.isEmpty() || countAlt.get(0) == null ? 0 : countAlt.get(0).intValue();
+			}
+			
+		} else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) {
+			StringBuilder sb = new StringBuilder();
+			sb.append("select count(participant.identity.key) from repoentrytogroup as rel")
+	          .append("  inner join rel.group as bGroup")
+	          .append("  inner join bGroup.members as coach on (coach.identity.key=:identityKey and coach.role='").append(GroupRoles.coach.name()).append("')")
+	          .append("  inner join bGroup.members as participant on (participant.role='").append(GroupRoles.participant.name()).append("')")
+	          .append("  where rel.entry.key=:repoEntryKey)");
+			
+			List<Number> count = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), Number.class)
+				.setParameter("identityKey", coach.getKey())
+				.setParameter("repoEntryKey", courseEntry.getKey())
+				.getResultList();
+			numOfParticipants = count == null || count.isEmpty() || count.get(0) == null ? 0 : count.get(0).intValue();
+		}
+		return numOfParticipants;
+	}
+
 	@Override
 	public int getNumberOfInitialLaunches(Identity coach, SearchAssessedIdentityParams params) {
 		RepositoryEntry courseEntry = params.getEntry();
 
 		StringBuilder sf = new StringBuilder();
-		sf.append("select count(infos.key), infos.resource.key from ").append(UserCourseInfosImpl.class.getName()).append(" as infos ")
-		  .append(" where infos.resource.key=:resourceKey and (infos.identity in");
+		sf.append("select count(infos.key), infosResource.key from usercourseinfos as infos ")
+		  .append(" inner join infos.resource as infosResource on (infosResource.key=:resourceKey)")
+		  .append(" where (infos.identity in");
 		if(params.isAdmin()) {
 			sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant")
 	          .append("    where rel.entry.key=:repoEntryKey and rel.group=participant.group")
@@ -80,17 +134,17 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager {
 	          .append("  )");
 			if(params.isNonMembers()) {
 				sf.append(" or not exists (select membership.identity from repoentrytogroup as rel, bgroupmember as membership")
-		          .append("    where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=infos.identity")
+		          .append("    where rel.entry.key=:repoEntryKey and rel.group.key=membership.group.key and membership.identity.key=infos.identity.key")
 		          .append("  )");
 			}
 		} else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) {
 			sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach")
 	          .append("    where rel.entry.key=:repoEntryKey")
-	          .append("      and rel.group=coach.group and coach.role='").append(GroupRoles.coach.name()).append("' and coach.identity.key=:identityKey")
-	          .append("      and rel.group=participant.group and participant.role='").append(GroupRoles.participant.name()).append("'")
+	          .append("      and rel.group.key=coach.group.key and coach.role='").append(GroupRoles.coach.name()).append("' and coach.identity.key=:identityKey")
+	          .append("      and rel.group.key=participant.group.key and participant.role='").append(GroupRoles.participant.name()).append("'")
 	          .append("  )");
 		}
-		sf.append(" ) group by infos.resource.key");
+		sf.append(" ) group by infosResource.key");
 
 		TypedQuery<Object[]> infos = dbInstance.getCurrentEntityManager()
 			.createQuery(sf.toString(), Object[].class)
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseOverviewController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseOverviewController.java
index 983ebabeb7d8a014f77735d0db81ad1078dbeb18..81de92bfc96d0d57e9fe6c0f8d7927b9c99e5617 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseOverviewController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseOverviewController.java
@@ -19,8 +19,6 @@
  */
 package org.olat.course.assessment.ui.tool;
 
-import java.util.List;
-
 import org.olat.core.commons.services.notifications.PublisherData;
 import org.olat.core.commons.services.notifications.SubscriptionContext;
 import org.olat.core.commons.services.notifications.ui.ContextualSubscriptionController;
@@ -33,9 +31,6 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
-import org.olat.core.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
 import org.olat.core.util.Util;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
@@ -55,7 +50,7 @@ import org.springframework.beans.factory.annotation.Autowired;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
-public class AssessmentCourseOverviewController extends BasicController implements Activateable2 {
+public class AssessmentCourseOverviewController extends BasicController {
 	
 	protected static final Event SELECT_USERS_EVENT = new Event("assessment-tool-select-users");
 	protected static final Event SELECT_GROUPS_EVENT = new Event("assessment-tool-select-groups");
@@ -119,6 +114,7 @@ public class AssessmentCourseOverviewController extends BasicController implemen
 		int numOfAssessedIdentities = statisticsCtrl.getNumOfAssessedIdentities();
 		assessedIdentitiesLink = LinkFactory.createLink("assessed.identities", "assessed.identities", getTranslator(), mainVC, this, Link.NONTRANSLATED);
 		assessedIdentitiesLink.setCustomDisplayText(translate("assessment.tool.numOfAssessedIdentities", new String[]{ Integer.toString(numOfAssessedIdentities) }));
+		assessedIdentitiesLink.setElementCssClass("o_sel_assessment_tool_assessed_users");
 		assessedIdentitiesLink.setIconLeftCSS("o_icon o_icon_user");
 		
 		int numOfPassed = statisticsCtrl.getNumOfPassed();
@@ -157,11 +153,6 @@ public class AssessmentCourseOverviewController extends BasicController implemen
 		//
 	}
 
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		//
-	}
-
 	@Override
 	protected void event(UserRequest ureq, Controller source, Event event) {
 		if(toReviewCtrl == source) {
@@ -184,4 +175,4 @@ public class AssessmentCourseOverviewController extends BasicController implemen
 			fireEvent(ureq, SELECT_FAILED_EVENT);
 		}
 	}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseStatisticsSmallController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseStatisticsSmallController.java
index 6f853764e3cc373ccea26216b5f96a404e206510..ea7e34e0f4781fa8c7fc51080659c140dd9cf333 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseStatisticsSmallController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseStatisticsSmallController.java
@@ -50,6 +50,7 @@ public class AssessmentCourseStatisticsSmallController extends BasicController {
 	
 	private int numOfPassed;
 	private int numOfFailed;
+	private int numOfParticipants;
 	private int numOfAssessedIdentities;
 	
 	@Autowired
@@ -78,25 +79,32 @@ public class AssessmentCourseStatisticsSmallController extends BasicController {
 		return numOfAssessedIdentities;
 	}
 	
+	public int getNumOfParticipants() {
+		return numOfParticipants;
+	}
+	
 	public void updateStatistics() {
 		ICourse course = CourseFactory.loadCourse(courseEntry);
 		String rootNodeIdent = course.getRunStructure().getRootNode().getIdent();
 		
 		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, rootNodeIdent, null, assessmentCallback);
-		numOfAssessedIdentities = assessmentToolManager.getNumberOfAssessedIndetities(getIdentity(), params);
+		numOfAssessedIdentities = assessmentToolManager.getNumberOfAssessedIdentities(getIdentity(), params);
 		mainVC.contextPut("numOfAssessedIdentities", numOfAssessedIdentities);
 		
+		numOfParticipants = assessmentToolManager.getNumberOfParticipants(getIdentity(), params);
+		mainVC.contextPut("numOfParticipants", numOfParticipants);
+		
 		AssessmentStatistics stats = assessmentToolManager.getStatistics(getIdentity(), params);
 		mainVC.contextPut("scoreAverage", AssessmentHelper.getRoundedScore(stats.getAverageScore()));
 		numOfPassed = stats.getCountPassed();
 		mainVC.contextPut("numOfPassed", numOfPassed);
-		int percentPassed = numOfAssessedIdentities == 0 ? 0 :
-				Math.round(100.0f * (stats.getCountPassed() / numOfAssessedIdentities));
+		int percentPassed = numOfParticipants == 0 ? 0 :
+				Math.round(100.0f * (stats.getCountPassed() / numOfParticipants));
 		mainVC.contextPut("percentPassed", percentPassed);
 		numOfFailed = stats.getCountFailed();
 		mainVC.contextPut("numOfFailed", numOfFailed);
-		int percentFailed = numOfAssessedIdentities == 0 ? 0 :
-				Math.round(100.0f * (stats.getCountFailed() / numOfAssessedIdentities));
+		int percentFailed = numOfParticipants == 0 ? 0 :
+				Math.round(100.0f * (stats.getCountFailed() / numOfParticipants));
 		mainVC.contextPut("percentFailed", percentFailed);
 		
 		int numOfLaunches = assessmentToolManager.getNumberOfInitialLaunches(getIdentity(), params);
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentForm.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentForm.java
index 835881965ad9bb8645d7310c70c60d9ca5d73c6b..712a0dcf7b342ba5ff0708b5576052b874be189f 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentForm.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentForm.java
@@ -141,7 +141,9 @@ public class AssessmentForm extends FormBasicController {
 
 	public boolean isScoreDirty() {
 		if (!hasScore) return false;
-		if (scoreValue == null) return !score.getValue().equals("");
+		if (scoreValue == null) {
+			return StringHelper.containsNonWhitespace(score.getValue());
+		}
 		return parseFloat(score) != scoreValue.floatValue();
 	}
 	
@@ -232,38 +234,34 @@ public class AssessmentForm extends FormBasicController {
 	}
 	
 	protected void doUpdateAssessmentData() {
-		ScoreEvaluation scoreEval = null;
-		Float newScore = null;
-		Boolean newPassed = null;
+		Float updatedScore = null;
+		Boolean updatedPassed = null;
 		
 		if (isHasAttempts() && isAttemptsDirty()) {
 			assessableCourseNode.updateUserAttempts(new Integer(getAttempts()), assessedUserCourseEnv, getIdentity());
 		}
 
-		if (isHasScore() && isScoreDirty()) {
-			newScore = getScore();
-			// Update properties in db later... see
-			// courseNode.updateUserSocreAndPassed...
+		if (isHasScore()) {
+			if(isScoreDirty()) {
+				updatedScore = getScore();
+			} else {
+				updatedScore = scoreValue;
+			}
 		}
 		
 		if (isHasPassed()) {
 			if (getCut() != null && getScore() != null) {
-				newPassed = getScore() >= getCut().floatValue()
-				          ? Boolean.TRUE : Boolean.FALSE;
+				updatedPassed = updatedScore.floatValue() >= getCut().floatValue() ? Boolean.TRUE : Boolean.FALSE;
 			} else {
-        //"passed" info was changed or not 
+				//"passed" info was changed or not 
 				String selectedKeyString = getPassed().getSelectedKey();
 				if("true".equalsIgnoreCase(selectedKeyString) || "false".equalsIgnoreCase(selectedKeyString)) {
-					newPassed = Boolean.valueOf(selectedKeyString);
-				}
-				else {
-          // "undefined" was choosen
-					newPassed = null;
-				}				
+					updatedPassed = Boolean.valueOf(selectedKeyString);
+				}			
 			}
 		}
 		// Update score,passed properties in db
-		scoreEval = new ScoreEvaluation(newScore, newPassed);
+		ScoreEvaluation scoreEval = new ScoreEvaluation(updatedScore, updatedPassed);
 		assessableCourseNode.updateUserScoreEvaluation(scoreEval, assessedUserCourseEnv, getIdentity(), false);
 
 		if (isHasComment() && isUserCommentDirty()) {
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityCourseController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityCourseController.java
index 423ea79b6e4f9d7975b68cd9a7714c2997758557..507eaf8151faf2f1519d01d0a7bb0642f0d14f42 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityCourseController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityCourseController.java
@@ -151,8 +151,10 @@ public class AssessmentIdentityCourseController extends BasicController implemen
 			if(event == Event.DONE_EVENT) {
 				treeOverviewCtrl.doIdentityAssessmentOverview(ureq);
 				stackPanel.popController(currentNodeCtrl);
+				fireEvent(ureq, Event.CHANGED_EVENT);
 			} else if(event == Event.CHANGED_EVENT) {
 				treeOverviewCtrl.doIdentityAssessmentOverview(ureq);
+				fireEvent(ureq, Event.CHANGED_EVENT);
 			} else if(event == Event.CANCELLED_EVENT) {
 				stackPanel.popController(currentNodeCtrl);
 			}
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityListCourseTreeController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityListCourseTreeController.java
index 1197ead484c93f4fd63abdc884ddb2cbe65ee0a0..649719bc7fead67da2dc5ca6dd039d8450b26396 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityListCourseTreeController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityListCourseTreeController.java
@@ -97,7 +97,8 @@ public class AssessmentIdentityListCourseTreeController extends BasicController
 
 	@Override
 	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) {
+		boolean emptyEntries = entries == null || entries.isEmpty();
+		if(emptyEntries) {
 			TreeNode rootNode = menuTree.getTreeModel().getRootNode();
 			if(rootNode.getUserObject() instanceof CourseNode) {
 				doSelectCourseNode(ureq, (CourseNode)rootNode.getUserObject());
@@ -108,17 +109,16 @@ public class AssessmentIdentityListCourseTreeController extends BasicController
 				Long nodeIdent = entries.get(0).getOLATResourceable().getResourceableId();
 				CourseNode courseNode = CourseFactory.loadCourse(courseEntry).getRunStructure().getNode(nodeIdent.toString());
 				if(courseNode != null) {
-					Controller ctrl = doSelectCourseNode(ureq, courseNode);
-					if(ctrl instanceof Activateable2) {
-						List<ContextEntry> subEntries = entries.subList(1, entries.size());
-						((Activateable2)ctrl).activate(ureq, subEntries, null);
-					}
+					doSelectCourseNode(ureq, courseNode);
 				}
 			}
 		}
 		
 		if(currentCtrl instanceof Activateable2) {
-			((Activateable2)currentCtrl).activate(ureq, entries, state);
+			List<ContextEntry> subEntries = emptyEntries
+					? entries : entries.subList(1, entries.size());
+			StateEntry subState = emptyEntries ? state : entries.get(0).getTransientState();
+			((Activateable2)currentCtrl).activate(ureq, subEntries, subState);
 		}
 	}
 
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java
index 9bfcc7803b0ddd8734a9ce4393aed692fb4c2918..5f53fd56ea5df3b7ce723f84095d4d9fd88ef5f7 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java
@@ -103,8 +103,12 @@ public class AssessmentToolController extends MainLayoutBasicController implemen
 	
 	@Override
 	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.size() == 0) {
-			//
+		if(entries == null || entries.size() == 0) return;
+		
+		String resName = entries.get(0).getOLATResourceable().getResourceableTypeName();
+		if("Users".equalsIgnoreCase(resName)) {
+			List<ContextEntry> subEntries = entries.subList(1, entries.size());
+			doSelectUsersView(ureq).activate(ureq, subEntries, entries.get(0).getTransientState());
 		}
 	}
 
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/IdentityCertificatesController.java b/src/main/java/org/olat/course/assessment/ui/tool/IdentityCertificatesController.java
index 03ccba1573b2d594154fdd4f9435e416bfb36433..9ab0290fecfa57841d3568e0da8735f976346d69 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/IdentityCertificatesController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/IdentityCertificatesController.java
@@ -38,10 +38,12 @@ import org.olat.core.id.Identity;
 import org.olat.core.id.IdentityEnvironment;
 import org.olat.core.id.Roles;
 import org.olat.core.util.Formatter;
+import org.olat.core.util.Util;
 import org.olat.core.util.coordinate.CoordinatorManager;
 import org.olat.core.util.event.GenericEventListener;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
+import org.olat.course.assessment.AssessmentMainController;
 import org.olat.course.certificate.Certificate;
 import org.olat.course.certificate.CertificateEvent;
 import org.olat.course.certificate.CertificateTemplate;
@@ -56,6 +58,7 @@ import org.olat.course.run.scoring.ScoreEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.course.run.userview.UserCourseEnvironmentImpl;
 import org.olat.repository.RepositoryEntry;
+import org.olat.user.UserManager;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
@@ -79,6 +82,8 @@ public class IdentityCertificatesController extends BasicController implements G
 	private final boolean canDelete;
 	private final Formatter formatter;
 	
+	@Autowired
+	private UserManager userManager;
 	@Autowired
 	private BaseSecurity securityManager;
 	@Autowired
@@ -87,6 +92,7 @@ public class IdentityCertificatesController extends BasicController implements G
 	public IdentityCertificatesController(UserRequest ureq, WindowControl wControl,
 			RepositoryEntry courseEntry, Identity assessedIdentity) {
 		super(ureq, wControl);
+		setTranslator(Util.createPackageTranslator(AssessmentMainController.class, getLocale(), getTranslator()));
 
 		this.courseEntry = courseEntry;
 		this.assessedIdentity = assessedIdentity;
@@ -196,7 +202,8 @@ public class IdentityCertificatesController extends BasicController implements G
 			doGenerateCertificate(ureq);
 		} else {
 			String title = translate("confirm.certificate.title");
-			String text = translate("confirm.certificate.text");
+			String fullName = userManager.getUserDisplayName(assessedIdentity);
+			String text = translate("confirm.certificate.description", new String[] { fullName });
 			confirmCertificateCtrl = activateYesNoDialog(ureq, title, text, confirmCertificateCtrl);
 		}
 	}
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
index edf21f8c67d4fb8576013c8c5c0370938ea3115c..90d8e34cb477988d7f005e3fe5d96a6e0a26a28a 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
@@ -53,10 +53,12 @@ import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
 import org.olat.core.id.Identity;
+import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.StateEntry;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
+import org.olat.core.util.resource.OresHelper;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
 import org.olat.course.assessment.AssessmentMainController;
@@ -77,9 +79,9 @@ import org.olat.modules.assessment.model.AssessmentEntryStatus;
 import org.olat.modules.assessment.ui.AssessedIdentityController;
 import org.olat.modules.assessment.ui.AssessedIdentityElementRow;
 import org.olat.modules.assessment.ui.AssessedIdentityListState;
+import org.olat.modules.assessment.ui.AssessmentToolContainer;
 import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback;
 import org.olat.modules.assessment.ui.ScoreCellRenderer;
-import org.olat.modules.assessment.ui.AssessmentToolContainer;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryService;
 import org.olat.user.UserManager;
@@ -316,6 +318,7 @@ public class IdentityListCourseNodeController extends FormBasicController implem
 	private void updateModel(UserRequest ureq, Identity assessedIdentity) {
 		updateModel(ureq, null, null, null);
 	}
+	
 	/*
 	private boolean accept(AssessmentEntry entry, SearchAssessedIdentityParams params) {
 		boolean ok = true;
@@ -479,9 +482,11 @@ public class IdentityListCourseNodeController extends FormBasicController implem
 		
 		Identity assessedIdentity = securityManager.loadIdentityByKey(row.getIdentityKey());
 		String fullName = userManager.getUserDisplayName(assessedIdentity);
-		
+
+		OLATResourceable ores = OresHelper.createOLATResourceableInstance("Identity", assessedIdentity.getKey());
+		WindowControl bwControl = addToHistory(ureq, ores, null);
 		if(courseNode.getParent() == null) {
-			currentIdentityCtrl = new AssessmentIdentityCourseController(ureq, getWindowControl(), stackPanel,
+			currentIdentityCtrl = new AssessmentIdentityCourseController(ureq, bwControl, stackPanel,
 					courseEntry, assessedIdentity);
 		} else {
 			currentIdentityCtrl = new AssessmentIdentityCourseNodeController(ureq, getWindowControl(), stackPanel,
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/_content/course_overview.html b/src/main/java/org/olat/course/assessment/ui/tool/_content/course_overview.html
index f26184cfff7eb4f113843433f5dbe6964be21810..5b16e6a523a5262a38c7ae5bd2f16b7ebd8d7a1f 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/_content/course_overview.html
+++ b/src/main/java/org/olat/course/assessment/ui/tool/_content/course_overview.html
@@ -1,3 +1,4 @@
+<div id="o_assessment_tool_main">
 $r.contextHelpWithWrapper("Using Course Tools#_bewertungswerkzeug")
 <h2><i class="o_icon o_icon_assessment_tool"> </i>  $r.translate("assessment.tool.overview")</h2>
 #if(!$hasAssessableNodes)
@@ -56,3 +57,4 @@ $r.contextHelpWithWrapper("Using Course Tools#_bewertungswerkzeug")
 	<div class="col-sm-6"></div>
 	#end
 </div>
+</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/_content/course_stats_small.html b/src/main/java/org/olat/course/assessment/ui/tool/_content/course_stats_small.html
index b489df0b55447270478a754c2c347187e4878386..2f044dd1b813158f929e3046ba148f78518b573b 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/_content/course_stats_small.html
+++ b/src/main/java/org/olat/course/assessment/ui/tool/_content/course_stats_small.html
@@ -4,15 +4,15 @@
 	</div>
 	<table class="table">
 		<tr>
-			<th>$r.translate("table.header.numOfAssessedIdentities")</th>
-			<td>$numOfAssessedIdentities</td>
+			<th>$r.translate("table.header.numOfParticipants")</th>
+			<td>$numOfParticipants</td>
 		</tr>
 		<tr>
 			<th>$r.translate("table.header.numOfInitialLaunch")</th>
 			<td>
 			#if($numOfInitialLaunch && $numOfInitialLaunch == 0)
 				<i class="o_icon o_green_led"> </i>
-			#elseif($numOfInitialLaunch && $numOfInitialLaunch == $numOfAssessedIdentities)
+			#elseif($numOfInitialLaunch && $numOfInitialLaunch == $numOfParticipants)
 				<i class="o_icon o_red_led"> </i>
 			#else
 				<i class="o_icon o_yellow_led"> </i>
@@ -27,13 +27,13 @@
 			<th>$r.translate("table.header.numOfPassed")</th>
 			<td><div class="progress" title="">
 				#if($numOfPassed && $numOfPassed > 0)
-				<div class="progress-bar" role="progressbar" aria-valuenow="$numOfPassed" aria-valuemin="0" aria-valuemax="$numOfAssessedIdentities" style="width: ${percentPassed}%;">
+				<div class="progress-bar" role="progressbar" aria-valuenow="$numOfPassed" aria-valuemin="0" aria-valuemax="$numOfParticipants" style="width: ${percentPassed}%;">
 					<span class="sr-only">${percentPassed}%</span>
 				</div>
 				#end
 				
 				#if($numOfFailed && $numOfFailed > 0)
-				<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="$numOfFailed" aria-valuemin="0" aria-valuemax="$numOfAssessedIdentities" style="width: ${percentFailed}%;">
+				<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="$numOfFailed" aria-valuemin="0" aria-valuemax="$numOfParticipants" style="width: ${percentFailed}%;">
 					<span class="sr-only">${percentFailed}%</span>
 				</div>
 				#end
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_de.properties
index 6dd8a379cd6db06a013e4074c6b951deadaff4d4..28796be8a51c316a61a3648d573992ce5763a931 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_de.properties
@@ -1,38 +1,42 @@
-#Mon Mar 02 09:54:04 CET 2009
-certificate=Zertifikate
-generate.certificate=Zertifikat erzeugen
-command.next=Weiter zu nächste Benutzer
-command.previous=Zurück zum letzten Benutzer
-users=Benutzer
-table.header.name=Benutzername
-statistics.small.overview=Statistiken Übersicht
-table.header.numOfAssessedIdentities=$org.olat.modules.assessment.ui\:table.header.numOfAssessedIdentities
-table.header.numOfPassed=$org.olat.modules.assessment.ui\:table.header.numOfPassed
-table.header.scoreAverage=$org.olat.modules.assessment.ui\:table.header.scoreAverage
-table.header.numOfInitialLaunch=$org.olat.modules.assessment.ui\:table.header.numOfInitialLaunch
-table.header.assessmentStatus=$org.olat.modules.assessment.ui\:table.header.assessmentStatus
-table.header.elements.toReview=Elementen
-assessment.status.notStart=$org.olat.modules.assessment.ui\:assessment.status.notStart
+#Fri Aug 05 08:43:51 CEST 2016
+assessment.status.done=$org.olat.modules.assessment.ui\:assessment.status.done
 assessment.status.inProgress=$org.olat.modules.assessment.ui\:assessment.status.inProgress
 assessment.status.inReview=$org.olat.modules.assessment.ui\:assessment.status.inReview
-assessment.status.done=$org.olat.modules.assessment.ui\:assessment.status.done
-assessment.tool.overview=Ubersicht
-assessment.tool.numOfAssessedIdentities=$org.olat.modules.assessment.ui\:assessment.tool.numOfAssessedIdentities
+assessment.status.notStart=$org.olat.modules.assessment.ui\:assessment.status.notStart
 assessment.tool.numOfAssessedGroups=$org.olat.modules.assessment.ui\:assessment.tool.numOfAssessedGroups
-assessment.tool.numOfPassed=$org.olat.modules.assessment.ui\:assessment.tool.numOfPassed
+assessment.tool.numOfAssessedIdentities=$org.olat.modules.assessment.ui\:assessment.tool.numOfAssessedIdentities
 assessment.tool.numOfFailed=$org.olat.modules.assessment.ui\:assessment.tool.numOfFailed
-table.entries=Einträge
-waiting.review=$org.olat.modules.assessment.ui\:waiting.review
-no.certificate=Kein Zertifikat vorhanden
-elements.to.review=<i class="o_icon o_icon_warning"> </i> {0} unerledigt
-sub.details=Details
-previous=Zurück
+assessment.tool.numOfPassed=$org.olat.modules.assessment.ui\:assessment.tool.numOfPassed
+assessment.tool.overview=\u00DCbersicht
+certificate=Zertifikate
+confirm.certificate.deleted=$org.olat.course.certificate.ui\:confirm.certificate.deleted
+certificates.wizard.title=$org.olat.course.certificate.ui\:certificates.wizard.title
+confirm.delete.certificate.title=$org.olat.course.certificate.ui\:confirm.delete.certificate.title
+confirm.delete.certificate.text=$org.olat.course.certificate.ui\:confirm.delete.certificate.text
+command.next=Weiter zu n\u00E4chste Benutzer
+command.previous=Zur\u00FCck zum letzten Benutzer
+elements.to.review=<i class\="o_icon o_icon_warning"> </i> {0} unerledigt
 filter=$org.olat.modules.assessment.ui\:filter
-filter.passed=$org.olat.modules.assessment.ui\:filter.passed
+filter.done=$org.olat.modules.assessment.ui\:filter.done
 filter.failed=$org.olat.modules.assessment.ui\:filter.failed
+filter.groups=$org.olat.modules.assessment.ui\:filter.groups
 filter.inProgress=$org.olat.modules.assessment.ui\:filter.inProgress
 filter.inReview=$org.olat.modules.assessment.ui\:filter.inReview
-filter.done=$org.olat.modules.assessment.ui\:filter.done
-filter.groups=$org.olat.modules.assessment.ui\:filter.groups
-certificates.wizard.title=$org.olat.course.certificate.ui\:certificates.wizard.title
+filter.passed=$org.olat.modules.assessment.ui\:filter.passed
 generate.certificate=$org.olat.course.certificate.ui\:generate.certificate
+no.certificate=Kein Zertifikat vorhanden
+msg.certificate.pending=$org.olat.course.certificate.ui\:msg.certificate.pending
+previous=Zur\u00FCck
+statistics.small.overview=Statistiken \u00DCbersicht
+sub.details=Details
+table.entries=Eintr\u00E4ge
+table.header.assessmentStatus=$org.olat.modules.assessment.ui\:table.header.assessmentStatus
+table.header.elements.toReview=Element
+table.header.name=Benutzername
+table.header.numOfParticipants=$org.olat.modules.assessment.ui\:table.header.numOfParticipants
+table.header.numOfAssessedIdentities=$org.olat.modules.assessment.ui\:table.header.numOfAssessedIdentities
+table.header.numOfInitialLaunch=$org.olat.modules.assessment.ui\:table.header.numOfInitialLaunch
+table.header.numOfPassed=$org.olat.modules.assessment.ui\:table.header.numOfPassed
+table.header.scoreAverage=$org.olat.modules.assessment.ui\:table.header.scoreAverage
+users=Benutzer / Kursstruktur
+waiting.review=$org.olat.modules.assessment.ui\:waiting.review
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_en.properties
index f8c8f7ed80b0dfb4f9fe0b3600b5ae48d6e050ae..055d78faebda0aaf8efea51cfeb34d5200c11ab8 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_en.properties
@@ -1,4 +1,4 @@
-#Tue Jun 28 15:08:56 CEST 2016
+#Fri Aug 05 08:44:19 CEST 2016
 assessment.status.done=$org.olat.modules.assessment.ui\:assessment.status.done
 assessment.status.inProgress=$org.olat.modules.assessment.ui\:assessment.status.inProgress
 assessment.status.inReview=$org.olat.modules.assessment.ui\:assessment.status.inReview
@@ -10,6 +10,9 @@ assessment.tool.numOfPassed=$org.olat.modules.assessment.ui\:assessment.tool.num
 assessment.tool.overview=Overview
 certificate=Certificates
 certificates.wizard.title=$org.olat.course.certificate.ui\:certificates.wizard.title
+confirm.certificate.deleted=$org.olat.course.certificate.ui\:confirm.certificate.deleted
+confirm.delete.certificate.title=$org.olat.course.certificate.ui\:confirm.delete.certificate.title
+confirm.delete.certificate.text=$org.olat.course.certificate.ui\:confirm.delete.certificate.text
 command.next=To the next user
 command.previous=Back to previous user
 elements.to.review=<i class\="o_icon o_icon_warning"> </i> {0} pending
@@ -22,6 +25,7 @@ filter.inReview=$org.olat.modules.assessment.ui\:filter.inReview
 filter.passed=$org.olat.modules.assessment.ui\:filter.passed
 generate.certificate=$org.olat.course.certificate.ui\:generate.certificate
 no.certificate=No certificate available
+msg.certificate.pending=$org.olat.course.certificate.ui\:msg.certificate.pending
 previous=Previous
 statistics.small.overview=Statistics overview
 sub.details=Details
@@ -29,9 +33,10 @@ table.entries=Entries
 table.header.assessmentStatus=$org.olat.modules.assessment.ui\:table.header.assessmentStatus
 table.header.elements.toReview=Elements
 table.header.name=User name
+table.header.numOfParticipants=$org.olat.modules.assessment.ui\:table.header.numOfParticipants
 table.header.numOfAssessedIdentities=$org.olat.modules.assessment.ui\:table.header.numOfAssessedIdentities
 table.header.numOfInitialLaunch=$org.olat.modules.assessment.ui\:table.header.numOfInitialLaunch
 table.header.numOfPassed=$org.olat.modules.assessment.ui\:table.header.numOfPassed
 table.header.scoreAverage=$org.olat.modules.assessment.ui\:table.header.scoreAverage
-users=Users
+users=Users / course structure
 waiting.review=$org.olat.modules.assessment.ui\:waiting.review
diff --git a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
index 7fa24cd3170d57f3eaacf0d4afcb015d6d352c06..de5999bc8fedc7d968ebe3636f0e03ff5cd2fe05 100644
--- a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
@@ -88,6 +88,7 @@ import org.olat.ims.qti.statistics.ui.QTI12StatisticsToolController;
 import org.olat.ims.qti21.model.QTI21StatisticSearchParams;
 import org.olat.ims.qti21.ui.QTI21AssessmentDetailsController;
 import org.olat.ims.qti21.ui.statistics.QTI21StatisticResourceResult;
+import org.olat.ims.qti21.ui.statistics.QTI21StatisticsToolController;
 import org.olat.modules.ModuleConfiguration;
 import org.olat.modules.assessment.AssessmentEntry;
 import org.olat.modules.iq.IQSecurityCallback;
@@ -200,12 +201,29 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements Pe
 	public List<Controller> createAssessmentTools(UserRequest ureq, WindowControl wControl, TooledStackedPanel stackPanel,
 			CourseEnvironment courseEnv, AssessmentToolOptions options) {
 		List<Controller> tools = new ArrayList<>();
-		tools.add(new QTI12StatisticsToolController(ureq, wControl, stackPanel, courseEnv, options, this));
-		if(options.getGroup() == null && options.getIdentities() != null && options.getIdentities().size() > 0) {
-			for(Identity assessedIdentity:options.getIdentities()) {
-				if(isTestRunning(assessedIdentity, courseEnv)) {
-					tools.add(new QTI12PullTestsToolController(ureq, wControl, courseEnv, options, this));
-					break;
+		
+		RepositoryEntry qtiTestEntry = getReferencedRepositoryEntry();
+		if(ImsQTI21Resource.TYPE_NAME.equals(qtiTestEntry.getOlatResource().getResourceableTypeName())) {
+			tools.add(new QTI21StatisticsToolController(ureq, wControl, stackPanel, courseEnv, options, this));
+			
+			
+			/*if(options.getGroup() == null && options.getIdentities() != null && options.getIdentities().size() > 0) {
+				for(Identity assessedIdentity:options.getIdentities()) {
+					if(isTestRunning(assessedIdentity, courseEnv)) {
+						tools.add(new QTI12PullTestsToolController(ureq, wControl, courseEnv, options, this));
+						break;
+					}
+				}
+			}*/
+			
+		} else {
+			tools.add(new QTI12StatisticsToolController(ureq, wControl, stackPanel, courseEnv, options, this));
+			if(options.getGroup() == null && options.getIdentities() != null && options.getIdentities().size() > 0) {
+				for(Identity assessedIdentity:options.getIdentities()) {
+					if(isTestRunning(assessedIdentity, courseEnv)) {
+						tools.add(new QTI12PullTestsToolController(ureq, wControl, courseEnv, options, this));
+						break;
+					}
 				}
 			}
 		}
diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java
index 410ae3772501119526a2f2842b8adb928a6cc45f..af3e3eb22d0f358985b8c5b23d2d490ea2f1a7d2 100644
--- a/src/main/java/org/olat/course/run/CourseRuntimeController.java
+++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java
@@ -150,7 +150,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 
 	//tools
 	private Link folderLink,
-		assessmentLink, assessment_v2_Link, archiverLink,
+		assessmentLink,  assessment_v2_Link, archiverLink,
 		courseStatisticLink, surveyStatisticLink, testStatisticLink,
 		areaLink, dbLink,
 		//settings
@@ -431,11 +431,11 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 				tools.addComponent(membersLink);
 			}
 			if (reSecurity.isEntryAdmin() || reSecurity.isCourseCoach() || reSecurity.isGroupCoach() || hasCourseRight(CourseRights.RIGHT_ASSESSMENT)) {
-				assessmentLink = LinkFactory.createToolLink("assessment",translate("command.openassessment"), this, "o_icon_assessment_tool");
-				assessmentLink.setElementCssClass("o_sel_course_assessment_tool");
-				tools.addComponent(assessmentLink);
 				
-				assessment_v2_Link = LinkFactory.createToolLink("assessment", translate("command.openassessment") + " v2", this, "o_icon_assessment_tool");
+				assessmentLink = LinkFactory.createToolLink("assessment", "<del>" + translate("command.openassessment") + "</del>", this, "o_icon_assessment_tool");
+				tools.addComponent(assessmentLink);
+
+				assessment_v2_Link = LinkFactory.createToolLink("assessment", translate("command.openassessment"), this, "o_icon_assessment_tool");
 				assessment_v2_Link.setElementCssClass("o_sel_course_assessment_tool");
 				tools.addComponent(assessment_v2_Link);
 				
diff --git a/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties
index 29f0a2b547d20dad84bfe11490bc641b0b69858b..223c8899f449bc5e5606402dff1ac389de647878 100644
--- a/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties
@@ -204,7 +204,7 @@ form.imd.title=Titel
 form.imd.error.empty.title=Bitte geben Sie einen Titel ein
 form.imd.tries=Anzahl L\u00F6sungsversuche
 form.imd.type=Typ
-form.metadata.cutvalue=Notwendige Punktzahl f&uuml;r 'bestanden'
+form.metadata.cutvalue=Notwendige Punktzahl f&uuml;r Bestanden'
 form.metadata.duration=Zeitbeschr\u00E4nkung
 form.metadata.globalfeedbackNsolution=Feedback / L&ouml;sungen f\u00FCr gesamten Test setzen
 form.metadata.globalfeedbackNsolution.hover=Bestimmen Sie, ob Feedback und Lösungen grundsätzlich dem Benutzer angezeigt werden sollen.
diff --git a/src/main/java/org/olat/ims/qti/statistics/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti/statistics/ui/_i18n/LocalStrings_de.properties
index 124433223caa40943583f805c12763a66d009ec1..0f4a50255407b48d061da051df2d95ce35d8b699 100644
--- a/src/main/java/org/olat/ims/qti/statistics/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti/statistics/ui/_i18n/LocalStrings_de.properties
@@ -27,7 +27,7 @@ chart.questions=Fragen
 chart.duration=Bearbeitungs-Dauer in Sekunden
 chart.percent=Prozent
 chart.maxscore=Maximale Punktzahl
-chart.cutscore=Notwendige Punktzahl für "bestanden"
+chart.cutscore=Notwendige Punktzahl für "Bestanden"
 
 
 chart.title.ovpassedfailed=Bestanden / Nicht bestanden
diff --git a/src/main/java/org/olat/ims/qti21/manager/openxml/QTI21WordExport.java b/src/main/java/org/olat/ims/qti21/manager/openxml/QTI21WordExport.java
index e00e209284f0684f60d6daf97fd9338508c59861..d20bc88e1a2a3d8aab292fd1cf6e9363ef8c9836 100644
--- a/src/main/java/org/olat/ims/qti21/manager/openxml/QTI21WordExport.java
+++ b/src/main/java/org/olat/ims/qti21/manager/openxml/QTI21WordExport.java
@@ -54,8 +54,8 @@ import org.olat.ims.qti21.QTI21Constants;
 import org.olat.ims.qti21.manager.CorrectResponsesUtil;
 import org.olat.ims.qti21.model.QTI21QuestionType;
 import org.olat.ims.qti21.model.xml.AssessmentHtmlBuilder;
-import org.olat.ims.qti21.model.xml.AssessmentItemFactory;
 import org.olat.ims.qti21.model.xml.AssessmentTestBuilder;
+import org.olat.ims.qti21.model.xml.QtiNodesExtractor;
 import org.olat.ims.qti21.model.xml.interactions.FIBAssessmentItemBuilder;
 import org.olat.ims.qti21.model.xml.interactions.FIBAssessmentItemBuilder.NumericalEntry;
 import org.olat.ims.qti21.model.xml.interactions.FIBAssessmentItemBuilder.TextEntry;
@@ -294,7 +294,7 @@ public class QTI21WordExport implements MediaResource {
 			default: typeDescription = null; break;
 		}
 		
-		Double maxScore = AssessmentItemFactory.extractMaxScore(item);
+		Double maxScore = QtiNodesExtractor.extractMaxScore(item);
 		
 		if(StringHelper.containsNonWhitespace(typeDescription) || maxScore != null) {
 			if(StringHelper.containsNonWhitespace(typeDescription)) {
diff --git a/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemFactory.java b/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemFactory.java
index ad76301de3380b322f4828eac1af43a8c756a0cb..fdb7b9fce14a1411792a78be4a377b7243cebca2 100644
--- a/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemFactory.java
+++ b/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemFactory.java
@@ -20,7 +20,6 @@
 package org.olat.ims.qti21.model.xml;
 
 import static org.olat.ims.qti21.QTI21Constants.MAXSCORE_CLX_IDENTIFIER;
-import static org.olat.ims.qti21.QTI21Constants.MAXSCORE_IDENTIFIER;
 import static org.olat.ims.qti21.QTI21Constants.MINSCORE_CLX_IDENTIFIER;
 import static org.olat.ims.qti21.QTI21Constants.SCORE_CLX_IDENTIFIER;
 import static org.olat.ims.qti21.QTI21Constants.SCORE_IDENTIFIER;
@@ -81,7 +80,6 @@ import uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseProcessing;
 import uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseRule;
 import uk.ac.ed.ph.jqtiplus.node.item.response.processing.SetOutcomeValue;
 import uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration;
-import uk.ac.ed.ph.jqtiplus.node.shared.BaseTypeAndCardinality;
 import uk.ac.ed.ph.jqtiplus.node.shared.FieldValue;
 import uk.ac.ed.ph.jqtiplus.node.shared.declaration.DefaultValue;
 import uk.ac.ed.ph.jqtiplus.node.test.View;
@@ -93,11 +91,8 @@ import uk.ac.ed.ph.jqtiplus.value.Cardinality;
 import uk.ac.ed.ph.jqtiplus.value.DirectedPairValue;
 import uk.ac.ed.ph.jqtiplus.value.FloatValue;
 import uk.ac.ed.ph.jqtiplus.value.IdentifierValue;
-import uk.ac.ed.ph.jqtiplus.value.MultipleValue;
 import uk.ac.ed.ph.jqtiplus.value.Orientation;
-import uk.ac.ed.ph.jqtiplus.value.SingleValue;
 import uk.ac.ed.ph.jqtiplus.value.StringValue;
-import uk.ac.ed.ph.jqtiplus.value.Value;
 
 /**
  * 
@@ -1024,41 +1019,7 @@ public class AssessmentItemFactory {
 		return list;
 	}
 	
-	public static void extractIdentifiersFromCorrectResponse(CorrectResponse correctResponse, List<Identifier> correctAnswers) {
-		BaseTypeAndCardinality responseDeclaration = correctResponse.getParent();
-		if(responseDeclaration.hasCardinality(Cardinality.MULTIPLE)) {
-			Value value = FieldValue.computeValue(Cardinality.MULTIPLE, correctResponse.getFieldValues());
-			if(value instanceof MultipleValue) {
-				MultipleValue multiValue = (MultipleValue)value;
-				for(SingleValue sValue:multiValue.getAll()) {
-					if(sValue instanceof IdentifierValue) {
-						IdentifierValue identifierValue = (IdentifierValue)sValue;
-						Identifier correctAnswer = identifierValue.identifierValue();
-						correctAnswers.add(correctAnswer);
-					}
-				}
-			}
-		} else if(responseDeclaration.hasCardinality(Cardinality.SINGLE)) {
-			Value value = FieldValue.computeValue(Cardinality.SINGLE, correctResponse.getFieldValues());
-			if(value instanceof IdentifierValue) {
-				IdentifierValue identifierValue = (IdentifierValue)value;
-				correctAnswers.add(identifierValue.identifierValue());
-			}
-		}
-	}
+
 	
-	public static Double extractMaxScore(AssessmentItem assessmentItem) {
-		Double maxScore = null;
-		OutcomeDeclaration outcomeDeclaration = assessmentItem.getOutcomeDeclaration(MAXSCORE_IDENTIFIER);
-		if(outcomeDeclaration != null) {
-			DefaultValue defaultValue = outcomeDeclaration.getDefaultValue();
-			if(defaultValue != null) {
-				Value maxScoreValue = defaultValue.evaluate();
-				if(maxScoreValue instanceof FloatValue) {
-					maxScore = new Double(((FloatValue)maxScoreValue).doubleValue());
-				}
-			}
-		}
-		return maxScore;
-	}
+
 }
diff --git a/src/main/java/org/olat/ims/qti21/model/xml/AssessmentTestBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/AssessmentTestBuilder.java
index dd52049f4d42c26b38772462b807840cb42e1036..f5d0872ca51afc9b3d6e4343e834afd61849b1cd 100644
--- a/src/main/java/org/olat/ims/qti21/model/xml/AssessmentTestBuilder.java
+++ b/src/main/java/org/olat/ims/qti21/model/xml/AssessmentTestBuilder.java
@@ -71,10 +71,15 @@ public class AssessmentTestBuilder {
 	}
 	
 	private void extract() {
+		extractMaxScore();
 		extractRules();
 		extractFeedbacks();
 	}
 	
+	private void extractMaxScore() {
+		maxScore = QtiNodesExtractor.extractMaxScore(assessmentTest);
+	}
+	
 	private void extractRules() {
 		if(assessmentTest.getOutcomeProcessing() != null) {
 			List<OutcomeRule> outcomeRules = assessmentTest.getOutcomeProcessing().getOutcomeRules();
diff --git a/src/main/java/org/olat/ims/qti21/model/xml/QtiNodesExtractor.java b/src/main/java/org/olat/ims/qti21/model/xml/QtiNodesExtractor.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfd0c019dbb66d9e85873aca038da9ea7dd63e09
--- /dev/null
+++ b/src/main/java/org/olat/ims/qti21/model/xml/QtiNodesExtractor.java
@@ -0,0 +1,82 @@
+package org.olat.ims.qti21.model.xml;
+
+import static org.olat.ims.qti21.QTI21Constants.MAXSCORE_IDENTIFIER;
+import static org.olat.ims.qti21.QTI21Constants.MINSCORE_IDENTIFIER;
+
+import java.util.List;
+
+import uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem;
+import uk.ac.ed.ph.jqtiplus.node.item.CorrectResponse;
+import uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration;
+import uk.ac.ed.ph.jqtiplus.node.shared.BaseTypeAndCardinality;
+import uk.ac.ed.ph.jqtiplus.node.shared.FieldValue;
+import uk.ac.ed.ph.jqtiplus.node.shared.declaration.DefaultValue;
+import uk.ac.ed.ph.jqtiplus.node.test.AssessmentTest;
+import uk.ac.ed.ph.jqtiplus.types.Identifier;
+import uk.ac.ed.ph.jqtiplus.value.Cardinality;
+import uk.ac.ed.ph.jqtiplus.value.FloatValue;
+import uk.ac.ed.ph.jqtiplus.value.IdentifierValue;
+import uk.ac.ed.ph.jqtiplus.value.MultipleValue;
+import uk.ac.ed.ph.jqtiplus.value.SingleValue;
+import uk.ac.ed.ph.jqtiplus.value.Value;
+
+/**
+ * 
+ * This is an helper class which extract data from the java model of QtiWorks.
+ * 
+ * Initial date: 05.08.2016<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public interface QtiNodesExtractor {
+	
+	public static Double extractMaxScore(AssessmentItem assessmentItem) {
+		return getOutcomeDeclarationDefaultFloatValue(assessmentItem.getOutcomeDeclaration(MAXSCORE_IDENTIFIER));
+	}
+	
+	public static Double extractMaxScore(AssessmentTest assessmentTest) {
+		return getOutcomeDeclarationDefaultFloatValue(assessmentTest.getOutcomeDeclaration(MAXSCORE_IDENTIFIER));
+	}
+	
+	public static Double extractMinScore(AssessmentTest assessmentTest) {
+		return getOutcomeDeclarationDefaultFloatValue(assessmentTest.getOutcomeDeclaration(MINSCORE_IDENTIFIER));
+	}
+	
+	public static Double getOutcomeDeclarationDefaultFloatValue(OutcomeDeclaration outcomeDeclaration) {
+		Double doubleValue = null;
+		if(outcomeDeclaration != null) {
+			DefaultValue defaultValue = outcomeDeclaration.getDefaultValue();
+			if(defaultValue != null) {
+				Value evaluatedValue = defaultValue.evaluate();
+				if(evaluatedValue instanceof FloatValue) {
+					doubleValue = new Double(((FloatValue)evaluatedValue).doubleValue());
+				}
+			}
+		}
+		return doubleValue;
+	}
+	
+	public static void extractIdentifiersFromCorrectResponse(CorrectResponse correctResponse, List<Identifier> correctAnswers) {
+		BaseTypeAndCardinality responseDeclaration = correctResponse.getParent();
+		if(responseDeclaration.hasCardinality(Cardinality.MULTIPLE)) {
+			Value value = FieldValue.computeValue(Cardinality.MULTIPLE, correctResponse.getFieldValues());
+			if(value instanceof MultipleValue) {
+				MultipleValue multiValue = (MultipleValue)value;
+				for(SingleValue sValue:multiValue.getAll()) {
+					if(sValue instanceof IdentifierValue) {
+						IdentifierValue identifierValue = (IdentifierValue)sValue;
+						Identifier correctAnswer = identifierValue.identifierValue();
+						correctAnswers.add(correctAnswer);
+					}
+				}
+			}
+		} else if(responseDeclaration.hasCardinality(Cardinality.SINGLE)) {
+			Value value = FieldValue.computeValue(Cardinality.SINGLE, correctResponse.getFieldValues());
+			if(value instanceof IdentifierValue) {
+				IdentifierValue identifierValue = (IdentifierValue)value;
+				correctAnswers.add(identifierValue.identifierValue());
+			}
+		}
+	}
+
+}
diff --git a/src/main/java/org/olat/ims/qti21/model/xml/QtiNodesHelper.java b/src/main/java/org/olat/ims/qti21/model/xml/QtiNodesHelper.java
deleted file mode 100644
index 40488fe05f72f02c988b7a6273ac9b392c897028..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/ims/qti21/model/xml/QtiNodesHelper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * <a href="http://www.openolat.org">
- * OpenOLAT - Online Learning and Training</a><br>
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); <br>
- * you may not use this file except in compliance with the License.<br>
- * You may obtain a copy of the License at the
- * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
- * <p>
- * Unless required by applicable law or agreed to in writing,<br>
- * software distributed under the License is distributed on an "AS IS" BASIS, <br>
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
- * See the License for the specific language governing permissions and <br>
- * limitations under the License.
- * <p>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.ims.qti21.model.xml;
-
-import uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration;
-import uk.ac.ed.ph.jqtiplus.node.shared.declaration.DefaultValue;
-import uk.ac.ed.ph.jqtiplus.value.FloatValue;
-import uk.ac.ed.ph.jqtiplus.value.Value;
-
-/**
- * 
- * Initial date: 24.05.2016<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class QtiNodesHelper {
-	
-	public static Double getOutcomeDeclarationDefaultFloatValue(OutcomeDeclaration outcomeDeclaration) {
-		Double doubleValue = null;
-		if(outcomeDeclaration != null) {
-			DefaultValue defaultValue = outcomeDeclaration.getDefaultValue();
-			if(defaultValue != null) {
-				Value evaluatedValue = defaultValue.evaluate();
-				if(evaluatedValue instanceof FloatValue) {
-					doubleValue = new Double(((FloatValue)evaluatedValue).doubleValue());
-				}
-			}
-		}
-		return doubleValue;
-	}
-
-}
diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java
index ef5a88a675d32e45f8b6ccae9817746db1066944..6c9a1543225f33d736aecbefc43f42410b71ca6d 100644
--- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java
+++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java
@@ -25,7 +25,7 @@ import static org.olat.ims.qti21.model.xml.AssessmentItemFactory.appendDefaultOu
 import static org.olat.ims.qti21.model.xml.AssessmentItemFactory.appendHotspotInteraction;
 import static org.olat.ims.qti21.model.xml.AssessmentItemFactory.createHotspotEntryResponseDeclarationSingle;
 import static org.olat.ims.qti21.model.xml.AssessmentItemFactory.createResponseProcessing;
-import static org.olat.ims.qti21.model.xml.AssessmentItemFactory.extractIdentifiersFromCorrectResponse;
+import static org.olat.ims.qti21.model.xml.QtiNodesExtractor.extractIdentifiersFromCorrectResponse;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java b/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
index 1cc5ec5f52dd2e9f65d70b93e1c673afb8e4b469..57cf2b63bd916608afdc471197017b3b63f3a2bd 100644
--- a/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
@@ -1245,12 +1245,14 @@ public class AssessmentTestDisplayController extends BasicController implements
 				layoutCont.contextPut("displayQuestionProgress", deliveryOptions.isDisplayQuestionProgress());
 				
 				if(deliveryOptions.isDisplayScoreProgress()) {
-					scoreProgress = uifactory.addProgressBar("scoreProgress", null, 250, 0, 0, "", formLayout);
+					scoreProgress = uifactory.addProgressBar("scoreProgress", null, 100, 0, 0, "", formLayout);
+					scoreProgress.setWidthInPercent(true);
 					formLayout.add("", scoreProgress);
 				}
 				
 				if(deliveryOptions.isDisplayQuestionProgress()) {
-					questionProgress = uifactory.addProgressBar("questionProgress", null, 250, 0, 0, "", formLayout);
+					questionProgress = uifactory.addProgressBar("questionProgress", null, 100, 0, 0, "", formLayout);
+					questionProgress.setWidthInPercent(true);
 					formLayout.add("questionProgress", questionProgress);
 				}
 			}
diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21RuntimeController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21RuntimeController.java
index ea193f693c727f9f3e90ff422052cf9205f61f02..7e3402110ebad11ba298270c1045134d975265a1 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21RuntimeController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21RuntimeController.java
@@ -39,7 +39,7 @@ import org.olat.core.util.resource.OresHelper;
 import org.olat.fileresource.FileResourceManager;
 import org.olat.ims.qti21.QTI21Constants;
 import org.olat.ims.qti21.QTI21Service;
-import org.olat.ims.qti21.model.xml.QtiNodesHelper;
+import org.olat.ims.qti21.model.xml.QtiNodesExtractor;
 import org.olat.ims.qti21.ui.editor.AssessmentTestComposerController;
 import org.olat.ims.qti21.ui.statistics.QTI21AssessmentTestStatisticsController;
 import org.olat.modules.assessment.ui.AssessableResource;
@@ -210,8 +210,8 @@ public class QTI21RuntimeController extends RepositoryEntryRuntimeController  {
 		ResolvedAssessmentTest resolvedAssessmentTest = qtiService.loadAndResolveAssessmentTest(fUnzippedDirRoot, false);
 		
 		AssessmentTest assessmentTest = resolvedAssessmentTest.getRootNodeLookup().extractIfSuccessful();
-		Double maxScore = QtiNodesHelper.getOutcomeDeclarationDefaultFloatValue(assessmentTest.getOutcomeDeclaration(QTI21Constants.MAXSCORE_IDENTIFIER));
-		Double minScore = QtiNodesHelper.getOutcomeDeclarationDefaultFloatValue(assessmentTest.getOutcomeDeclaration(QTI21Constants.MINSCORE_IDENTIFIER));
+		Double maxScore = QtiNodesExtractor.extractMaxScore(assessmentTest);
+		Double minScore = QtiNodesExtractor.extractMinScore(assessmentTest);
 		boolean hasScore = assessmentTest.getOutcomeDeclaration(QTI21Constants.SCORE_IDENTIFIER) != null;
 		boolean hasPassed = assessmentTest.getOutcomeDeclaration(QTI21Constants.PASS_IDENTIFIER) != null;
 		return new AssessableResource(hasScore, hasPassed, true, true, minScore, maxScore, null);
diff --git a/src/main/java/org/olat/ims/qti21/ui/_content/at_run.html b/src/main/java/org/olat/ims/qti21/ui/_content/at_run.html
index 51f8a6560a3173b1ed34d742823fa45fce3aadf8..6fa0e125a766be3e0f628e115f57b6cdd9975b01 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_content/at_run.html
+++ b/src/main/java/org/olat/ims/qti21/ui/_content/at_run.html
@@ -24,7 +24,7 @@
 	<div id="o_qti_run_infos" class="panel panel-default"><div class="panel-body">
 		#if (!$qtiWorksStatus.isSurvey() && $displayScoreProgress && $qtiWorksStatus.score)
 		<div id="o_qti_scoreinfo">
-			<div id="o_qti_run_scoreinfo" class="col-sm-3">
+			<div id="o_qti_run_scoreinfo" class="col-md-2 col-sm-3">
 			#if ($qtiWorksStatus.hasMaxScore())
 	    		#if ($qtiWorksStatus.maxScore == "-1.0")
 	  				$r.translate("question.progress.score"): $qtiWorksStatus.score / $r.translate("question.progress.noMaxScore")
@@ -35,16 +35,16 @@
 				$r.translate("question.progress.score"): $qtiWorksStatus.score
 			#end
 	  		</div>
-			<div id="o_qti_run_scoreprogress" class="col-sm-3">$r.render("scoreProgress", "nl")</div>
+			<div id="o_qti_run_scoreprogress" class="col-md-4 col-sm-3">$r.render("scoreProgress", "nl")</div>
 		</div>
 		#end
 		
 		#if ($displayQuestionProgress)
-		<div id="o_qti_questioninfo" class="row">
-			<div id="o_qti_run_questioninfo" class="col-sm-3">
+		<div id="o_qti_questioninfo">
+			<div id="o_qti_run_questioninfo" class="col-md-2 col-sm-3">
 				 $r.translate("question.progress.answered"): $qtiWorksStatus.numberOfAnsweredQuestions / $qtiWorksStatus.numberOfQuestions
 			</div>
-			<div id="o_qti_run_questionprogress" class="col-sm-3">$r.render("questionProgress", "nl")</div>
+			<div id="o_qti_run_questionprogress" class="col-md-4 col-sm-3">$r.render("questionProgress", "nl")</div>
 		</div>
 		#end
 	</div></div>
diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
index 22802558bfdc600d710d2630c90433f02006e50a..f70b14c60d1733bc1f06a73f2d0c7d4962b06445 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
@@ -2,12 +2,12 @@
 actualPoints=$org.olat.modules.iq\:actualPoints
 assessment.comment.legend=Pers\u00F6nliche Notizen
 assessment.item.modal.feedback=Feedback
-assessment.item.status.answered=Antwortet
-assessment.item.status.finished=Beendet
+assessment.item.status.answered=Beantwortet
+assessment.item.status.finished=Erledigt
 assessment.item.status.modelSolution=Musterl\u00F6sung
-assessment.item.status.needsAttention=Vorsichtig
+assessment.item.status.needsAttention=Achtung
 assessment.item.status.notAnswered=Nicht beantwortet
-assessment.item.status.notSeen=Nicht gesehen
+assessment.item.status.notSeen=Ungelesen
 assessment.item.status.review=\u00DCberpr\u00FCfung
 assessment.item.status.reviewInvalidAnswer=\u00DCberpr\u00FCfung (ung\u00FCltige Antwort)
 assessment.item.status.reviewNot=Nicht \u00FCberpr\u00FCfbar
@@ -89,5 +89,5 @@ table.header.results=$org.olat.course.nodes.iq\:table.header.results
 terminated.msg=Der Test ist beendet.
 test.complete=Test abgeschlossen
 test.entry.page.text=Der Test hat bis {0} Teile.
-test.entry.page.title=Test Eintritt
+test.entry.page.title=Testbeginn
 test.part.complete=Test Part abgeschlossen
diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
index 45a342ffaf3485adc654a081759d455e1742f807..a03fa9b4f6a29b93120127eb5ac61478cc13ca3e 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
@@ -1,13 +1,13 @@
-#Fri May 06 15:52:30 CEST 2016
+#Fri Aug 05 08:44:17 CEST 2016
 actualPoints=$org.olat.modules.iq\:actualPoints
 assessment.comment.legend=Please use the following text box if you need to provide any additional information, comments or feedback during this test\:
 assessment.item.modal.feedback=Feedback
 assessment.item.status.answered=Answered
-assessment.item.status.finished=Finished
+assessment.item.status.finished=Completed
 assessment.item.status.modelSolution=Model solution
-assessment.item.status.needsAttention=Needs Attention
+assessment.item.status.needsAttention=Attention
 assessment.item.status.notAnswered=Not answered
-assessment.item.status.notSeen=Not seen
+assessment.item.status.notSeen=Unread
 assessment.item.status.review=Review
 assessment.item.status.reviewInvalidAnswer=Review (Invalid Answer)
 assessment.item.status.reviewNot=Not Reviewable
@@ -18,8 +18,8 @@ assessment.solution.hide=Hide solution
 assessment.solution.show=Show solution
 assessment.test.backToTestFeedback=Back to test's feedback
 assessment.test.cancelled=The test has been cancelled.
-assessment.test.close.test=Close test
 assessment.test.close.results=Close results
+assessment.test.close.test=Close test
 assessment.test.config=Test configuration
 assessment.test.end.test=Finish test
 assessment.test.end.testPart=Finish test part
@@ -40,14 +40,20 @@ confirm.advance.testpart.text=Do really want to leave this test part and advance
 confirm.advance.testpart.title=Advance test part
 confirm.cancel.test=$org.olat.modules.iq\:confirmCancel
 confirm.suspend.test=$org.olat.modules.iq\:confirmSuspend
-exploded.msg=Exploded
+debug.outcomes=Output data
+debug.responses=Responses data
 error.as.directed=Please complete this interaction as directed.
 error.input.invalid=Your input must be a valid {0}
 error.input.invalid.record=number
 error.input.invalid.string=text
+exploded.msg=Exploded
 form.metadata.title=Title
 head.assessment.details=$org.olat.ims.qti\:head.ass.details
 head.assessment.overview=$org.olat.ims.qti\:head.ass.details
+interaction.order.drag.msg=Drag unused items from here...
+interaction.order.drop.msg=Drop and order your selected items here...
+interaction.order.source=Source
+interaction.order.target=Target
 passed.no=$org.olat.course.nodes.iq\:passed.no
 passed.yes=$org.olat.course.nodes.iq\:passed.yes
 passed.yourpassed=$org.olat.course.nodes.iq\:passed.yourpassed
@@ -66,12 +72,6 @@ qti.form.summary.compact=$org.olat.course.nodes.iq\:qti.form.summary.compact
 qti.form.summary.detailed=$org.olat.course.nodes.iq\:qti.form.summary.detailed
 qti.form.summary.none=$org.olat.course.nodes.iq\:qti.form.summary.none
 qti.form.summary.section=$org.olat.course.nodes.iq\:qti.form.summary.section
-interaction.order.drag.msg=Drag unused items from here...
-interaction.order.drop.msg=Drop and order your selected items here...
-interaction.order.source=Source
-interaction.order.target=Target
-debug.outcomes=Output data
-debug.responses=Responses data
 question.progress.answered=Answered
 question.progress.noMaxScore=$org.olat.modules.iq\:noMaxScore
 question.progress.score=$org.olat.modules.iq\:actualPoints
@@ -79,12 +79,12 @@ results.duration=Duration
 results.end.time=End date
 results.entry.time=Start date
 results.score.yourscore=$org.olat.course.nodes.iq\:score.yourscore
-results.summary.title=$org.olat.course.nodes\:personal.title
 results.session.status=Status
+results.session.status.final=Answered
 results.session.status.initial=Not started
-results.session.status.pendingSubmission=Seen but not answered
 results.session.status.pendingResponseProcessing=$\:results.session.status.pendingSubmission
-results.session.status.final=Answered
+results.session.status.pendingSubmission=Seen but not answered
+results.summary.title=$org.olat.course.nodes\:personal.title
 review.responses=Review your responses
 review.responses.desc=You may review your responses to some (or all) questions. These are listed below.
 score.max=$org.olat.ims.qti\:score.max
@@ -92,10 +92,11 @@ serialize.error=An unexpected happens while saving the file.
 submit=Submit response
 suspend.test=$org.olat.modules.iq\:suspendAssess
 tab.options=Options
+table.header.lastModified=$org.olat.course.nodes.iq\:table.header.lastModified
+table.header.results=$org.olat.course.nodes.iq\:table.header.results
 terminated.msg=The test is finished.
 test.complete=Test complete
 test.entry.page.text=This test consists of up to {0} parts.
-test.entry.page.title=Test entry
+test.entry.page.title=Begin test
 test.part.complete=Test part complete
 unsupported.custom.interaction=Unsupported custom interaction
-
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemEditorController.java
index 9d0e81792e9e32b7cbae8fcbd624b177e4bf12fa..24f00e04bba655775d7c6732e6c244efa55d0c27 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemEditorController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemEditorController.java
@@ -175,9 +175,9 @@ public class AssessmentItemEditorController extends BasicController {
 		}
 		
 		if(metadataBuilder != null) {
-			metadataEditor = new MetadataEditorController(ureq, getWindowControl(), metadataBuilder);
-			listenTo(metadataEditor);
-			tabbedPane.addTab(translate("form.metadata"), metadataEditor);
+			//metadataEditor = new MetadataEditorController(ureq, getWindowControl(), metadataBuilder);
+			//listenTo(metadataEditor);
+			//tabbedPane.addTab(translate("form.metadata"), metadataEditor);
 		}
 	}
 	
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java
index f5bb0925a693323573a9d15baa8de296724ece7a..7e8c19407c0d00828349d0704d64cf696c9f990a 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java
@@ -78,7 +78,7 @@ import org.olat.ims.qti21.model.xml.AssessmentTestBuilder;
 import org.olat.ims.qti21.model.xml.AssessmentTestFactory;
 import org.olat.ims.qti21.model.xml.ManifestBuilder;
 import org.olat.ims.qti21.model.xml.ManifestMetadataBuilder;
-import org.olat.ims.qti21.model.xml.QtiNodesHelper;
+import org.olat.ims.qti21.model.xml.QtiNodesExtractor;
 import org.olat.ims.qti21.model.xml.interactions.EssayAssessmentItemBuilder;
 import org.olat.ims.qti21.model.xml.interactions.FIBAssessmentItemBuilder;
 import org.olat.ims.qti21.model.xml.interactions.FIBAssessmentItemBuilder.EntryType;
@@ -858,8 +858,7 @@ public class AssessmentTestComposerController extends MainLayoutBasicController
 		for(ResolvedAssessmentItem resolvedAssessmentItem:resolvedAssessmentTest.getResolvedAssessmentItemBySystemIdMap().values()) {
 			AssessmentItem assessmentItem = resolvedAssessmentItem.getRootNodeLookup().extractIfSuccessful();
 			if(assessmentItem != null) {
-				Double maxScore = QtiNodesHelper
-						.getOutcomeDeclarationDefaultFloatValue(assessmentItem.getOutcomeDeclaration(QTI21Constants.MAXSCORE_IDENTIFIER));
+				Double maxScore = QtiNodesExtractor.extractMaxScore(assessmentItem);
 				if(maxScore != null) {
 					sumMaxScore += maxScore;
 				}
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestFeedbackEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestFeedbackEditorController.java
index 067274337300ed45a2cc9babb200cab52990dd77..13d2eb642b37135e34c30950c9d029d63acd9b4e 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestFeedbackEditorController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestFeedbackEditorController.java
@@ -59,11 +59,6 @@ public class AssessmentTestFeedbackEditorController extends FormBasicController
 
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		boolean hasCutValue = testBuilder.getCutValue() != null;
-		if(!hasCutValue) {
-			setFormWarning("warning.feedback.cutvalue");
-		}
-		
 		//correct feedback
 		TestFeedbackBuilder passedFeedback = testBuilder.getPassedFeedback();
 		String passedTitle = passedFeedback == null ? "" : passedFeedback.getTitle();
@@ -104,6 +99,12 @@ public class AssessmentTestFeedbackEditorController extends FormBasicController
 		feedbackPassedTextEl.setVisible(hasCutValue);
 		feedbackFailedTitleEl.setVisible(hasCutValue);
 		feedbackFailedTextEl.setVisible(hasCutValue);
+		
+		if(hasCutValue) {
+			setFormWarning(null);
+		} else {
+			setFormWarning("warning.feedback.cutvalue");
+		}
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
index 4e29676eaf4000fc9b4ac4028810ed09a07c5054..0782e29e06e2e1c1d1660605cda0e1d9073f245f 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
@@ -2,7 +2,7 @@
 answers=Antworten
 change.elements=Elemente \u00E4ndern
 correct.answers=Korrekt
-cut.value=Notwendige Punktzahl f\u00FCr "bestanden"
+cut.value=Notwendige Punktzahl f\u00FCr "Bestanden"
 delete.item=$org.olat.ims.qti.editor\:delete.item
 delete.section=$org.olat.ims.qti.editor\:delete.section
 editor.sc.title=Single choice
@@ -43,22 +43,22 @@ form.imd.alignment.right=Rechts
 form.imd.answer=Antwort
 form.imd.background=Hintergrund
 form.imd.correct.kprim=$org.olat.ims.qti.editor\:questionform_correct_kprim
-form.imd.correct.spots=Richtige Spots
+form.imd.correct.spots=Korrekte Spots
 form.imd.correct.text=Feedback bei Wahl aller korrekten Antworten
 form.imd.correct.title=Titel
 form.imd.descr=Frage
 form.imd.empty.text=Feedback bei Wahl keiner Antworten
 form.imd.empty.title=Titel
-form.imd.hint.title=Hint Title
-form.imd.hint.text=Hint
+form.imd.hint.title=Title
+form.imd.hint.text=Lösunghinweis
 form.imd.incorrect.text=Feedback bei Wahl einer falschen Antwort
 form.imd.incorrect.title=Titel
 form.imd.layout=$org.olat.ims.qti.editor\:form.imd.layout
 form.imd.layout.horizontal=$org.olat.ims.qti.editor\:form.imd.layout.horizontal
 form.imd.layout.vertical=$org.olat.ims.qti.editor\:form.imd.layout.vertical
 form.imd.limittries=$org.olat.ims.qti.editor\:form.imd.limittries
-form.imd.rubric=Rubrik
-form.imd.shuffle=Zuf\u00E4llig
+form.imd.rubric=Beschreibung
+form.imd.shuffle=Zuf\u00E4llige Reihenfolge
 form.imd.title=Titel
 form.imd.wrong.kprim=$org.olat.ims.qti.editor\:questionform_wrong_kprim
 form.metadata=Metadaten
@@ -74,7 +74,7 @@ form.score.assessment.per.answer=Punkte pro Antwort
 form.section.selection_pre=Anzahl Fragen in dieser Sektion
 form.section.selection_pre.hover=Legen Sie fest ob alle oder nur eine bestimmte Anzahl Fragen im Test angezeigt werden sollen.
 form.section.shuffle=Zuf\u00E4llige Reihenfolge der Fragen?
-form.section.visible=Sichtbar
+form.section.visible=Sektionstitel sichtbar in Test
 form.test.correct.text=Feedback bei Wahl aller korrekten Antworten
 form.test.correct.title=Titel
 form.test.export.score=Gesamtergebnis dieser Pr\u00FCfung
@@ -90,7 +90,7 @@ item.session.control.show.solution=L\u00F6sung anzeigen
 max.score=Maximal erreichbare Punktzahl
 min.score=Minimal erreichbare Punktzahl
 new.circle=Kreis
-new.elements=Neue Elementen
+new.elements=Elemente hinzuf\u00FCgen
 new.essay=Freitext
 new.fib=L\u00FCcke
 new.fib.numerical=Numerische Eingabe
@@ -113,5 +113,5 @@ tools.export.qpool=$org.olat.ims.qti.editor\:tools.export.qpool
 tools.import.qpool=$org.olat.ims.qti.editor\:tools.import.qpool
 tools.import.table=$org.olat.ims.qti.editor\:tools.import.table
 warning.in.use=Die Ressource wird bereits f\u00FCr Auswertung verwendet. Die Bearbeitung ist begrenzt.
-warning.feedback.cutvalue=Feedback basiert auf dem "Notwendige Punktzahl fvr 'bestanden'". Sie m\u00FCssen es zuerst definieren.
+warning.feedback.cutvalue=Feedback wird aktiviert sobald bei "Notwendige Punktzahl f\u00FCr 'Bestanden'" eine Punktzahl eingegeben wurde.
 warning.unkown.assessment.item=Dieser Fragetyp kann nicht mit dem OpenOLAT-Editor bearbeitet werden.
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
index 9df64c3456e0088974257526a8ba0c1518d086a0..7194213e65db44eeff694b9010063c024541f135 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
@@ -42,21 +42,21 @@ form.imd.answer=Answer
 form.imd.background=Background
 form.imd.correct.kprim=$org.olat.ims.qti.editor\:questionform_correct_kprim
 form.imd.correct.spots=Correct spots
-form.imd.correct.text=Correct feedback
-form.imd.correct.title=Correct title
+form.imd.correct.text=Feedback for all correct answers
+form.imd.correct.title=Title
 form.imd.descr=Question
 form.imd.empty.text=Empty feedback
 form.imd.empty.title=Empty title
 form.imd.hint.text=Hint
-form.imd.hint.title=Hint title
-form.imd.incorrect.text=Incorrect feedback
-form.imd.incorrect.title=Incorrect title
+form.imd.hint.title=Title
+form.imd.incorrect.text=Feedback for wrong answer
+form.imd.incorrect.title=Title
 form.imd.layout=$org.olat.ims.qti.editor\:form.imd.layout
 form.imd.layout.horizontal=$org.olat.ims.qti.editor\:form.imd.layout.horizontal
 form.imd.layout.vertical=$org.olat.ims.qti.editor\:form.imd.layout.vertical
 form.imd.limittries=$org.olat.ims.qti.editor\:form.imd.limittries
-form.imd.rubric=Rubric
-form.imd.shuffle=Shuffle
+form.imd.rubric=Description
+form.imd.shuffle=Shuffle answers
 form.imd.title=Title
 form.imd.wrong.kprim=$org.olat.ims.qti.editor\:questionform_wrong_kprim
 form.kprim=Kprim
@@ -73,24 +73,24 @@ form.score.assessment.per.answer=Score per answer
 form.section.selection_pre=Number of questions in this section
 form.section.selection_pre.hover=Select whether all or just a specified number of questions should be displayed in the test.
 form.section.shuffle=Random order of questions?
-form.section.visible=Visible
-form.test.correct.text=Correct feedback
-form.test.correct.title=Correct title
+form.section.visible=Section's title visible in test
+form.test.correct.text=Feedback for all correct answers
+form.test.correct.title=Title
 form.test.export.score=Overall score of this test
-form.test.incorrect.text=Incorrect feedback
-form.test.incorrect.title=Incorrect title
+form.test.incorrect.text=Feedback for wrong answer
+form.test.incorrect.title=Title
 form.testPart.navigationMode=Navigation mode
 form.testPart.navigationMode.linear=Linear
 form.testPart.navigationMode.nonlinear=Non linear
 form.unkown=Unkown
 inherit=Inherit
-item.session.control.allow.comment=Allow comment
+item.session.control.allow.comment=Allow comments
 item.session.control.attempts=Attempts
 item.session.control.show.solution=Show solution
 max.score=Max. score
 min.score=Min. score
 new.circle=Circle
-new.elements=New elements
+new.elements=Add elements
 new.essay=Essay
 new.fib=Gap text
 new.fib.numerical=Numerical input
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties
index 0348ea712464adc475ea204cdc3957a954b7445b..2e9bc283bed51012a767533afbf4bc3b3893f1dc 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties
@@ -14,7 +14,7 @@ form.imd.layout=$org.olat.ims.qti.editor\:form.imd.layout
 form.imd.layout.horizontal=$org.olat.ims.qti.editor\:form.imd.layout.horizontal
 form.imd.layout.vertical=$org.olat.ims.qti.editor\:form.imd.layout.vertical
 form.imd.limittries=$org.olat.ims.qti.editor\:form.imd.limittries
-form.imd.rubric=Rubrique
+form.imd.rubric=Description
 form.imd.title=Titre
 form.imd.wrong.kprim=$org.olat.ims.qti.editor\:questionform_wrong_kprim
 form.metadata=M\u00E9tadonn\u00E9es
diff --git a/src/main/java/org/olat/ims/qti21/ui/statistics/QTI21StatisticsToolController.java b/src/main/java/org/olat/ims/qti21/ui/statistics/QTI21StatisticsToolController.java
new file mode 100644
index 0000000000000000000000000000000000000000..d87b637a1ba6795dfe67b9cea05d486178b45149
--- /dev/null
+++ b/src/main/java/org/olat/ims/qti21/ui/statistics/QTI21StatisticsToolController.java
@@ -0,0 +1,181 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.ims.qti21.ui.statistics;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.olat.basesecurity.Group;
+import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.link.Link;
+import org.olat.core.gui.components.link.LinkFactory;
+import org.olat.core.gui.components.panel.Panel;
+import org.olat.core.gui.components.stack.TooledStackedPanel;
+import org.olat.core.gui.components.tree.GenericTreeModel;
+import org.olat.core.gui.components.tree.MenuTree;
+import org.olat.core.gui.components.tree.TreeEvent;
+import org.olat.core.gui.components.tree.TreeNode;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.gui.control.generic.dtabs.Activateable2;
+import org.olat.core.id.context.ContextEntry;
+import org.olat.core.id.context.StateEntry;
+import org.olat.core.util.nodes.INode;
+import org.olat.core.util.resource.OresHelper;
+import org.olat.course.nodes.ArchiveOptions;
+import org.olat.course.nodes.AssessmentToolOptions;
+import org.olat.course.nodes.AssessmentToolOptions.AlternativeToIdentities;
+import org.olat.course.nodes.QTICourseNode;
+import org.olat.course.run.environment.CourseEnvironment;
+import org.olat.course.statistic.StatisticResourceNode;
+import org.olat.ims.qti21.model.QTI21StatisticSearchParams;
+import org.olat.repository.RepositoryEntry;
+
+/**
+ * 
+ * Initial date: 05.08.2016<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class QTI21StatisticsToolController extends BasicController implements Activateable2 {
+
+	private MenuTree courseTree;
+	private final Link statsButton;
+	private Controller currentCtrl;
+	private final TooledStackedPanel stackPanel;
+	private LayoutMain3ColsController layoutCtr;
+
+	private final ArchiveOptions options;
+	private final QTICourseNode courseNode;
+	private final RepositoryEntry testEntry;
+	private final RepositoryEntry courseEntry;
+	private QTI21StatisticResourceResult result;
+
+	private final QTI21StatisticSearchParams searchParams;
+	
+	public QTI21StatisticsToolController(UserRequest ureq, WindowControl wControl, 
+			TooledStackedPanel stackPanel, CourseEnvironment courseEnv,
+			AssessmentToolOptions asOptions, QTICourseNode courseNode) {
+		super(ureq, wControl);
+		this.stackPanel = stackPanel;
+		this.options = new ArchiveOptions();
+		this.options.setGroup(asOptions.getGroup());
+		this.options.setIdentities(asOptions.getIdentities());
+		this.courseNode = courseNode;
+		courseEntry = courseEnv.getCourseGroupManager().getCourseEntry();
+		testEntry = courseNode.getReferencedRepositoryEntry();
+		
+		searchParams = new QTI21StatisticSearchParams(testEntry, courseEntry, courseNode.getIdent());
+		if(asOptions.getGroup() != null) {
+			List<Group> bGroups = Collections.singletonList(asOptions.getGroup().getBaseGroup());
+			searchParams.setLimitToGroups(bGroups);
+		} else if(asOptions.getAlternativeToIdentities() != null) {
+			AlternativeToIdentities alt = asOptions.getAlternativeToIdentities();
+			searchParams.setMayViewAllUsersAssessments(alt.isMayViewAllUsersAssessments());
+			searchParams.setLimitToGroups(alt.getGroups());
+		}
+		
+		statsButton = LinkFactory.createButton("menu.title", null, this);
+		statsButton.setTranslator(getTranslator());
+		putInitialPanel(statsButton);
+		getInitialComponent().setSpanAsDomReplaceable(true); // override to wrap panel as span to not break link layout 
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
+		if(entries == null || entries.isEmpty()) return;
+		
+		ContextEntry entry = entries.get(0);
+		if(entry.getOLATResourceable() != null && entry.getOLATResourceable().getResourceableTypeName() != null) {
+			String nodeId = entry.getOLATResourceable().getResourceableTypeName();
+			TreeNode nclr = courseTree.getTreeModel().getNodeById(nodeId);
+			if(nclr != null) {
+				String selNodeId = nclr.getIdent();
+				courseTree.setSelectedNodeId(selNodeId);
+				doSelectNode(ureq, nclr);
+			}
+		}
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Component source, Event event) {
+		if(statsButton == source) {
+			doLaunchStatistics(ureq, getWindowControl());
+			doSelectNode(ureq, courseTree.getTreeModel().getRootNode());
+		} else if(courseTree == source) {
+			if(event instanceof TreeEvent) {
+				TreeEvent te = (TreeEvent)event;
+				if(MenuTree.COMMAND_TREENODE_CLICKED.equals(te.getCommand())) {
+					String ident = te.getNodeId();
+					TreeNode selectedNode = courseTree.getTreeModel().getNodeById(ident);
+					doSelectNode(ureq, selectedNode);
+				}
+			}
+		}
+	}
+	
+	private void doSelectNode(UserRequest ureq, TreeNode selectedNode) {
+		removeAsListenerAndDispose(currentCtrl);
+		WindowControl swControl = addToHistory(ureq, OresHelper.createOLATResourceableInstance(selectedNode.getIdent(), 0l), null);
+		currentCtrl = result.getController(ureq, swControl, stackPanel, selectedNode);
+		if(currentCtrl != null) {
+			listenTo(currentCtrl);
+			layoutCtr.setCol3(currentCtrl.getInitialComponent());
+		} else {
+			layoutCtr.setCol3(new Panel("empty"));
+		}
+	}
+
+	private void doLaunchStatistics(UserRequest ureq, WindowControl wControl) {
+		if(result == null) {
+			result = new QTI21StatisticResourceResult(testEntry, courseEntry, courseNode, searchParams);
+		}
+		
+		GenericTreeModel treeModel = new GenericTreeModel();
+		StatisticResourceNode rootTreeNode = new StatisticResourceNode(courseNode, result);
+		treeModel.setRootNode(rootTreeNode);
+		
+		TreeNode subRootNode = result.getSubTreeModel().getRootNode();
+		List<INode> subNodes = new ArrayList<>();
+		for(int i=0; i<subRootNode.getChildCount(); i++) {
+			subNodes.add(subRootNode.getChildAt(i));
+		}
+		for(INode subNode:subNodes) {
+			rootTreeNode.addChild(subNode);
+		}
+
+		courseTree = new MenuTree("qti21StatisticsTree");
+		courseTree.setTreeModel(treeModel);
+		courseTree.addListener(this);
+		
+		layoutCtr = new LayoutMain3ColsController(ureq, wControl, courseTree, new Panel("empty"), null);
+		stackPanel.pushController("Stats", layoutCtr);
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/ims/qti21/ui/statistics/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/statistics/_i18n/LocalStrings_de.properties
index 978fc2b51595020dc70970d9b629d4a954e1864a..7b7098754bc7cc481ded42df6f6fa20e8b39c5d5 100644
--- a/src/main/java/org/olat/ims/qti21/ui/statistics/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/statistics/_i18n/LocalStrings_de.properties
@@ -32,6 +32,7 @@ fig.surveyId=$org.olat.ims.qti.statistics.ui\:fig.surveyId
 fig.testId=$org.olat.ims.qti.statistics.ui\:fig.testId
 fig.title=$org.olat.ims.qti.statistics.ui\:fig.title
 fig.wronganswers=$org.olat.ims.qti.statistics.ui\:fig.wronganswers
+menu.title=$org.olat.ims.qti.statistics.ui\:menu.title
 section=$org.olat.ims.qti.statistics.ui\:section
 stats.unsupported.interaction=ist nicht unterst\u00FCtzt.
 user.not.answer=$org.olat.ims.qti.statistics.ui\:user.not.answer
diff --git a/src/main/java/org/olat/ims/qti21/ui/statistics/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/statistics/_i18n/LocalStrings_en.properties
index 77053a8459e251227b9ab51f72e3d91813663430..28713a5eaad3a90080de0c92145913eb1826dd3e 100644
--- a/src/main/java/org/olat/ims/qti21/ui/statistics/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/statistics/_i18n/LocalStrings_en.properties
@@ -32,6 +32,7 @@ fig.surveyId=$org.olat.ims.qti.statistics.ui\:fig.surveyId
 fig.testId=$org.olat.ims.qti.statistics.ui\:fig.testId
 fig.title=$org.olat.ims.qti.statistics.ui\:fig.title
 fig.wronganswers=$org.olat.ims.qti.statistics.ui\:fig.wronganswers
+menu.title=$org.olat.ims.qti.statistics.ui\:menu.title
 section=$org.olat.ims.qti.statistics.ui\:section
 stats.unsupported.interaction=is not supported.
-user.not.answer=$org.olat.ims.qti.statistics.ui\:user.not.answer
+user.not.answer=$org.olat.ims.qti.statistics.ui\:user.not.answer
\ No newline at end of file
diff --git a/src/main/java/org/olat/ims/qti21/ui/statistics/interactions/HotspotInteractionStatisticsController.java b/src/main/java/org/olat/ims/qti21/ui/statistics/interactions/HotspotInteractionStatisticsController.java
index a7b6b24ce549640cb1300b242cbd457fd68937e7..7d1e21b9da840c6c7cf7cad56a0492b660a058b0 100644
--- a/src/main/java/org/olat/ims/qti21/ui/statistics/interactions/HotspotInteractionStatisticsController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/statistics/interactions/HotspotInteractionStatisticsController.java
@@ -19,6 +19,8 @@
  */
 package org.olat.ims.qti21.ui.statistics.interactions;
 
+import static org.olat.ims.qti21.model.xml.QtiNodesExtractor.extractIdentifiersFromCorrectResponse;
+
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -46,7 +48,6 @@ import org.olat.ims.qti.statistics.ui.ResponseInfos;
 import org.olat.ims.qti.statistics.ui.Series;
 import org.olat.ims.qti21.QTI21StatisticsManager;
 import org.olat.ims.qti21.model.statistics.HotspotChoiceStatistics;
-import org.olat.ims.qti21.model.xml.AssessmentItemFactory;
 import org.olat.ims.qti21.ui.statistics.QTI21AssessmentItemStatisticsController;
 import org.olat.ims.qti21.ui.statistics.QTI21StatisticResourceResult;
 import org.olat.ims.qti21.ui.statistics.SeriesFactory;
@@ -151,7 +152,7 @@ public class HotspotInteractionStatisticsController extends BasicController {
 		List<Identifier> correctAnswers = new ArrayList<>();
 		ResponseDeclaration responseDeclaration = assessmentItem.getResponseDeclaration(interaction.getResponseIdentifier());
 		if(responseDeclaration != null && responseDeclaration.getCorrectResponse() != null) {
-			AssessmentItemFactory.extractIdentifiersFromCorrectResponse(responseDeclaration.getCorrectResponse(), correctAnswers);
+			extractIdentifiersFromCorrectResponse(responseDeclaration.getCorrectResponse(), correctAnswers);
 		}
 		return correctAnswers;
 	}
diff --git a/src/main/java/org/olat/modules/assessment/ui/AssessmentStatisticsSmallController.java b/src/main/java/org/olat/modules/assessment/ui/AssessmentStatisticsSmallController.java
index 89a7e32a3183c852f055df45e2a525cbe74a0fd1..ca344da089eeddf37a453ea374e41e40ec97aced 100644
--- a/src/main/java/org/olat/modules/assessment/ui/AssessmentStatisticsSmallController.java
+++ b/src/main/java/org/olat/modules/assessment/ui/AssessmentStatisticsSmallController.java
@@ -48,6 +48,7 @@ public class AssessmentStatisticsSmallController extends BasicController {
 	
 	private int numOfPassed;
 	private int numOfFailed;
+	private int numOfParticipants;
 	private int numOfAssessedIdentities;
 	
 	@Autowired
@@ -78,18 +79,21 @@ public class AssessmentStatisticsSmallController extends BasicController {
 	
 	public void updateStatistics() {
 		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, null, testEntry, assessmentCallback);
-		numOfAssessedIdentities = assessmentToolManager.getNumberOfAssessedIndetities(getIdentity(), params);
+		numOfAssessedIdentities = assessmentToolManager.getNumberOfAssessedIdentities(getIdentity(), params);
 		mainVC.contextPut("numOfAssessedIdentities", numOfAssessedIdentities);
 		
+		numOfParticipants = assessmentToolManager.getNumberOfParticipants(getIdentity(), params);
+		mainVC.contextPut("numOfParticipants", numOfParticipants);
+		
 		AssessmentStatistics stats = assessmentToolManager.getStatistics(getIdentity(), params);
 		mainVC.contextPut("scoreAverage", AssessmentHelper.getRoundedScore(stats.getAverageScore()));
 		numOfPassed = stats.getCountPassed();
 		mainVC.contextPut("numOfPassed", numOfPassed);
-		int percentPassed = numOfAssessedIdentities <= 0 ? 0 : Math.round(100.0f * (stats.getCountPassed() / numOfAssessedIdentities));
+		int percentPassed = numOfParticipants <= 0 ? 0 : Math.round(100.0f * (stats.getCountPassed() / numOfParticipants));
 		mainVC.contextPut("percentPassed", percentPassed);
 		numOfFailed = stats.getCountFailed();
 		mainVC.contextPut("numOfFailed", numOfFailed);
-		int percentFailed = numOfAssessedIdentities <= 0 ? 0 : Math.round(100.0f * (stats.getCountFailed() / numOfAssessedIdentities));
+		int percentFailed = numOfParticipants <= 0 ? 0 : Math.round(100.0f * (stats.getCountFailed() / numOfParticipants));
 		mainVC.contextPut("percentFailed", percentFailed);
 		
 		int numOfLaunches = assessmentToolManager.getNumberOfInitialLaunches(getIdentity(), params);
diff --git a/src/main/java/org/olat/modules/assessment/ui/_content/test_stats_small.html b/src/main/java/org/olat/modules/assessment/ui/_content/test_stats_small.html
index c7bc6da2532b3553870944648d2f9a18cfccef9b..15ec159336d7775e19313796b3ff370f49cef028 100644
--- a/src/main/java/org/olat/modules/assessment/ui/_content/test_stats_small.html
+++ b/src/main/java/org/olat/modules/assessment/ui/_content/test_stats_small.html
@@ -4,15 +4,15 @@
 	</div>
 	<table class="table">
 		<tr>
-			<th>$r.translate("table.header.numOfAssessedIdentities")</th>
-			<td>$numOfAssessedIdentities</td>
+			<th>$r.translate("table.header.numOfParticipants")</th>
+			<td>$numOfParticipants</td>
 		</tr>
 		<tr>
 			<th>$r.translate("table.header.numOfInitialLaunch")</th>
 			<td>
 			#if($numOfInitialLaunch && $numOfInitialLaunch == 0)
 				<i class="o_icon o_red_led"> </i>
-			#elseif($numOfInitialLaunch && $numOfInitialLaunch == $numOfAssessedIdentities)
+			#elseif($numOfInitialLaunch && $numOfInitialLaunch == $numOfParticipants)
 				<i class="o_icon o_green_led"> </i>
 			#else
 				<i class="o_icon o_yellow_led"> </i>
@@ -27,13 +27,13 @@
 			<th>$r.translate("table.header.numOfPassed")</th>
 			<td><div class="progress" title="">
 				#if($numOfPassed && $numOfPassed > 0)
-				<div class="progress-bar" role="progressbar" aria-valuenow="$numOfPassed" aria-valuemin="0" aria-valuemax="$numOfAssessedIdentities" style="width: ${percentPassed}%;">
+				<div class="progress-bar" role="progressbar" aria-valuenow="$numOfPassed" aria-valuemin="0" aria-valuemax="$numOfParticipants" style="width: ${percentPassed}%;">
 					<span class="sr-only">${percentPassed}%</span>
 				</div>
 				#end
 				
 				#if($numOfFailed && $numOfFailed > 0)
-				<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="$numOfFailed" aria-valuemin="0" aria-valuemax="$numOfAssessedIdentities" style="width: ${percentFailed}%;">
+				<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="$numOfFailed" aria-valuemin="0" aria-valuemax="$numOfParticipants" style="width: ${percentFailed}%;">
 					<span class="sr-only">${percentFailed}%</span>
 				</div>
 				#end
diff --git a/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_de.properties
index 7a1cc742c8e42a231557749aac69192fd2249e2e..43a46a258966a96cb35d6b5244ef60020bd024ad 100644
--- a/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_de.properties
@@ -1,4 +1,4 @@
-#Mon Jun 20 18:44:30 CEST 2016
+#Fri Aug 05 08:46:06 CEST 2016
 assessment.status.done=Bewertet
 assessment.status.inProgress=Gestartet
 assessment.status.inReview=Korrigieren
@@ -7,7 +7,7 @@ assessment.tool.numOfAssessedGroups={0} Gruppe(n)
 assessment.tool.numOfAssessedIdentities={0} bewertete Benutzer
 assessment.tool.numOfFailed={0} nicht bestanden
 assessment.tool.numOfPassed={0} bestanden
-assessment.tool.overview=Ubersicht
+assessment.tool.overview=\u00DCbersicht
 filter=Filter
 filter.done=Bewertet
 filter.failed=Nicht bestanden
@@ -20,9 +20,10 @@ statistics.small.overview=Statistiken \u00DCbersicht
 table.header.assessmentStatus=Status
 table.header.elements.toReview=Zu \u00FCberpr\u00FCfen
 table.header.name=Benutzername
+table.header.numOfParticipants=\# Teilnehmer
 table.header.numOfAssessedIdentities=\# Teilnehmer
 table.header.numOfInitialLaunch=Eingeloggt
 table.header.numOfPassed=Bestanden
-table.header.scoreAverage=Durschnitt
+table.header.scoreAverage=Durchschnitt
 users=Benutzer
-waiting.review=Anh\u00E4ngige Bewertungen
+waiting.review=Anstehende Bewertungen
diff --git a/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_en.properties
index dc48ce8fa446fca6ab3be2673e3682a438153fff..886fa273f4d1c2bb64f9afef3f67a50cb70159ed 100644
--- a/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_en.properties
@@ -1,13 +1,13 @@
-#Fri May 06 21:35:18 CEST 2016
+#Fri Aug 05 08:45:50 CEST 2016
 assessment.status.done=Assessed
 assessment.status.inProgress=Started
 assessment.status.inReview=To review
 assessment.status.notStart=Not started
-assessment.tool.overview=Overview
 assessment.tool.numOfAssessedGroups={0} group(s)
 assessment.tool.numOfAssessedIdentities={0} assessed users
 assessment.tool.numOfFailed={0} not passed
 assessment.tool.numOfPassed={0} passed
+assessment.tool.overview=Overview
 filter=Filter
 filter.done=Assessed
 filter.failed=Not passed
@@ -16,13 +16,14 @@ filter.inProgress=Started
 filter.inReview=To review
 filter.passed=Passed
 review=Review
+statistics.small.overview=Statistics overview
 table.header.assessmentStatus=Status
 table.header.elements.toReview=To review
 table.header.name=Username
+table.header.numOfParticipants=\# participants
 table.header.numOfAssessedIdentities=\# participants
 table.header.numOfInitialLaunch=Logged in
 table.header.numOfPassed=Passed
 table.header.scoreAverage=Average
-waiting.review=Pending reviews
 users=Users
-statistics.small.overview=Statistics overview
\ No newline at end of file
+waiting.review=Pending reviews
diff --git a/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_fr.properties
new file mode 100644
index 0000000000000000000000000000000000000000..b2d6e3711d22dd831d989fb502964d0d9804cf25
--- /dev/null
+++ b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_fr.properties
@@ -0,0 +1 @@
+#Fri Aug 05 08:45:50 CEST 2016
\ No newline at end of file
diff --git a/src/test/java/org/olat/selenium/CourseTest.java b/src/test/java/org/olat/selenium/CourseTest.java
index 86eee946ee0c29ed8888bac516583ad74ad5672b..60bfbd211f5c5b0b1d0e7edbe8fd77a85d9726a0 100644
--- a/src/test/java/org/olat/selenium/CourseTest.java
+++ b/src/test/java/org/olat/selenium/CourseTest.java
@@ -51,6 +51,7 @@ import org.olat.selenium.page.core.AdministrationPage;
 import org.olat.selenium.page.core.BookingPage;
 import org.olat.selenium.page.core.MenuTreePageFragment;
 import org.olat.selenium.page.course.AssessmentCEConfigurationPage;
+import org.olat.selenium.page.course.AssessmentToolPage;
 import org.olat.selenium.page.course.CourseEditorPageFragment;
 import org.olat.selenium.page.course.CoursePageFragment;
 import org.olat.selenium.page.course.CourseWizardPage;
@@ -1813,9 +1814,10 @@ public class CourseTest {
 			.assertTitleNotExists(infoTitle.substring(0, 20));
 		
 		//author set assessment to passed
-		members
+		AssessmentToolPage assessmentTool = members
 			.clickToolbarBack()
-			.assessmentTool()
+			.assessmentTool();
+		assessmentTool
 			.users()
 			.assertOnUsers(rei)
 			.selectUser(rei)
@@ -1832,8 +1834,8 @@ public class CourseTest {
 			.assertWithTitle(infoTitle.substring(0, 20));
 		
 		//author can see all
-		members
-			.clickToolbarBack()
+		assessmentTool
+			.clickToolbarRootCrumb()
 			.clickTree()
 			.assertWithTitle(bcTitle.substring(0, 20))
 			.assertWithTitle(msTitle.substring(0, 20))
diff --git a/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java b/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java
index 04c80c9b1c0f6ea6d4ea44cfbabf2002843fc9f0..97a181be3ce146ddf075d55059ab52f80f2d509d 100644
--- a/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java
+++ b/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java
@@ -21,7 +21,6 @@ package org.olat.selenium.page.course;
 
 import java.util.List;
 
-import org.jboss.arquillian.drone.api.annotation.Drone;
 import org.junit.Assert;
 import org.olat.selenium.page.graphene.OOGraphene;
 import org.olat.user.restapi.UserVO;
@@ -37,19 +36,14 @@ import org.openqa.selenium.WebElement;
  */
 public class AssessmentToolPage {
 	
-	@Drone
-	private WebDriver browser;
-	
-	public AssessmentToolPage() {
-		//
-	}
+	private final WebDriver browser;
 	
 	public AssessmentToolPage(WebDriver browser) {
 		this.browser = browser;
 	}
 	
 	public AssessmentToolPage users() {
-		By usersBy = By.cssSelector("li.o_sel_assessment_tool_users a");
+		By usersBy = By.cssSelector("a.o_sel_assessment_tool_assessed_users");
 		WebElement usersLink = browser.findElement(usersBy);
 		usersLink.click();
 		OOGraphene.waitBusy(browser);
@@ -57,7 +51,7 @@ public class AssessmentToolPage {
 	}
 	
 	public AssessmentToolPage assertOnUsers(UserVO user) {
-		By usersCellsBy = By.cssSelector("div.o_table_layout table tr td.text-left");
+		By usersCellsBy = By.cssSelector("div.o_table_flexi table tr td.text-left");
 		List<WebElement> usersCellsList = browser.findElements(usersCellsBy);
 		Assert.assertFalse(usersCellsList.isEmpty());
 		
@@ -76,7 +70,7 @@ public class AssessmentToolPage {
 	 * @return
 	 */
 	public AssessmentToolPage selectUser(UserVO user) {
-		By userLinksBy = By.xpath("//div[contains(@class,'o_table_layout')]//table//tr//td//a[text()[contains(.,'" + user.getFirstName() + "')]]");
+		By userLinksBy = By.xpath("//div[contains(@class,'o_table_flexi')]//table//tr//td//a[text()[contains(.,'" + user.getFirstName() + "')]]");
 		WebElement userLink = browser.findElement(userLinksBy);
 		userLink.click();
 		OOGraphene.waitBusy(browser);
@@ -124,14 +118,14 @@ public class AssessmentToolPage {
 		By scoreBy = By.cssSelector(".o_sel_assessment_form_score input[type='text']");
 		browser.findElement(scoreBy).sendKeys(Float.toString(score));
 		
-		By saveBy = By.cssSelector(".o_sel_assessment_form button.btn.btn-primary");
+		By saveBy = By.cssSelector("a.btn.o_sel_assessment_form_save_and_close");
 		browser.findElement(saveBy).click();
 		OOGraphene.waitBusy(browser);
 		return this;
 	}
 	
 	public AssessmentToolPage assertPassed(UserVO user) {
-		By userInfosBy = By.cssSelector("div.panel li.list-group-item");
+		By userInfosBy = By.cssSelector("div.o_user_infos div.o_user_infos_inner table tr td");
 		List<WebElement> userInfoList = browser.findElements(userInfosBy);
 		Assert.assertFalse(userInfoList.isEmpty());
 		boolean foundFirstName = false;
@@ -140,7 +134,7 @@ public class AssessmentToolPage {
 		}
 		Assert.assertTrue(foundFirstName);
 		
-		By passedBy = By.cssSelector("div.o_table_layout table tr td.text-left span.o_state.o_passed");
+		By passedBy = By.cssSelector("div.o_table_wrapper table tr td.text-left span.o_state.o_passed");
 		List<WebElement> passedEl = browser.findElements(passedBy);
 		Assert.assertFalse(passedEl.isEmpty());
 		Assert.assertTrue(passedEl.get(0).isDisplayed());
@@ -168,7 +162,7 @@ public class AssessmentToolPage {
 	}
 	
 	public BulkAssessmentPage bulk() {
-		By bulkBy = By.cssSelector("li.o_sel_assessment_tool_bulk a");
+		By bulkBy = By.cssSelector("li.o_tool a.o_sel_assessment_tool_bulk");
 		browser.findElement(bulkBy).click();
 		OOGraphene.waitBusy(browser);
 		
@@ -178,4 +172,16 @@ public class AssessmentToolPage {
 		return new BulkAssessmentPage(browser);
 	}
 	
-}
+	/**
+	 * Click back to the course
+	 * 
+	 * @return
+	 */
+	public CoursePageFragment clickToolbarRootCrumb() {
+		OOGraphene.closeBlueMessageWindow(browser);
+		By toolbarBackBy = By.xpath("//li[contains(@class,'o_breadcrumb_back')]/following-sibling::li/a");
+		browser.findElement(toolbarBackBy).click();
+		OOGraphene.waitBusy(browser);
+		return new CoursePageFragment(browser);
+	}
+}
\ No newline at end of file
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 8997d61c61340ed55d8e7b69bd2c65fe12a81c10..48f1a20b06cf8c544873f3075492227c1e7fc3a4 100644
--- a/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
@@ -208,7 +208,7 @@ public class CoursePageFragment {
 		browser.findElement(assessmentToolBy).click();
 		OOGraphene.waitBusy(browser);
 
-		WebElement main = browser.findElement(By.id("o_main"));
+		WebElement main = browser.findElement(By.id("o_assessment_tool_main"));
 		Assert.assertTrue(main.isDisplayed());
 		return new AssessmentToolPage(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 c24bfcfaa1d8ef4c8bbbf651ccf971b8993bf1d4..ec9c653b2d146974fa297edb399f2a1d6eb5220b 100644
--- a/src/test/java/org/olat/selenium/page/course/MembersPage.java
+++ b/src/test/java/org/olat/selenium/page/course/MembersPage.java
@@ -42,7 +42,7 @@ import org.openqa.selenium.WebElement;
  */
 public class MembersPage {
 
-	private WebDriver browser;
+	private final WebDriver browser;
 	
 	public MembersPage(WebDriver browser) {
 		this.browser = browser;
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 2781f727cd1ce47c84c5e1818f61a7b7627b9b34..21cbdbb9833357cc70ca57f92a550638d9d4cf69 100644
--- a/src/test/java/org/olat/selenium/page/group/GroupPage.java
+++ b/src/test/java/org/olat/selenium/page/group/GroupPage.java
@@ -135,7 +135,7 @@ public class GroupPage {
 	
 	public ContactPage openContact() {
 		openMenuItem(contactTool);
-		OOGraphene.waitElement(By.cssSelector("fieldset.o_sel_contact_form"), 2, browser);
+		OOGraphene.waitElement(By.cssSelector("fieldset.o_sel_contact_form"), 5, browser);
 		return new ContactPage(browser);
 	}
 	
@@ -146,31 +146,31 @@ public class GroupPage {
 	
 	public GroupPage openNews() {
 		openMenuItem(newsTool);
-		OOGraphene.waitElement(By.id("o_msg_info"), 2, browser);
+		OOGraphene.waitElement(By.id("o_msg_info"), 5, browser);
 		return this;
 	}
 	
 	public FolderPage openFolder() {
 		openMenuItem(folderTool);
-		OOGraphene.waitElement(FolderPage.folderBy, 2, browser);
+		OOGraphene.waitElement(FolderPage.folderBy, 5, browser);
 		return new FolderPage(browser);
 	}
 	
 	public ForumPage openForum() {
 		openMenuItem(forumTool);
-		OOGraphene.waitElement(ForumPage.threadTableBy, 2, browser);
+		OOGraphene.waitElement(ForumPage.threadTableBy, 5, browser);
 		return ForumPage.getGroupForumPage(browser);
 	}
 	
 	public WikiPage openWiki() {
 		openMenuItem(wikiTool);
-		OOGraphene.waitElement(WikiPage.wikiWrapperBy, 2, browser);
+		OOGraphene.waitElement(WikiPage.wikiWrapperBy, 5, browser);
 		return WikiPage.getGroupWiki(browser);
 	}
 	
 	public PortfolioV2Page openPortfolio() {
 		openMenuItem(portfolioTool);
-		OOGraphene.waitElement(PortfolioV2Page.tocBy, 2, browser);
+		OOGraphene.waitElement(PortfolioV2Page.tocBy, 5, browser);
 		return new PortfolioV2Page(browser);
 	}
 	
@@ -203,21 +203,21 @@ public class GroupPage {
 			By showOwnersBy = By.cssSelector(".o_sel_group_show_owners input[type='checkbox']");
 			browser.findElement(showOwnersBy).click();
 			OOGraphene.waitBusy(browser);
-			OOGraphene.waitElement(memberMenuItem, 2, browser);
+			OOGraphene.waitElement(memberMenuItem, 5, browser);
 		}
 		
 		if(participants) {
 			By showParticipants = By.cssSelector(".o_sel_group_show_participants input[type='checkbox']");
 			browser.findElement(showParticipants).click();
 			OOGraphene.waitBusy(browser);
-			OOGraphene.waitElement(memberMenuItem, 2, browser);
+			OOGraphene.waitElement(memberMenuItem, 5, browser);
 		}
 		
 		if(waitingList) {
 			By showWaitingListBy = By.cssSelector(".o_sel_group_show_waiting_list input[type='checkbox']");
 			browser.findElement(showWaitingListBy).click();
 			OOGraphene.waitBusy(browser);
-			OOGraphene.waitElement(memberMenuItem, 2, browser);
+			OOGraphene.waitElement(memberMenuItem, 5, browser);
 		}
 		return this;
 	}
diff --git a/src/test/java/org/olat/selenium/page/portfolio/PortfolioV2Page.java b/src/test/java/org/olat/selenium/page/portfolio/PortfolioV2Page.java
index f31dee763734d59385a6984c08a8bc3c68ec2e52..bc8f409044b4f7ec5451d93c123411ce827dd19a 100644
--- a/src/test/java/org/olat/selenium/page/portfolio/PortfolioV2Page.java
+++ b/src/test/java/org/olat/selenium/page/portfolio/PortfolioV2Page.java
@@ -37,5 +37,15 @@ public class PortfolioV2Page {
 	public PortfolioV2Page(WebDriver browser) {
 		this.browser = browser;
 	}
+	
+	/*
+	  .openEditor()
+	 .selectMapInEditor()
+			.selectFirstPageInEditor()
+			.setPage(pageTitle, "With a little description")
+			.createStructureElement(structureElementTitle, "Structure description")
+			.closeEditor()
+			.assertStructure(structureElementTitle);
+	 */
 
 }