diff --git a/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java b/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java
index 13dc8ae5a7eb9c9a1a840d0800e8b12434fd9fe9..12b6cecc37fe24179eebbc818a3b209605f42fb9 100644
--- a/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java
+++ b/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java
@@ -674,6 +674,22 @@ public class VelocityRenderDecorator implements Closeable {
 		return obj != null;
 	}
 	
+	public boolean isEmpty(Object obj) {
+		boolean empty;
+		if(obj == null) {
+			empty = true;
+		} else if(obj instanceof String) {
+			empty = !StringHelper.containsNonWhitespace((String)obj) || "<p></p>".equals(obj);
+		} else if(obj instanceof Collection) {
+			empty = ((Collection<?>)obj).isEmpty();
+		} else if(obj instanceof Map) {
+			empty = ((Map<?,?>)obj).isEmpty();
+		} else {
+			empty = false;
+		}
+		return empty;
+	}
+	
 	public boolean isNotEmpty(Object obj) {
 		boolean notEmpty;
 		if(obj == null) {
diff --git a/src/main/java/org/olat/ims/qti21/manager/InfinispanXsltStylesheetCache.java b/src/main/java/org/olat/ims/qti21/manager/InfinispanXsltStylesheetCache.java
index 51c220e5596f0db50a28553fcfb9b1295d15bd6c..a457c7ad1f2602310a27ce714041aa381ec69a2b 100644
--- a/src/main/java/org/olat/ims/qti21/manager/InfinispanXsltStylesheetCache.java
+++ b/src/main/java/org/olat/ims/qti21/manager/InfinispanXsltStylesheetCache.java
@@ -44,7 +44,7 @@ public class InfinispanXsltStylesheetCache implements XsltStylesheetCache {
 	@SuppressWarnings("static-access")
 	@Autowired
 	public InfinispanXsltStylesheetCache(CoordinatorManager coordinatorManager) {
-		cache = coordinatorManager.getInstance().getCoordinator().getCacher().getCache("QTIWorks", "ssltStylesheets");
+		cache = coordinatorManager.getInstance().getCoordinator().getCacher().getCache("QTIWorks", "xsltStylesheets");
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/ims/qti21/manager/QTI21StatisticsManagerImpl.java b/src/main/java/org/olat/ims/qti21/manager/QTI21StatisticsManagerImpl.java
index 9f657ab58eaf3516a1a5bb9e9fbdf6b501b3eb38..ae629d0d930fe7988cda54ae742bca3175902465 100644
--- a/src/main/java/org/olat/ims/qti21/manager/QTI21StatisticsManagerImpl.java
+++ b/src/main/java/org/olat/ims/qti21/manager/QTI21StatisticsManagerImpl.java
@@ -128,9 +128,18 @@ public class QTI21StatisticsManagerImpl implements QTI21StatisticsManager {
 		query.setParameter("testEntryKey", searchParams.getTestEntry().getKey());
 		if(searchParams.getCourseEntry() != null) {
 			query.setParameter("repositoryEntryKey", searchParams.getCourseEntry().getKey());
+		}
+		if(searchParams.getNodeIdent() != null ) {
 			query.setParameter("subIdent", searchParams.getNodeIdent());
 		}
-		if(searchParams.getLimitToGroups() != null && searchParams.getLimitToGroups().size() > 0) {
+		
+		if(searchParams.isViewAllUsers() && searchParams.isViewAnonymUsers()) {
+			//no restrictions
+		} else if(searchParams.isViewAnonymUsers()) {
+			//
+		} else if(searchParams.isViewAllUsers()) {
+			//
+		} else if(searchParams.getLimitToGroups() != null && searchParams.getLimitToGroups().size() > 0) {
 			query.setParameter("baseGroups", searchParams.getLimitToGroups());
 		}
 	}
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 ef788e3d07cf92f1b37bffc80cb54caf57b00e2f..c0411bfe803fecd9e47d6844990684d12341de86 100644
--- a/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
@@ -855,16 +855,16 @@ public class AssessmentTestDisplayController extends BasicController implements
 		TestPlanNode nextTestPart = testSessionController.findNextEnterableTestPart();
 
 		if(nextTestPart == null) {
-			String title = translate("confirm.close.test.title");
-			String text = translate("confirm.close.test.text");
+			String title = translate("confirm.finish.test.title");
+			String text = translate("confirm.finish.test.text");
 			endTestPartDialog = activateOkCancelDialog(ureq, title, text, endTestPartDialog);
 		} else {
 			TestPart currentTestPart = testSessionController.getCurrentTestPart();
 			if(currentTestPart == null) {
 				processEndTestPart(ureq);
 			} else {
-				String title = translate("confirm.end.testpart.title");
-				String text = translate("confirm.end.testpart.text");
+				String title = translate("confirm.finish.testpart.title");
+				String text = translate("confirm.finish.testpart.text");
 				endTestPartDialog = activateOkCancelDialog(ureq, title, text, endTestPartDialog);
 			}
 		}
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 a0c7efa339e70a9d011cf084f3b5c195f0dedc7b..2177f1db895e51d3d3fd5354ef5179b13cfe8e30 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
@@ -1,7 +1,7 @@
-#Mon Aug 15 10:49:18 CEST 2016
+#Tue Aug 23 10:37:11 CEST 2016
 actualPoints=$org.olat.modules.iq\:actualPoints
+anonym.not.allowed.descr=Anonym Benutzer d\u00FCrfen diesen Test nicht durchf\u00FChren
 anonym.not.allowed.title=Anonym Benutzer
-anonym.not.allowed.descr=Anonym Benutzer dürfen diesen Test nicht durchführen
 anonym.user=Anonym Benutzer
 assessment.comment.legend=Pers\u00F6nliche Notizen
 assessment.item.modal.feedback=Feedback
@@ -45,8 +45,12 @@ command.openteststatistic=Test statistics
 confirm.advance.testpart.text=Wollen sie wirklich diese Test Part verlassen und weiter gehen?
 confirm.advance.testpart.title=Test Part weiter gehen
 confirm.cancel.test=$org.olat.modules.iq\:confirmCancel
-confirm.close.test.text=Wollen Sie wirklich den Test abschliessen?
-confirm.close.test.title=Test abschliessen
+confirm.close.test.text=Sind Sie sicher dass Sie den Test schliessen wollen? Sie verlassen den Test dadurch endg\u00FCltig und haben im Anschluss keinen Zugriff mehr darauf.
+confirm.close.test.title=Test schliessen
+confirm.finish.test.text=Sind Sie sicher dass Sie den Test beenden wollen? Ihre Antworten werden dadurch gespeichert.\u00A0
+confirm.finish.test.title=Test beenden
+confirm.finish.testpart.text=Sind Sie sicher dass Sie den Test Part beenden wollen? Ihre Antworten werden dadurch gespeichert.\u00A0
+confirm.finish.testpart.title=Test Part beenden
 confirm.suspend.test=$org.olat.modules.iq\:confirmSuspend
 correction=Korrigieren
 debug.outcomes=Output Daten
@@ -70,6 +74,7 @@ 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
 pull=Ziehen
+qti.form.allow.anonym=$org.olat.course.nodes.iq\:qti.form.allow.anonym
 qti.form.attempts=$org.olat.course.nodes.iq\:qti.form.attempts
 qti.form.auto.memofield=$org.olat.course.nodes.iq\:qti.form.auto.memofield
 qti.form.block.afterSuccess=$org.olat.course.nodes.iq\:qti.form.block.afterSuccess
@@ -86,7 +91,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
-qti.form.allow.anonym=$org.olat.course.nodes.iq\:qti.form.allow.anonym
 question.progress.answered=Antwortet
 question.progress.noMaxScore=$org.olat.modules.iq\:noMaxScore
 question.progress.score=$org.olat.modules.iq\:actualPoints
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 2b6b445f63a4d438a2c8ee5441d6f988e67ac6e8..c16d3b7d9ec35f87248563fc58578fdebebdddd5 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,8 +1,8 @@
-#Mon Aug 15 10:49:39 CEST 2016
+#Tue Aug 23 10:37:23 CEST 2016
 actualPoints=$org.olat.modules.iq\:actualPoints
-anonym.user=Anonymous user
-anonym.not.allowed.title=Anonym users
 anonym.not.allowed.descr=Anonym users are not allowed to play this test
+anonym.not.allowed.title=Anonym users
+anonym.user=Anonymous user
 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
@@ -45,18 +45,19 @@ command.openteststatistic=Test statistics
 confirm.advance.testpart.text=Do really want to leave this test part and advance further?
 confirm.advance.testpart.title=Advance test part
 confirm.cancel.test=$org.olat.modules.iq\:confirmCancel
-confirm.close.test.text=Do you really want to submit the test?
-confirm.close.test.title=Submit test
+confirm.close.test.text=Close / Are you sure? This will leave this Test and you can't go back in.
+confirm.close.test.title=Close test
+confirm.finish.test.text=Finish / Are you sure? This will commit your answers for this test.
+confirm.finish.test.title=Finish test
+confirm.finish.testpart.text=Finish / Are you sure? This will commit your answers for this test part.
+confirm.finish.testpart.title=Finish test part
 confirm.suspend.test=$org.olat.modules.iq\:confirmSuspend
-correction=Correct
+correction=Grade
 debug.outcomes=Output data
 debug.responses=Responses data
 error.as.directed=Please complete this interaction as directed.
 error.choice=You must select one of the following options
 error.double=Need to be a double
-error.required.format=Your input is not of the required format.
-error.textEntry.invalid=Your input must be a valid {0}
-error.textEntry.invalid.record=Your input must be a valid number
 error.input.choice.max=You must select at the most {0} choices.
 error.input.choice.min=You must select at least {0} choice(s).
 error.input.choice.min.max=You must select at least {0} and at the most {1} choices.
@@ -65,6 +66,9 @@ error.input.choice.minax.one=You must select one choice.
 error.input.extendedText.max=Write a text with at the most {0} words.
 error.input.extendedText.min=Write a text with at least {0} words.
 error.input.extendedText.min.max=Write a text with at least  {0} and at the most {1} words.
+error.required.format=Your input is not of the required format.
+error.textEntry.invalid=Your input must be a valid {0}
+error.textEntry.invalid.record=Your input must be a valid number
 exploded.msg=Exploded
 form.metadata.title=Title
 head.assessment.details=$org.olat.ims.qti\:head.ass.details
@@ -79,6 +83,7 @@ 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
 pull=Pull
+qti.form.allow.anonym=$org.olat.course.nodes.iq\:qti.form.allow.anonym
 qti.form.attempts=$org.olat.course.nodes.iq\:qti.form.attempts
 qti.form.auto.memofield=$org.olat.course.nodes.iq\:qti.form.auto.memofield
 qti.form.block.afterSuccess=$org.olat.course.nodes.iq\:qti.form.block.afterSuccess
@@ -95,7 +100,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
-qti.form.allow.anonym=$org.olat.course.nodes.iq\:qti.form.allow.anonym
 question.progress.answered=Answered
 question.progress.noMaxScore=$org.olat.modules.iq\:noMaxScore
 question.progress.score=$org.olat.modules.iq\:actualPoints
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/IdentitiesAssessmentItemCorrectionController.java b/src/main/java/org/olat/ims/qti21/ui/assessment/IdentitiesAssessmentItemCorrectionController.java
index 3cb822dce860a04dbde6523e4f37ca38843e809f..590c5a3bae886e3ed22b5c66110f54b0791ac7bc 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/IdentitiesAssessmentItemCorrectionController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/IdentitiesAssessmentItemCorrectionController.java
@@ -129,8 +129,11 @@ public class IdentitiesAssessmentItemCorrectionController extends FormBasicContr
 		if(formLayout instanceof FormLayoutContainer) {
 			FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout;
 			layoutCont.contextPut("interactionWrappers", itemResults);
-			for(AssessmentItemCorrection correction:testCorrections.getCorrections(itemRef)) {
-				initFormItemResult(correction, layoutCont);
+			List<AssessmentItemCorrection> corrections = testCorrections.getCorrections(itemRef);
+			if(corrections != null) {
+				for(AssessmentItemCorrection correction:corrections) {
+					initFormItemResult(correction, layoutCont);
+				}
 			}
 		}
 		
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/_content/users_interactions.html b/src/main/java/org/olat/ims/qti21/ui/assessment/_content/users_interactions.html
index 4f6a14d5ee62c369700d62f8a99e968f9e996b7a..425dd4e1f7b0c8740d0ad9bd8a57f3cef66be40f 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/_content/users_interactions.html
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/_content/users_interactions.html
@@ -1,4 +1,7 @@
 <fieldset class="o_form form-horizontal" role="form">
+#if($r.isEmpty($interactionWrappers)) 
+	<div class="o_info">$r.translate("grade.no.items")</div>
+#end
 #foreach($interactionWrapper in $interactionWrappers)
 	<h4>${foreach.count}. $r.translate("assessed.identity")</h4>##$interactionWrapper.fullName
 	#if($interactionWrapper.responded)
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_de.properties
index 1e5a28a4c50258417cb12efd4cbd79f02e2cf961..2f490c99e74aa5299e490cc0d04ab58dd4bf15ef 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_de.properties
@@ -1,19 +1,20 @@
-#Mon Aug 15 10:49:18 CEST 2016
+#Tue Aug 23 10:23:37 CEST 2016
 assessed.identity=Benutzer
-score=Ergebnis
 correction=Korrigieren
 correction.min.max.score=Result must ziwschen {0} und {1} sein
 correction.test.title=Korrigieren
-previous.item=Zurück zur letzte Frage
-next.item=Zur nächsten Frage
+grade.no.items=Es gibt kein Resultat f\u00FCr diese Frage zu korrigieren.
+next.item=Zur n\u00E4chsten Frage
 not.responded=Die Frage wurde nicht beantworter
-save.next=Speichern und nächste Frage
-overview.tests=Übersicht and abschliessen
-table.header.username=Benutzername
-table.header.responded=Beantwortet
+overview.tests=\u00DCbersicht and abschliessen
+previous.item=Zur\u00FCck zur letzte Frage
+save.next=Speichern und n\u00E4chste Frage
+save.tests=Resultat speichern als endg\u00FCltig
+score=Ergebnis
 table.header.corrected=Korrigiert
-table.header.score=Punkte
+table.header.finalScore=Endg\u00FCltige Punkte
+table.header.itemSessions=\# Fragen
 table.header.manualScore=Manuell Punkte
-table.header.finalScore=Endgültige Punkte
-table.header.itemSessions=# Fragen
-save.tests=Resultat speichern als endgültig
\ No newline at end of file
+table.header.responded=Beantwortet
+table.header.score=Punkte
+table.header.username=Benutzername
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_en.properties
index 20da4849da9388c009bab57711126c02f28a5d2f..83a388634a86ec8685bed401bcec5a2dc7a94ec2 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_en.properties
@@ -1,19 +1,20 @@
-#Mon Aug 15 10:49:39 CEST 2016
+#Tue Aug 23 10:23:23 CEST 2016
 assessed.identity=assessed user
-score=Score
 correction=Correction
 correction.min.max.score=Score need to be between {0} and {1}.
-correction.test.title=Correct
-previous.item=Previous question
+correction.test.title=Grade
+grade.no.items=There is no results to correct for this question.
 next.item=Next question
 not.responded=The question was not responded
-save.next=Save and next question
 overview.tests=Overview and closing
-table.header.username=Username
-table.header.responded=Responded
+previous.item=Previous question
+save.next=Save and next question
+save.tests=Save results as completed
+score=Score
 table.header.corrected=Corrected
-table.header.score=Punkte
-table.header.manualScore=Manual score
 table.header.finalScore=Final score
-table.header.itemSessions=# questions
-save.tests=Save results as completed
\ No newline at end of file
+table.header.itemSessions=\# questions
+table.header.manualScore=Manual score
+table.header.responded=Responded
+table.header.score=Score
+table.header.username=Username
diff --git a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentItemComponentRenderer.java b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentItemComponentRenderer.java
index be775934ba9be63d3b51ed7a60e1975194345fcc..519ae94386fc5a67ae68ff8ef97e5126ccbe50c0 100644
--- a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentItemComponentRenderer.java
+++ b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentItemComponentRenderer.java
@@ -160,7 +160,7 @@ public class AssessmentItemComponentRenderer extends AssessmentObjectComponentRe
 		sb.append("<h1 class='itemTitle'>");
 		renderItemStatus(renderer, sb, itemSessionState, translator);
 		sb.append(assessmentItem.getTitle()).append("</h1>")
-		  .append("<div id='itemBody'>");
+		  .append("<div id='itemBody' class='clearfix'>");
 		
 		//TODO prompt
 	
diff --git a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java
index 231f01864a6dbbb76ff7335e0b6bf3e422d5f101..766da5acb7ecc60d6d6580805017cf8d227d59ea 100644
--- a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java
+++ b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java
@@ -346,7 +346,7 @@ public class AssessmentTestComponentRenderer extends AssessmentObjectComponentRe
 		renderItemStatus(sb, itemSessionState, options, translator);
 		sb.append(itemNode.getSectionPartTitle(), component.isShowTitles())
 		  .append("</h3>")
-		  .append("<div id='itemBody'>");
+		  .append("<div id='itemBody' class='clearfix'>");
 
 		//render itemBody
 		assessmentItem.getItemBody().getBlocks().forEach((block)