diff --git a/pom.xml b/pom.xml
index 34f0b7d39775ac751030f76e52641e8c46855a8b..5d0e4895bf78a37c7a9afd6f953ed6d68779efc8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,6 +100,7 @@
 	    <test.env.instance.id>myolat</test.env.instance.id>
 	    <test.env.jmx.rmi.port.0>3000</test.env.jmx.rmi.port.0>
 	    <test.env.webdriver.browser>chrome</test.env.webdriver.browser>
+	    <test.env.webdriver.firefox.version></test.env.webdriver.firefox.version>
 	    <test.env.webdriver.chrome.version></test.env.webdriver.chrome.version>
 	    <test.env.webdriver.chrome.arguments></test.env.webdriver.chrome.arguments>
 	    <skipTests>true</skipTests>
@@ -1338,6 +1339,7 @@
 						<test.env.jmx.rmi.port.0>${test.env.jmx.rmi.port.0}</test.env.jmx.rmi.port.0>
 						<arquillian.launch>tomcat-7-managed</arquillian.launch>
 						<webdriver.browser>${test.env.webdriver.browser}</webdriver.browser>
+						<webdriver.firefox.version>${test.env.webdriver.firefox.version}</webdriver.firefox.version>
 						<webdriver.chrome.version>${test.env.webdriver.chrome.version}</webdriver.chrome.version>
 						<webdriver.chrome.arguments>${test.env.webdriver.chrome.arguments}</webdriver.chrome.arguments>
 					</systemPropertyVariables>
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 24701e45fb996f6b05b9c0a58b1e86931753cfb8..b4e8b89994989dce9396e80020ee9b7c00868968 100644
--- a/src/main/java/org/olat/ims/qti21/manager/QTI21StatisticsManagerImpl.java
+++ b/src/main/java/org/olat/ims/qti21/manager/QTI21StatisticsManagerImpl.java
@@ -112,7 +112,8 @@ public class QTI21StatisticsManagerImpl implements QTI21StatisticsManager {
 		}
 		
 		sb.append(" and asession.lastModified = (select max(a2session.lastModified) from qtiassessmenttestsession a2session")
-		  .append("   where asession.testEntry.key=a2session.testEntry.key and a2session.repositoryEntry.key=asession.repositoryEntry.key");
+		  .append("   where asession.testEntry.key=a2session.testEntry.key and a2session.repositoryEntry.key=asession.repositoryEntry.key")
+		  .append("   and a2session.exploded=false and a2session.cancelled=false");
 		if(searchParams.getNodeIdent() != null ) {
 			sb.append(" and a2session.subIdent=asession.subIdent");
 		} else {
diff --git a/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java b/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java
index 67c2a398c3d923c7ea306535610e798d02ba0373..7c713bae5f03383437c350772832505e6aa54d04 100644
--- a/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java
+++ b/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java
@@ -97,6 +97,7 @@ public class CSVToAssessmentItemConverter {
 	public void parse(String input) {
 		List<String[]> lines = getLines(input);
 		for(String[] line:lines) {
+			currentLine++;
 			processLine(line);
 		}
 		buildCurrentItem();
diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentTestSessionTableModel.java b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentTestSessionTableModel.java
index 957c7468deb6692010114d97854b803054ed65f2..58e84e16da80e5c2ff702f68ce1cf5b61c80a228 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentTestSessionTableModel.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentTestSessionTableModel.java
@@ -122,17 +122,19 @@ public class QTI21AssessmentTestSessionTableModel extends DefaultFlexiTableDataM
 				}
 				return "";
 			}
-			case open: {
-				Date finished = session.getTestSession().getFinishTime();
-				return finished == null ? Boolean.FALSE : Boolean.TRUE;
-			}
+			case open: return Boolean.valueOf(!isTestSessionOpen(session));
 			case correction: return (lastSession != null && lastSession.equals(session.getTestSession()));
-			case invalidate: return !session.getTestSession().isCancelled() && !session.getTestSession().isExploded();
+			case invalidate: return !isTestSessionOpen(session) && !session.getTestSession().isCancelled() && !session.getTestSession().isExploded();
 			case tools: return session.getToolsLink();
 			default: return "ERROR";
 		}
 	}
 	
