diff --git a/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java b/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java
index 0357b84f2858849f3264b5d07a2597ff1ef07362..996f4014226bbcf5415030f38b6f4448084e953a 100644
--- a/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java
+++ b/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java
@@ -116,11 +116,7 @@ public class HTMLToOpenXMLHandler extends DefaultHandler {
 				flushText();
 				addContent(currentParagraph);
 			}
-			
-			Indent indent = getCurrentIndent();
-			Border leftBorder = getCurrentLeftBorder();
-			PredefinedStyle predefinedStyle = getCurrentPredefinedStyle();
-			currentParagraph = factory.createParagraphEl(indent, leftBorder, startSpacing, predefinedStyle);
+			currentParagraph = createParagraphWithCurrentStyling(startSpacing);
 			startSpacing = null;//consumed
 		}
 		return currentParagraph;
@@ -132,11 +128,15 @@ public class HTMLToOpenXMLHandler extends DefaultHandler {
 			flushText();
 			addContent(currentParagraph);
 		}
+		currentParagraph = createParagraphWithCurrentStyling(spacing);
+		return currentParagraph;
+	}
+	
+	private Element createParagraphWithCurrentStyling(Spacing spacing) {
 		Indent indent = getCurrentIndent();
 		Border leftBorder = getCurrentLeftBorder();
 		PredefinedStyle predefinedStyle = getCurrentPredefinedStyle();
-		currentParagraph = factory.createParagraphEl(indent, leftBorder, spacing, predefinedStyle);
-		return currentParagraph;
+		return factory.createParagraphEl(indent, leftBorder, spacing, predefinedStyle);
 	}
 	
 	protected Element getCurrentListParagraph(boolean create) {
@@ -185,18 +185,15 @@ public class HTMLToOpenXMLHandler extends DefaultHandler {
 		}
 	}
 	
