diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableSortOptions.java b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableSortOptions.java
index 531d731dac254b48d6b404b39f7b4b81b16068fa..af9f5caf7c0c0f72c5a15b0b15c1d09276b40cff 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableSortOptions.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableSortOptions.java
@@ -34,6 +34,7 @@ public class FlexiTableSortOptions {
 	
 	private SortKey defaultOrderBy;
 	private boolean fromColumnModel;
+	private boolean openAllBySort = false;
 	private List<FlexiTableSort> sorts;
 	
 	public FlexiTableSortOptions() {
@@ -60,6 +61,22 @@ public class FlexiTableSortOptions {
 		return fromColumnModel;
 	}
 	
+	/**
+	 * Reopen a tree model before sorting.
+	 * 
+	 * @return true if reopen a tree model before sorting
+	 */
+	public boolean isOpenAllBySort() {
+		return openAllBySort;
+	}
+	
+	/**
+	 * @param openAllBySort true if you want to open all the model before sorting it
+	 */
+	public void setOpenAllBySort(boolean openAllBySort) {
+		this.openAllBySort = openAllBySort;
+	}
+	
 	/**
 	 * @return true if a default order is set
 	 */
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 3e3819ce9123fd00275eaebb9568ab7343d3b4e9..deb805a54e74033f9b3077c09e1ea3ecec41cf5d 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
@@ -1034,6 +1034,9 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 		}
 		
 		if(dataModel instanceof SortableFlexiTableDataModel) {
+			if(dataModel instanceof FlexiTreeTableDataModel && (sortOptions != null && sortOptions.isOpenAllBySort())) {
+				doOpenAll();
+			}
 			((SortableFlexiTableDataModel<?>)dataModel).sort(key);
 		} else if(dataSource != null) {
 			currentPage = 0;
@@ -1056,6 +1059,9 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 		orderBy = new SortKey[]{ sortKey };
 		
 		if(dataModel instanceof SortableFlexiTableDataModel) {
+			if(dataModel instanceof FlexiTreeTableDataModel && (sortOptions != null && sortOptions.isOpenAllBySort())) {
+				doOpenAll();
+			}
 			((SortableFlexiTableDataModel<?>)dataModel).sort(sortKey);
 		} else if(dataSource != null) {
 			currentPage = 0;
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java
index 33fc0b05c2bb5bde44a688533ba6f2152f795f95..9b8548ce06603c1615133dffe545440442e2a151 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java
@@ -53,6 +53,11 @@ public class TreeNodeFlexiCellRenderer implements FlexiCellRenderer {
 	public TreeNodeFlexiCellRenderer(String action) {
 		this.action = action;
 	}
+	
+	public TreeNodeFlexiCellRenderer(FlexiCellRenderer labelDelegate) {
+		this.labelDelegate = labelDelegate;
+		this.action = null;
+	}
 
 	public boolean isFlatBySearchAndFilter() {
 		return flatBySearchAndFilter;
@@ -147,11 +152,15 @@ public class TreeNodeFlexiCellRenderer implements FlexiCellRenderer {
 			}
 			target.append("'> </i></a> ");
 		}
-
-		NameValuePair pair = new NameValuePair(action, Integer.toString(row));
-		String jsCode = FormJSHelper.getXHRFnCallFor(rootForm, id, 1, false, false, pair);
-		target.append("<a href=\"javascript:").append(jsCode).append(";\">");
-		labelDelegate.render(renderer, target, cellValue, row, source, ubu, translator);
-		target.append("</a></div>");
+		
+		if(action == null) {
+			labelDelegate.render(renderer, target, cellValue, row, source, ubu, translator);
+		} else {
+			NameValuePair pair = new NameValuePair(action, Integer.toString(row));
+			String jsCode = FormJSHelper.getXHRFnCallFor(rootForm, id, 1, false, false, pair);
+			target.append("<a href=\"javascript:").append(jsCode).append(";\">");
+			labelDelegate.render(renderer, target, cellValue, row, source, ubu, translator);
+			target.append("</a></div>");
+		}
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java b/src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java
index 8c6f62a032fcc7667e9e5915b3079c01d0deb72d..a9f08501b924be33b07bde58d3ea66ef7546ac78 100644
--- a/src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java
+++ b/src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java
@@ -277,6 +277,7 @@ public class ForumMessageListController extends FormBasicController {
 
 		FlexiTableSortOptions sortOptions = new FlexiTableSortOptions();
 		sortOptions.setFromColumnModel(false);
+		sortOptions.setOpenAllBySort(true);
 		sortOptions.setSorts(sorts);
 		tableEl.setSortSettings(sortOptions);
 	}