diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java
index 1b3352798326279fef6aa508f9f6d7115fe814fd..54976b4bf62d29f879b4be21e94ecc3e23ec12cb 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java
@@ -137,11 +137,6 @@ public abstract class DefaultFlexiTableDataSourceModel<U> implements FlexiTableD
 		}
 	}
 
-	@Override
-	public ResultInfos<U> load(final int firstResult, final int maxResults, SortKey... orderBy) {
-		return loadDatas(null, null, false, firstResult, maxResults, orderBy);
-	}
-
 	@Override
 	public void reload(List<Integer> rowIndex) {
 		if(rowIndex == null || rowIndex.isEmpty()) return;
@@ -171,7 +166,7 @@ public abstract class DefaultFlexiTableDataSourceModel<U> implements FlexiTableD
 	}
 
 	@Override
-	public ResultInfos<U> search(String query, List<String> addQueries, int firstResult, int maxResults, SortKey... orderBy) {
+	public ResultInfos<U> load(String query, List<String> addQueries, int firstResult, int maxResults, SortKey... orderBy) {
 		return loadDatas(query, addQueries, false, firstResult, maxResults, orderBy);
 	}
 	
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableDataSource.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableDataSource.java
index f7d129fbe00d1039f2c03c3e913f7f2cfdb600d6..d72b758a5ba5d523ff37251e38585cc9eca1a765 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableDataSource.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableDataSource.java
@@ -37,13 +37,6 @@ public interface FlexiTableDataSource<U> extends FlexiTableDataModel<U> {
 	 */
 	public void clear();
 	
-	/**
-	 * Load the rows needed for paging
-	 * @param firstResult
-	 * @param maxResults
-	 */
-	public ResultInfos<U> load(int firstResult, int maxResults, SortKey... orderBy);
-	
 	/**
 	 * Reload the rows needed for paging
 	 * @param firstResult
@@ -57,6 +50,6 @@ public interface FlexiTableDataSource<U> extends FlexiTableDataModel<U> {
 	 * @param maxResults
 	 * @param orderBy
 	 */
-	public ResultInfos<U> search(String query, List<String> addQueries, int firstResult, int maxResults, SortKey... orderBy);
+	public ResultInfos<U> load(String query, List<String> addQueries, int firstResult, int maxResults, SortKey... orderBy);
 
 }
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 e1244189002416707b44af1af93ec6468a387374..671c18c18b7d7fe6472f2468a58f4c371e82f078 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
@@ -25,6 +25,8 @@
 */ 
 package org.olat.core.gui.components.form.flexible.impl.elements.table;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -33,6 +35,8 @@ import java.util.Map;
 import java.util.Set;
 
 import org.olat.core.CoreSpringFactory;
+import org.olat.core.commons.persistence.ResultInfos;
+import org.olat.core.commons.persistence.SortKey;
 import org.olat.core.dispatcher.mapper.MapperService;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
@@ -88,11 +92,14 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	private CloseableCalloutWindowController callout;
 	private final WindowControl wControl;
 	private final String mapperUrl;
-	
+
+	private SortKey[] orderBy;
 	private Object selectedObj;
 	private boolean allSelectedIndex;
 	private Set<Integer> multiSelectedIndex;
+	private List<String> conditionalQueries;
 	private Set<Integer> enabledColumnIndex = new HashSet<Integer>();
+	
 	private Map<String,FormItem> components = new HashMap<String,FormItem>();
 	
 	public FlexiTableElementImpl(UserRequest ureq, WindowControl wControl, String name, FlexiTableDataModel<?> tableModel) {
@@ -134,7 +141,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 		
 		if(dataSource != null) {
 			//preload it
-			dataSource.load(0, pageSize);
+			dataSource.load(null, null, 0, pageSize);
 		}
 	}
 
@@ -214,6 +221,14 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	public String getSearchText() {
 		return searchFieldEl == null ? null : searchFieldEl.getValue();
 	}
+	
+	public List<String> getConditionalQueries() {
+		return conditionalQueries;
+	}
+	
+	public SortKey[] getOrderBy() {
+		return orderBy;
+	}
 
 	public TextElement getSearchElement() {
 		return searchFieldEl;
@@ -415,7 +430,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 			search = searchFieldEl.getValue();
 		}
 		List<String> condQueries = extendedSearchCtrl.getConditionalQueries();
-		doSearch(ureq, search, condQueries);
+		doSearch(search, condQueries);
 	}
 
 	protected void evalSearchRequest(UserRequest ureq) {
@@ -423,7 +438,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 		searchFieldEl.evalFormRequest(ureq);
 		String search = searchFieldEl.getValue();
 		if(StringHelper.containsNonWhitespace(search)) {
-			doSearch(ureq, search, null);
+			doSearch(search, null);
 		} else {
 			doResetSearch(ureq);
 		}
@@ -450,20 +465,39 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	protected void doSelect(UserRequest ureq, String action, int index) {
 		getRootForm().fireFormEvent(ureq, new SelectionEvent(action, index, this, FormEvent.ONCLICK));
 	}
+
 	
-	protected void doSearch(UserRequest ureq, String search, List<String> condQueries) {
+	protected void doSearch(String search, List<String> condQueries) {
+		if(condQueries == null || condQueries.isEmpty()) {
+			conditionalQueries = null;
+		} else {
+			conditionalQueries = new ArrayList<String>(condQueries);
+		}
+		
 		if(dataSource != null) {
 			resetInternComponents();
 			dataSource.clear();
-			dataSource.search(search, condQueries, 0, getPageSize());
+			ResultInfos<?> infos = dataSource.load(search, conditionalQueries, 0, getPageSize(), orderBy);
+			System.out.println("Found: " + infos.getObjects().size());
+		}
+	}
+	
+	protected ResultInfos<?> doScroll(int firstResult, int maxResults, SortKey... sortKeys) {
+		boolean same = Arrays.equals(orderBy , sortKeys);
+		if(!same) {
+			//clear data source
+			dataSource.clear();
+			orderBy = sortKeys;
 		}
+		
+		return dataSource.load(getSearchText(), getConditionalQueries(), firstResult, maxResults, sortKeys);
 	}
 	
 	protected void doResetSearch(UserRequest ureq) {
 		if(dataSource != null) {
 			resetInternComponents();
 			dataSource.clear();
-			dataSource.load(0, getPageSize());
+			dataSource.load(null, null, 0, getPageSize());
 		}
 	}
 
@@ -480,7 +514,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	public Set<Integer> getMultiSelectedIndex() {
 		if(allSelectedIndex && dataSource != null) {
 			//ensure the whole data model is loaded
-			dataSource.load(0, -1);
+			dataSource.load(getSearchText(), getConditionalQueries(), 0, -1);
 			Set<Integer> allIndex = new HashSet<Integer>();
 			for(int i=dataModel.getRowCount(); i-->0; ) {
 				allIndex.add(new Integer(i));
@@ -539,7 +573,8 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	@Override
 	public void reloadData() {
 		if(dataSource != null) {
-			dataSource.load(0, getPageSize());//reload needed rows
+			dataSource.clear();
+			dataSource.load(getSearchText(), getConditionalQueries(), 0, getPageSize());//reload needed rows
 		}
 	}
 	
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableModelMapper.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableModelMapper.java
index 7ecbfe991ce346cd0b0ecc01f268ed9e4d15539a..888752ffc74662e7beb6f4802aca304c0e4a4c52 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableModelMapper.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableModelMapper.java
@@ -80,7 +80,6 @@ public class FlexiTableModelMapper implements Mapper {
 
 		if(StringHelper.isLong(firstRowStr) && StringHelper.isLong(maxRowStr)) {
 			FlexiTableDataModel<?> dataModel = ftE.getTableDataModel();
-			FlexiTableDataSource<?> dataSource = ftE.getTableDataSource();
 			FlexiTableColumnModel columnsModel = dataModel.getTableColumnModel();
 			
 			SortKey orderBy = null;
@@ -115,12 +114,7 @@ public class FlexiTableModelMapper implements Mapper {
 				int maxRows = Integer.parseInt(maxRowStr);
 				int lastRow = Math.min(rows, firstRow + maxRows);
 				//paged loading
-				ResultInfos<?> results;
-				if(StringHelper.containsNonWhitespace(ftE.getSearchText())) {
-					results = dataSource.search(ftE.getSearchText(), null, firstRow, maxRows, orderBy);
-				} else {
-					results = dataSource.load(firstRow, maxRows, orderBy);
-				}
+				ResultInfos<?> results = ftE.doScroll(firstRow, maxRows, orderBy);
 				ftE.setCurrentFirstResult(results.getNextFirstResult());
 				
 				for (int i = firstRow; i < lastRow; i++) {
diff --git a/src/main/java/org/olat/modules/qpool/ui/ItemRow.java b/src/main/java/org/olat/modules/qpool/ui/ItemRow.java
index 6302f22066e8da271a67760667cac9142c53418a..86a47b57722487eeeacac002eae1a36afba2d7c2 100644
--- a/src/main/java/org/olat/modules/qpool/ui/ItemRow.java
+++ b/src/main/java/org/olat/modules/qpool/ui/ItemRow.java
@@ -195,4 +195,12 @@ public class ItemRow implements QuestionItemView {
 		}
 		return false;
 	}
+	
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+		sb.append("itemRow[key=").append(delegate.getKey()).append(":")
+		  .append("name=").append(delegate.getTitle()).append("]");
+		return sb.toString();
+	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java b/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java
index e46ab8b222388d814b3d31c07758191a231be34a..249ad692831356fc04c5b1b01843cf92650cf265 100644
--- a/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java
@@ -100,7 +100,6 @@ public class QLicensesAdminController extends FormBasicController {
 
 		model = new QItemTypeDataModel(columnsModel);
 		tableEl = uifactory.addTableElement(ureq, getWindowControl(), "licenses", model, getTranslator(), formLayout);
-		uifactory.addTableElement(ureq, getWindowControl(), "licenses", model, getTranslator(), formLayout);
 		tableEl.setRendererType(FlexiTableRendererType.classic);
 		
 		createType = uifactory.addFormLink("create.license", formLayout, Link.BUTTON);