+	protected boolean hasTextToFlush() {
+		return textBuffer != null && textBuffer.length() > 0;
+	}
+	
 	protected void flushText() {
 		if(textBuffer == null) return;
 		
 		if(latex) {
-			//begin a new paragraph
-			if(currentParagraph != null) {
-				currentParagraph = addContent(currentParagraph);
-			}
-			List<Node> nodes = factory.convertLaTeX(textBuffer.toString());
-			for(Node node:nodes) {
-				addContent(node);
-			}
+			flushLaTeX();
 		} else {
 			Element currentRun = getCurrentRun();
 			String text = textBuffer.toString().replace("\n", "").replace("\r", "");
@@ -212,6 +209,21 @@ public class HTMLToOpenXMLHandler extends DefaultHandler {
 		textBuffer = null;
 	}
 	
+	private void flushLaTeX() {
+		Element paragraphEl;
+		if(currentParagraph == null) {
+			paragraphEl = currentParagraph = createParagraphWithCurrentStyling(startSpacing);
+			startSpacing = null;
+		} else {
+			paragraphEl = currentParagraph;
+		}
+		
+		List<Node> nodes = factory.convertLaTeX(textBuffer.toString(), false);
+		for(Node node:nodes) {
+			paragraphEl.appendChild(node);
+		}
+	}
+	
 	/**
 	 * Get or create a run on the current paragraph
 	 * @return
@@ -219,10 +231,7 @@ public class HTMLToOpenXMLHandler extends DefaultHandler {
 	protected Element getCurrentRun() {
 		Element paragraphEl;
 		if(currentParagraph == null) {
-			Indent indent = getCurrentIndent();
-			Border leftBorder = getCurrentLeftBorder();
-			PredefinedStyle predefinedStyle = getCurrentPredefinedStyle();
-			paragraphEl = currentParagraph = factory.createParagraphEl(indent, leftBorder, startSpacing, predefinedStyle);
+			paragraphEl = currentParagraph = createParagraphWithCurrentStyling(startSpacing);
 			startSpacing = null;
 		} else {
 			paragraphEl = currentParagraph;
diff --git a/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java b/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java
index 6ba0feaf97dda6ee47f0458cf0b79b5ea6a086f7..04f580c3577f1185e9f90e5e0de131d3510ae1e9 100644
--- a/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java
+++ b/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java
@@ -1015,7 +1015,7 @@ public class OpenXMLDocument {
 		return createParagraphEl(null, Collections.singletonList(runEl));
 	}
 	
-	public List<Node> convertLaTeX(String latex) {
+	public List<Node> convertLaTeX(String latex, boolean paragraph) {
 		List<Node> mathEls = new ArrayList<>();
 		try {
 			// place the latex marker if needed
@@ -1048,11 +1048,8 @@ public class OpenXMLDocument {
 					
 					NodeList bodyList = doc.getElementsByTagName("w:body");
 					if(bodyList.getLength() == 1) {
-						Node body = bodyList.item(0);
-						for(Node node=body.getFirstChild(); node!=null; node=node.getNextSibling()) {
-							Node importedNode = document.importNode(node, true);
-							mathEls.add(importedNode);
-						}
+						List<Node> mathNodes = collectMathParagraph(bodyList.item(0), paragraph);
+						mathEls.addAll(mathNodes);
 					}
 				}
 				entry = zip.getNextEntry();
@@ -1063,6 +1060,34 @@ public class OpenXMLDocument {
 		return mathEls;
 	}
 	
+	private List<Node> collectMathParagraph(Node parent, boolean paragraph) {
+		List<Node> mathEls = new ArrayList<>();
+		if(paragraph) {
+			for(Node node=parent.getFirstChild(); node!=null; node=node.getNextSibling()) {
+				String nodeName = node.getNodeName();
+				if("w:p".equalsIgnoreCase(nodeName)) {
+					Node importedNode = document.importNode(node, true);
+					mathEls.add(importedNode);
+				}
+			}
+		} else {
+			NodeList mathList = ((Element)parent).getElementsByTagName("m:oMath");
+			for(int i=0; i<mathList.getLength(); i++) {
+				Node importedNode = document.importNode(mathList.item(i), true);
+				mathEls.add(importedNode);
+			}
+		}
+		
+		if(mathEls.isEmpty()) {
+			for(Node node=parent.getFirstChild(); node!=null; node=node.getNextSibling()) {
+				Node importedNode = document.importNode(node, true);
+				mathEls.add(importedNode);
+			}
+		}
+		
+		return mathEls;
+	}
+	
 	public void appendImage(File file) {
 		Element imgEl = createImageEl(file);
 		if(imgEl != null) {
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 3e296e0754b9c7d8932415d65fb7c0768c72fdeb..2e18f6b833ac63c58643150686f257f875984bbf 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
@@ -537,6 +537,11 @@ public class QTI21WordExport implements MediaResource {
 		}
 		
 		private void endSimpleChoice() {
+			if(hasTextToFlush()) {
+				flushText();
+				currentParagraph = addContent(currentParagraph);
+			}
+			
 			Element checkboxCell = factory.createTableCell(null, 369, Unit.pct);
 			Node checkboxNode = getCurrentTable().addCellEl(checkboxCell, 1);
 			
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 f53b3c033f962edefef66d0a60ab69301f09fcf5..0caa8e16d0d33305c2b6999da33769ba7428954b 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
@@ -213,9 +213,11 @@ public class AssessmentItemEditorController extends BasicController implements A
 				tabbedPane.addTab(translate("form.pool"), poolEditor);
 			}
 			
-			metadataCtrl = new MetadataController(ureq, getWindowControl(), metadataBuilder, readOnly);
-			listenTo(metadataCtrl);
-			tabbedPane.addTab(translate("form.metadata"), metadataCtrl);
+			if(metadataBuilder != null) {
+				metadataCtrl = new MetadataController(ureq, getWindowControl(), metadataBuilder, readOnly);
+				listenTo(metadataCtrl);
+				tabbedPane.addTab(translate("form.metadata"), metadataCtrl);
+			}
 		}
 
 		putInitialPanel(mainVC);