diff --git a/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java b/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java
index ae816a68a617280e8b3ff3915257393802279bb8..4da2876235e7468d09b4cb58be44f7f4c6882e74 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java
@@ -92,6 +92,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 import de.bps.onyx.plugin.OnyxModule;
 import de.bps.onyx.plugin.course.nodes.iq.IQEditForm;
+import de.bps.onyx.plugin.run.OnyxRunController;
 import de.bps.webservices.clients.onyxreporter.OnyxReporterConnector;
 import de.bps.webservices.clients.onyxreporter.OnyxReporterException;
 
@@ -193,12 +194,8 @@ public class IQConfigurationController extends BasicController {
 
 			previewLink = LinkFactory.createCustomLink("command.preview", "command.preview", displayName, Link.NONTRANSLATED, myContent, this);
 			previewLink.setIconLeftCSS("o_icon o_icon-fw o_icon_preview");
-			if(isOnyx) {
-				previewLink.setEnabled(false);
-			} else {
-				previewLink.setCustomEnabledLinkCSS("o_preview");
-				previewLink.setTitle(translate("command.preview"));
-			}
+			previewLink.setCustomEnabledLinkCSS("o_preview");
+			previewLink.setTitle(translate("command.preview"));
 		}
 
 		String disclaimer = (String) moduleConfiguration.get(IQEditController.CONFIG_KEY_DISCLAIMER);
