diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java
index 961867b2d623cffc8a4e92d56d907517c04e26f5..819cfd493f7a728d1f44766eccc970787137f72b 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java
@@ -134,6 +134,7 @@ class FlexiTableClassicRenderer extends AbstractFlexiTableRenderer implements Co
 		FlexiTableElementImpl ftE = ftC.getFlexiTableElement();
 		FlexiTableColumnModel columnsModel = ftE.getTableDataModel().getTableColumnModel();
 		int numOfCols = columnsModel.getColumnCount();
+		Form theForm = ftE.getRootForm();
 		
 		// use alternating css class
 		int numOfColumns = 0;
@@ -142,7 +143,10 @@ class FlexiTableClassicRenderer extends AbstractFlexiTableRenderer implements Co
 				
 		if(ftE.isMultiSelect()) {
 			target.append("<td>")
-			      .append("<input type='checkbox' name='tb_ms' value='").append(rowIdPrefix).append(row).append("'");
+			      .append("<input type='checkbox' name='tb_ms' value='").append(rowIdPrefix).append(row).append("'")
+			      .append(" onclick=\"javascript:")
+			      .append(FormJSHelper.getXHRFnCallFor(theForm, ftC.getFormDispatchId(), 1, new NameValuePair("chkbox", Integer.toString(row))))
+				  .append("\"");	 
 			if(ftE.isMultiSelectedIndex(row)) {
 				target.append(" checked='checked'");
 			}   
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 2f0271c0fb6e97e0ef32db3196d90d9dcb24aea3..e50f08f15608f70de7fc1bcf9030e2831eeb15a9 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
@@ -686,8 +686,11 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 		String sort = form.getRequestParameter("sort");
 		String filter = form.getRequestParameter("filter");
 		String pagesize = form.getRequestParameter("pagesize");
+		String checkbox = form.getRequestParameter("chkbox");
 		if("undefined".equals(dispatchuri)) {
 			evalSearchRequest(ureq);
+		} else if(StringHelper.containsNonWhitespace(checkbox)) {
+			toogleSelectIndex(checkbox);
 		} else if(StringHelper.containsNonWhitespace(page)) {
 			int p = Integer.parseInt(page);
 			setPage(p);
@@ -1222,6 +1225,31 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 		return multiSelectedIndex != null && multiSelectedIndex.contains(new Integer(index));
 	}
 	
+	protected void toogleSelectIndex(String selection) {
+		if(multiSelectedIndex == null) {
+			multiSelectedIndex = new HashSet<Integer>();
+		}
+
+		String rowStr;
+		int index = selection.lastIndexOf('-');
+		if(index > 0 && index+1 < selection.length()) {
+			rowStr = selection.substring(index+1);
+		} else {
+			rowStr = selection;
+		}
+		
+		try {
+			Integer row = new Integer(rowStr);
+			if(multiSelectedIndex.contains(row)) {
+				multiSelectedIndex.remove(row);
+			} else {
+				multiSelectedIndex.add(row);
+			}	
+		} catch (NumberFormatException e) {
+			//can happen
+		}
+	}
+	
 	protected void setMultiSelectIndex(String[] selections) {
 		if(multiSelectedIndex == null) {
 			multiSelectedIndex = new HashSet<Integer>();