diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java
index 1ed81d993981094bf173fedae5b7d5b79a9a87c9..d244551c6d9bbf7967a5b273cde356192462a254 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java
@@ -472,4 +472,12 @@ public interface FlexiTableElement extends FormItem, FormItemCollection {
 	 * @return The i18n key for the message to be displayed when the table is empty or NULL when no message should be displayed.
 	 */
 	public String getEmtpyTableMessageKey();
+	
+	/**
+	 * Add a button or an other component in the "button grouped"
+	 * panel under the table.
+	 * 
+	 * @param item An acceptable form item
+	 */
+	public void addBatchButton(FormItem item);
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java
index 21b1cfad6cf7f5ab8ddb5ab8bb0cbd38ee3ca923..128a0f16f9ed060f0fe4cf9ffbac406a7f79950f 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java
@@ -95,6 +95,7 @@ public abstract class AbstractFlexiTableRenderer extends DefaultComponentRendere
 			
 			sb.append("</table>");
 			renderFooterButtons(sb, ftC, translator);
+			renderFooterGroupedButtons(renderer, sb, ftC, ubu, translator, renderResult, args);
 			//draggable
 			if(ftE.getColumnIndexForDragAndDropLabel() > 0) {
 				sb.append("<script>")
@@ -402,7 +403,7 @@ public abstract class AbstractFlexiTableRenderer extends DefaultComponentRendere
 	
 	protected void renderFormItem(Renderer renderer, StringOutput sb, FormItem item, URLBuilder ubu, Translator translator,
 			RenderResult renderResult, String[] args) {
-		if(item != null) {
+		if(item != null && item.isVisible()) {
 			Component cmp = item.getComponent();
 			cmp.getHTMLRendererSingleton().render(renderer, sb, cmp, ubu, translator, renderResult, args);
 			cmp.setDirty(false);
@@ -468,6 +469,21 @@ public abstract class AbstractFlexiTableRenderer extends DefaultComponentRendere
 		}
 	}
 	
+	protected void renderFooterGroupedButtons(Renderer renderer, StringOutput sb, FlexiTableComponent ftC,
+			URLBuilder ubu, Translator translator, RenderResult renderResult, String[] args) {
+		List<FormItem> items = ftC.getFlexiTableElement().getBatchButtons();
+		if(items != null) {
+			boolean atLeastOneVisible = items.stream().anyMatch(FormItem::isVisible);
+			if(atLeastOneVisible) {
+				sb.append("<div class='o_button_group'>");
+				for(FormItem item:items) {
+					renderFormItem(renderer, sb, item, ubu, translator, renderResult, args);
+				}
+				sb.append("</div>");
+			}
+		}
+	}
+	
 	protected abstract void renderHeaders(StringOutput target, FlexiTableComponent ftC, Translator translator);
 	
 	protected void renderBody(Renderer renderer, StringOutput target, FlexiTableComponent ftC,
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
index 6b04bcef473abf90572f3c5d7035a2888e2d4ceb..93824009f2fbda9dd1dcd09660f04359f0a6fa17 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
@@ -114,8 +114,10 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	private VelocityContainer rowRenderer;
 	private VelocityContainer detailsRenderer;
 
-	private FormLink customButton, exportButton;
-	private FormLink searchButton, extendedSearchButton;
+	private FormLink customButton;
+	private FormLink exportButton;
+	private FormLink searchButton;
+	private FormLink extendedSearchButton;
 	private FormLink classicTypeButton;
 	private FormLink customTypeButton;
 	private FormLink extendedFilterButton;
@@ -147,8 +149,8 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	
 	private FlexiTreeTableNode rootCrumb;
 	private List<FlexiTreeTableNode> crumbs;
-	
 	private Map<String,FormItem> components = new HashMap<>();
+	private List<FormItem> batchButtons = new ArrayList<>();
 	
 	public FlexiTableElementImpl(WindowControl wControl, String name, Translator translator, FlexiTableDataModel<?> tableModel) {
 		this(wControl, name, translator, tableModel, -1, true);
@@ -845,6 +847,18 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	public void addFormItem(FormItem item) {
 		components.put(item.getName(), item);
 	}
+	
+	public List<FormItem> getBatchButtons() {
+		return batchButtons;
+	}
+	
+	@Override
+	public void addBatchButton(FormItem item) {
+		if(item != null) {
+			batchButtons.add(item);
+			addFormItem(item);
+		}
+	}
 
 	@Override
 	public void doDispatchFormRequest(UserRequest ureq) {
@@ -855,10 +869,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	protected void dispatchFormRequest(UserRequest ureq) {
 		super.dispatchFormRequest(ureq);
 	}
-	
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.FormItemImpl#evalFormRequest(org.olat.core.gui.UserRequest)
-	 */
+
 	@Override
 	public void evalFormRequest(UserRequest ureq) {
 		Form form = getRootForm();
diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java
index 1bfa7136caa93a573f4c4c104a062249844ef8b3..dbd93f9d9d426cb570f49bc5c5106738ab2df456 100644
--- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java
+++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java
@@ -1393,10 +1393,11 @@ public class FIBAssessmentItemBuilder extends AssessmentItemBuilder {
 			if(match(response, solution)) {
 				return true;
 			}
-			
-			for(TextEntryAlternative textEntryAlternative:alternatives) {
-				if(match(response, textEntryAlternative.getAlternative())) {
-					return true;
+			if(alternatives != null && !alternatives.isEmpty()) {
+				for(TextEntryAlternative textEntryAlternative:alternatives) {
+					if(match(response, textEntryAlternative.getAlternative())) {
+						return true;
+					}
 				}
 			}
 			return false;