+	private boolean isTestSessionOpen(QTI21AssessmentTestSessionDetails session) {
+		Date finished = session.getTestSession().getFinishTime();
+		return finished == null;
+	}
+	
 	private Date getTerminationTime(QTI21AssessmentTestSessionDetails session) {
 		Date endTime = session.getTestSession().getTerminationTime();
 		if(endTime == null) {
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 b3bbb6a2a875f3c2cd7a62a0d1698add554720a3..940c74a4df13b05295d85a56b3e8603d350b2ff8 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
@@ -144,7 +144,7 @@ interaction.order.target=Ziel
 invalidate=Annullieren
 invalidate.overwrite=Annullieren und Resultat \u00FCbertragen
 invalidate.test.confirm.title=Annullieren
-invalidate.test.confirm.text=Wollen Sie den Test Session ung\u00FCltig machen? Die Daten werden nicht gel\u00F6scht.
+invalidate.test.confirm.text=Wollen Sie diese Test-Session als ung\u00FCltig markieren? Die Daten werden nicht gel\u00F6scht.
 item.comment=Kommentar
 kprim.minus=Falsch
 kprim.plus=Richtig
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 239e9658f01374716d32c56a5cdb8d75fa22fd8a..f97016f63995085f27ab3b7237c368373e287394 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
@@ -144,7 +144,7 @@ interaction.order.target=Target
 invalidate=Invalidate
 invalidate.overwrite=Invalidate and transfer result
 invalidate.test.confirm.title=Invalidate
-invalidate.test.confirm.text=Do you want to invalidate this test session? The date will not be deleted.
+invalidate.test.confirm.text=Do you want to mark this test session as invalid? The data will not be deleted.
 item.comment=Comment
 kprim.minus=False
 kprim.plus=True
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 a17019eecc96f189c32d213b8aaaa76f895267a3..8cba37429b84c9ae2cc6fc19e973bb4d4ce98d6b 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
@@ -90,7 +90,7 @@ fib.tolerance.mode.relative.example=Prozent, zum Beispiel 15 oder 99.0
 fib.tolerance.mode.relative.help=Die Schranke stellt eine relative Zahl in Prozent dar.\u2028Beispiel\: L\u00F6sung 20, Untere Schranke 10, Obere Schranke 10 &rarr; Alle L\u00F6sungen zwischen 18 und 22 sind g\u00FCltig, denn die untere Schranke bedeutet minus 10% (20-2) und die obere Schranke plus 10% (20+2).
 fib.tolerance.up=Obere Schranke
 file=Datei
-force.inherited.max.attempts=Setzt alle unter "L\u00F6sungsversuche" zu "Vererbt"
+force.inherited.max.attempts=Anzahl L\u00F6sungsversuche an alle Unterelemente (Fragen, Sektionen) vererben
 form.choice=Auswahl
 form.drawing=Zeichnen
 form.essay=Freitext
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 53202636e26ce76327459d7196997aff2b0613e0..73c88a05be274d4384259ab222a51e0848b6fa97 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
@@ -90,7 +90,7 @@ fib.tolerance.mode.relative.example=Percentage, example 15 or 99.0
 fib.tolerance.mode.relative.help=The solution is accepted until a lower and an upper bound. The bound is a relative number in percent. Example\: Solution 20, lower bound 10, upper bound 10 &rarr; all solutions between 18 and 22 are correct, as the lower bound means minus 10% (20-2) and the upper bound plus 10% (20+2).
 fib.tolerance.up=Upper bound
 file=File
-force.inherited.max.attempts=Set all under "Number of attempts" to inherit
+force.inherited.max.attempts=Inherit number of attempts to all sub-elements (sections, questions)
 form.choice=Choice
 form.drawing=Drawing
 form.essay=Essay
diff --git a/src/test/resources/arquillian.xml b/src/test/resources/arquillian.xml
index c2667baa98ff5397688bd864f7dab35de62fe77f..f656a58437d8e95cd593cd1915c1e90663339a3b 100644
--- a/src/test/resources/arquillian.xml
+++ b/src/test/resources/arquillian.xml
@@ -28,6 +28,7 @@
 		<property name="chromeDriverBinary">target/drone/675a673c111fdcc9678d11df0e69b334/chromedriver</property>
 		<property name="firefoxDriverBinary">target/drone/ce03addb1fc8c24900011f90fc80f3c1/geckodriver</property>
 		-->
+		<property name="firefoxDriverVersion">${webdriver.firefox.version:v0.27.0}</property>
 		<property name="firefoxUserPreferences">src/test/profile/firefox/prefs.js</property>
 		<property name="chromeDriverVersion">${webdriver.chrome.version:84.0.4147.30}</property>
 		<property name="chromeArguments">${webdriver.chrome.arguments}</property>