@@ -374,9 +371,14 @@ public class IQConfigurationController extends BasicController {
 		removeAsListenerAndDispose(previewLayoutCtr);
 		
 		RepositoryEntry re = getIQReference(moduleConfiguration, false);
-		if(re != null && !OnyxModule.isOnyxTest(re.getOlatResource())) {
+		if(re != null) {
 			Controller previewController;
-			if(ImsQTI21Resource.TYPE_NAME.equals(re.getOlatResource().getResourceableTypeName())) {
+			if(OnyxModule.isOnyxTest(re.getOlatResource())) {
+				Controller previewCtrl = new OnyxRunController(ureq, getWindowControl(), re, false);
+				listenTo(previewCtrl);
+				previewLayoutCtr = new LayoutMain3ColsController(ureq, getWindowControl(), previewCtrl);
+				stackPanel.pushController(translate("preview"), previewLayoutCtr);
+			} else if(ImsQTI21Resource.TYPE_NAME.equals(re.getOlatResource().getResourceableTypeName())) {
 				//TODO qti
 				/* need to clean up the assessment test session
 				QTI21DeliveryOptions deliveryOptions = qti21service.getDeliveryOptions(re);
diff --git a/src/main/java/org/olat/course/nodes/iq/_content/edit.html b/src/main/java/org/olat/course/nodes/iq/_content/edit.html
index 6a996d87f780e68aecf2846829c2ffb8789f36f4..028b19f0c7bbcae15ff082e8c9cc2c5d4163a1bd 100644
--- a/src/main/java/org/olat/course/nodes/iq/_content/edit.html
+++ b/src/main/java/org/olat/course/nodes/iq/_content/edit.html
@@ -12,13 +12,7 @@
 	#if ($dontRenderRepositoryButton)
 		<div class="form-group">
 			<label class="control-label col-sm-3">$r.translate("file.name")</label>
-			<div class="col-sm-9"><p class="form-control-static">
-			#if ($isOnyx)
-				$onyxDisplayName
-			#else
-				$r.render("command.preview")
-			#end</p>
-			</div>
+			<div class="col-sm-9"><p class="form-control-static">$r.render("command.preview")</div>
 		</div>
 		<div class="form-group">
 			<div class="col-sm-offset-3 col-sm-9">
diff --git a/src/main/java/org/olat/modules/qpool/manager/QItemQueriesDAO.java b/src/main/java/org/olat/modules/qpool/manager/QItemQueriesDAO.java
index 5a78f321cc126598ebebbc80fcc642cebe97f4f5..8204cc3df2d324c6743b16c00b97c59ee6c3c047 100644
--- a/src/main/java/org/olat/modules/qpool/manager/QItemQueriesDAO.java
+++ b/src/main/java/org/olat/modules/qpool/manager/QItemQueriesDAO.java
@@ -375,18 +375,43 @@ public class QItemQueriesDAO {
 			boolean asc = orderBy[0].isAsc();
 			sb.append(" order by ");
 			switch(sortKey) {
-				case "itemType": sb.append(dbRef).append(".type.type"); break;
-				case "marks": sb.append("marks"); break;
-				case "rating": sb.append("rating"); break;
-				default: sb.append(dbRef).append(".").append(sortKey); break;
-			}
-			if(asc) {
-				sb.append(" asc ");
-			} else {
-				sb.append(" desc ");
+				case "itemType":
+					sb.append(dbRef).append(".type.type ");
+					appendAsc(sb, asc);
+					break;
+				case "marks":
+					sb.append("marks");
+					appendAsc(sb, asc);
+					break;
+				case "rating":
+					sb.append("rating");
+					appendAsc(sb, asc);
+					sb.append(" nulls last");
+					break;
+				case "keywords":
+				case "coverage":
+				case "additionalInformations":
+					sb.append("lower(").append(dbRef).append(".").append(sortKey).append(")");
+					appendAsc(sb, asc);
+					sb.append(" nulls last");
+					break;	
+				default:
+					sb.append(dbRef).append(".").append(sortKey);
+					appendAsc(sb, asc);
+					sb.append(" nulls last");
+					break;
 			}
 		} else {
 			sb.append(" order by item.key asc ");
 		}
 	}
+	
+	private final StringBuilder appendAsc(StringBuilder sb, boolean asc) {
+		if(asc) {
+			sb.append(" asc");
+		} else {
+			sb.append(" desc");
+		}
+		return sb;
+	}
 }
diff --git a/src/main/java/org/olat/modules/qpool/ui/metadata/GeneralMetadataEditController.java b/src/main/java/org/olat/modules/qpool/ui/metadata/GeneralMetadataEditController.java
index 6cfec2e197825f6acd544bbccf3ec086e1741cf4..d3cae28639c89313c64a2803ded052290eecb6fd 100644
--- a/src/main/java/org/olat/modules/qpool/ui/metadata/GeneralMetadataEditController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/metadata/GeneralMetadataEditController.java
@@ -197,9 +197,21 @@ public class GeneralMetadataEditController extends FormBasicController {
 		if(item instanceof QuestionItemImpl) {
 			QuestionItemImpl itemImpl = (QuestionItemImpl)item;
 			itemImpl.setTitle(titleEl.getValue());
-			itemImpl.setKeywords(keywordsEl.getValue());
-			itemImpl.setCoverage(coverageEl.getValue());
-			itemImpl.setAdditionalInformations(addInfosEl.getValue());
+			if(StringHelper.containsNonWhitespace(keywordsEl.getValue())) {
+				itemImpl.setKeywords(keywordsEl.getValue());
+			} else {
+				itemImpl.setKeywords("");
+			}
+			if(StringHelper.containsNonWhitespace(coverageEl.getValue())) {
+				itemImpl.setCoverage(coverageEl.getValue());
+			} else {
+				itemImpl.setCoverage("");
+			}
+			if(StringHelper.containsNonWhitespace(addInfosEl.getValue())) {
+				itemImpl.setAdditionalInformations(addInfosEl.getValue());
+			} else {
+				itemImpl.setAdditionalInformations(null);
+			}
 			itemImpl.setLanguage(languageEl.getValue());
 			if(selectedTaxonomicPath != null) {
 				itemImpl.setTaxonomyLevel(selectedTaxonomicPath);
diff --git a/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml b/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml
index 90104717f0dc1195720f4258ec48b504b7801960..6e696270c08466cf4f32d8e005e5d2238824938a 100644
--- a/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml
+++ b/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml
@@ -124,6 +124,10 @@
 					<constructor-arg index="0" value="OLAT_11.1.0" />
 					<property name="alterDbStatements" value="alter_11_x_0_to_11_1_0.sql" />
 				</bean>
+				<bean id="database_upgrade_11_1_2" class="org.olat.upgrade.DatabaseUpgrade">
+					<constructor-arg index="0" value="OLAT_11.1.2" />
+					<property name="alterDbStatements" value="alter_11_1_1_to_11_1_2.sql" />
+				</bean>
 				<bean id="database_upgrade_11_2_0" class="org.olat.upgrade.DatabaseUpgrade">
 					<constructor-arg index="0" value="OLAT_11.2.0" />
 					<property name="alterDbStatements" value="alter_11_0_6_to_11_2_0.sql" />
diff --git a/src/main/resources/database/mysql/alter_11_1_1_to_11_1_2.sql b/src/main/resources/database/mysql/alter_11_1_1_to_11_1_2.sql
new file mode 100644
index 0000000000000000000000000000000000000000..275e42c248a86915020cf25b4e7facd049fb05ed
--- /dev/null
+++ b/src/main/resources/database/mysql/alter_11_1_1_to_11_1_2.sql
@@ -0,0 +1,2 @@
+update o_qp_item set q_keywords=null where q_keywords='';
+update o_qp_item set q_coverage=null where q_coverage='';
\ No newline at end of file
diff --git a/src/main/resources/database/oracle/alter_11_1_1_to_11_1_2.sql b/src/main/resources/database/oracle/alter_11_1_1_to_11_1_2.sql
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/resources/database/postgresql/alter_11_1_1_to_11_1_2.sql b/src/main/resources/database/postgresql/alter_11_1_1_to_11_1_2.sql
new file mode 100644
index 0000000000000000000000000000000000000000..275e42c248a86915020cf25b4e7facd049fb05ed
--- /dev/null
+++ b/src/main/resources/database/postgresql/alter_11_1_1_to_11_1_2.sql
@@ -0,0 +1,2 @@
+update o_qp_item set q_keywords=null where q_keywords='';
+update o_qp_item set q_coverage=null where q_coverage='';
\ No newline at end of file