diff --git a/src/main/java/de/bps/course/nodes/den/DENManageParticipantsController.java b/src/main/java/de/bps/course/nodes/den/DENManageParticipantsController.java
index 82fb100e0751d91eb3e8a89ca538730f29c553c6..0211d6cc7813dbb25ee2795ae45a2baf0c71396d 100644
--- a/src/main/java/de/bps/course/nodes/den/DENManageParticipantsController.java
+++ b/src/main/java/de/bps/course/nodes/den/DENManageParticipantsController.java
@@ -229,7 +229,7 @@ public class DENManageParticipantsController extends BasicController {
 				//delete single user from event
 				if(tableEvent.getActionId().equals(DENParticipantsTableDataModel.REMOVE_ACTION)) {
 					Identity identity = participantsTableData.getEntryAt(tableEvent.getRowId());
-					status = denManager.cancelEnroll(identity, selectedEvent, ores, courseNode);
+					status = denManager.cancelEnroll(identity, selectedEvent, ores);
 					if(!status.isCancelled()) showError();
 					//send notification mail
 					else {
diff --git a/src/main/java/de/bps/course/nodes/den/DENManager.java b/src/main/java/de/bps/course/nodes/den/DENManager.java
index 32cdfd033332339b9a5c9dbfbaa6d66c06561b11..8048227d81080f9cfa79c3f741cea23ef7b3156b 100644
--- a/src/main/java/de/bps/course/nodes/den/DENManager.java
+++ b/src/main/java/de/bps/course/nodes/den/DENManager.java
@@ -187,7 +187,7 @@ public class DENManager {
 	 * @param userCourseEnv
 	 * @return status
 	 */
-	public DENStatus cancelEnroll(Identity identity, KalendarEvent event, OLATResourceable ores, DENCourseNode courseNode) {
+	public DENStatus cancelEnroll(Identity identity, KalendarEvent event, OLATResourceable ores) {
 		DENStatus status = new DENStatus();
 		ICourse course = CourseFactory.loadCourse(ores);
 		Kalendar cal = calManager.getCourseCalendar(course).getKalendar();
@@ -540,7 +540,6 @@ public class DENManager {
 	 */
 	protected TableController createManageDatesTable(UserRequest ureq, WindowControl wControl, Translator trans, DENEditTableDataModel tableData) {
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
-		tableConfig.setColumnMovingOffered(true);
 		tableConfig.setResultsPerPage(15);
 		tableConfig.setShowAllLinkEnabled(true);
 		TableController tableCntrl = new TableController(tableConfig, ureq, wControl, trans);
@@ -571,7 +570,6 @@ public class DENManager {
 	protected TableController createRunDatesTable(UserRequest ureq, WindowControl wControl, Translator trans, DENRunTableDataModel tableData) {
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(trans.translate("dates.table.empty"));
-		tableConfig.setColumnMovingOffered(true);
 		TableController tableCntrl = new TableController(tableConfig, ureq, wControl, trans);
 		tableCntrl.addColumnDescriptor(new StrongColumnDescriptor("dates.table.date", 0, null, ureq.getLocale()));
 		tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.begin", 1, null, ureq.getLocale()));
@@ -602,7 +600,6 @@ public class DENManager {
 	protected TableController createListParticipantsTable(UserRequest ureq, WindowControl wControl, Translator trans,DENListTableDataModel tableData) {
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(trans.translate("dates.table.empty"));
-		tableConfig.setColumnMovingOffered(true);
 		TableController tableCntrl = new TableController(tableConfig, ureq, wControl, trans);
 		tableCntrl.addColumnDescriptor(new StrongColumnDescriptor("dates.table.date", 0, null, ureq.getLocale()));
 		tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.begin", 1, null, ureq.getLocale()));
@@ -643,7 +640,6 @@ public class DENManager {
 	protected TableController createParticipantsTable(UserRequest ureq, WindowControl wControl, Translator trans, DENParticipantsTableDataModel tableData) {
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(trans.translate("dates.table.empty"));
-		tableConfig.setColumnMovingOffered(true);
 		TableController tableCntrl = new TableController(tableConfig, ureq, wControl, trans);
 		tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.participant.firstname", 0, null, ureq.getLocale()));
 		tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.participant.lastname", 1, null, ureq.getLocale()));
diff --git a/src/main/java/de/bps/course/nodes/den/DENRunController.java b/src/main/java/de/bps/course/nodes/den/DENRunController.java
index f50c1d8e1f62dded777180cf86d17329eb681fec..b628e5e182a8ed72eaa916e233ab5749fca1a7e7 100644
--- a/src/main/java/de/bps/course/nodes/den/DENRunController.java
+++ b/src/main/java/de/bps/course/nodes/den/DENRunController.java
@@ -201,7 +201,7 @@ public class DENRunController extends BasicController implements GenericEventLis
 					if(!status.isEnrolled()) showError();
 				} else if(tableEvent.getActionId().equals(DENRunTableDataModel.CMD_ENROLLED_CANCEL)) {
 					//cancel enrollment
-					status = denManager.cancelEnroll(ureq.getIdentity(), calEvent, ores, courseNode);
+					status = denManager.cancelEnroll(ureq.getIdentity(), calEvent, ores);
 					if(!status.isCancelled()) showError();
 				}
 				createOrUpdateDateTable(ureq, courseNode);
diff --git a/src/main/java/de/bps/course/nodes/vc/VCRunController.java b/src/main/java/de/bps/course/nodes/vc/VCRunController.java
index ff84762fcb852a7b7bebc8c777259a1aa37197ae..46ccecb4b4c3a4c6127468ef56d1727828f6b88c 100644
--- a/src/main/java/de/bps/course/nodes/vc/VCRunController.java
+++ b/src/main/java/de/bps/course/nodes/vc/VCRunController.java
@@ -83,7 +83,6 @@ public class VCRunController extends BasicController {
 
     TableGuiConfiguration tableConfig = new TableGuiConfiguration();
     tableConfig.setTableEmptyMessage("<b>"+translate("vc.table.empty")+"</b>");
-    tableConfig.setColumnMovingOffered(true);
     tableConfig.setSortingEnabled(true);
     tableCtr = new TableController(tableConfig, ureq, wControl, getTranslator());
     tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("vc.table.title", 0, null, ureq.getLocale()));
diff --git a/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java b/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java
index e50bc9d5c3ef8ceec9f9fb065cdc3c0313754060..ce302b3a9908696400476a3adcf5500074821b5a 100644
--- a/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java
+++ b/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java
@@ -147,7 +147,6 @@ public class WimbaDisplayController extends BasicController {
 
     // show recordings
     TableGuiConfiguration tableConfig = new TableGuiConfiguration();
-    tableConfig.setColumnMovingOffered(false);
     tableConfig.setDisplayRowCount(true);
     tableConfig.setPageingEnabled(true);
     tableConfig.setTableEmptyMessage(translate("table.recordings.empty"));
diff --git a/src/main/java/de/bps/olat/modules/cl/ChecklistDisplayController.java b/src/main/java/de/bps/olat/modules/cl/ChecklistDisplayController.java
index 259df433b437ebccc419e4a3938954aaa572e67f..ab0206915cebe094a60da073e78903282aeb00e9 100644
--- a/src/main/java/de/bps/olat/modules/cl/ChecklistDisplayController.java
+++ b/src/main/java/de/bps/olat/modules/cl/ChecklistDisplayController.java
@@ -124,7 +124,6 @@ public class ChecklistDisplayController extends BasicController {
 		
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(translate("cl.table.empty"));
-		tableConfig.setColumnMovingOffered(true);
 		
 		removeAsListenerAndDispose(runChecklistTable);
 		runChecklistTable = new TableController(tableConfig, ureq, getWindowControl(), getTranslator());
diff --git a/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java b/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java
index 6bcb09491551d09e4fa01243633ab11794834bba..98feca15c1f41ce6f9778ea9d29792ac3145c801 100644
--- a/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java
+++ b/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java
@@ -227,7 +227,6 @@ public class ChecklistManageCheckpointsController extends BasicController {
 		// prepare table for run view
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(translate("cl.table.empty"));
-		tableConfig.setColumnMovingOffered(true);
 		tableConfig.setDownloadOffered(true);
 		tableConfig.setPreferencesOffered(true, "ExtendedManageTable");
 		
@@ -273,7 +272,6 @@ public class ChecklistManageCheckpointsController extends BasicController {
 		
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(translate("cl.table.empty"));
-		tableConfig.setColumnMovingOffered(true);
 		tableConfig.setDownloadOffered(true);
 		tableConfig.setPreferencesOffered(true, "ExtendedEditTable");
 		
diff --git a/src/main/java/org/olat/core/gui/components/table/Table.java b/src/main/java/org/olat/core/gui/components/table/Table.java
index f417833b1587ad491008b012ca8e99c94e9eb369..6d58072d5788502a5f635723c53750fcbcda0c9a 100644
--- a/src/main/java/org/olat/core/gui/components/table/Table.java
+++ b/src/main/java/org/olat/core/gui/components/table/Table.java
@@ -58,7 +58,7 @@ public class Table extends AbstractComponent {
 	private static final int NO_ROW_SELECTED = -1;
 	private static final int DEFAULT_RESULTS_PER_PAGE = 20;
 	private static final int INITIAL_COLUMNSIZE = 5;
-	private OLog log = Tracing.createLoggerFor(this.getClass());
+	private static final OLog log = Tracing.createLoggerFor(Table.class);
 	private static final ComponentRenderer RENDERER = new TableRenderer();
 	
 	/**
@@ -87,14 +87,6 @@ public class Table extends AbstractComponent {
 	 * Comment for <code>COMMAND_SORTBYCOLUMN</code>
 	 */
 	protected static final String COMMAND_SORTBYCOLUMN = "cid";
-	/**
-	 * Comment for <code>COMMAND_MOVECOLUMN_LEFT</code>
-	 */
-	protected static final String COMMAND_MOVECOLUMN_LEFT = "cl";
-	/**
-	 * Comment for <code>COMMAND_MOVECOLUMN_RIGHT</code>
-	 */
-	protected static final String COMMAND_MOVECOLUMN_RIGHT = "cr";
 	/**
 	 * Comment for <code>COMMAND_PAGEACTION</code>
 	 */
@@ -134,7 +126,6 @@ public class Table extends AbstractComponent {
 	private boolean multiSelect = false;
 	private boolean selectedRowUnselectable = false;
 	private boolean sortingEnabled = true;
-	private boolean columnMovingOffered = true;
 	private boolean displayTableHeader = true;
 	private boolean pageingEnabled = true;
 	private Integer currentPageId;
@@ -335,10 +326,6 @@ public class Table extends AbstractComponent {
 			// then fetch the internal command to be processed
 			if (formCmd.equals(COMMAND_SORTBYCOLUMN)) {
 				cmd = TableReplayableEvent.SORT;
-			} else if (formCmd.equals(COMMAND_MOVECOLUMN_RIGHT)) {
-				cmd = TableReplayableEvent.MOVE_R;
-			} else if (formCmd.equals(COMMAND_MOVECOLUMN_LEFT)) {
-				cmd = TableReplayableEvent.MOVE_L;
 			} else if (formCmd.equals(COMMAND_PAGEACTION)) {
 				cmd = TableReplayableEvent.PAGE_ACTION;
 			}
@@ -390,40 +377,10 @@ public class Table extends AbstractComponent {
 
 			setDirty(true);
 			resort();
-		} else if (cmd == TableReplayableEvent.MOVE_R) { // move column right
-			int col = Integer.parseInt(value1);
-			int swapCol = (col + 1) % (getColumnCount());
-			ColumnDescriptor cdMove = getColumnDescriptor(col);
-			ColumnDescriptor cdSwap = getColumnDescriptor(swapCol);
-			columnOrder.set(col, cdSwap);
-			columnOrder.set(swapCol, cdMove);
-			if (col == sortColumn) { // if the moved column was sorted, update the
-				// sortedcolumn info
-				sortColumn = swapCol;
-			} else if (swapCol == sortColumn) {
-				sortColumn = col;
-			}
-
-			setDirty(true);
-		} else if (cmd == TableReplayableEvent.MOVE_L) { // move column left
-			int col = Integer.parseInt(value1);
-			int swapCol = (col - 1) % (getColumnCount());
-			ColumnDescriptor cdMove = getColumnDescriptor(col);
-			ColumnDescriptor cdSwap = getColumnDescriptor(swapCol);
-			columnOrder.set(col, cdSwap);
-			columnOrder.set(swapCol, cdMove);
-			if (col == sortColumn) { // if the moved column was sorted, update the
-				// sortedcolumn info
-				sortColumn = swapCol;
-			} else if (swapCol == sortColumn) {
-				sortColumn = col;
-			}
-			
-			setDirty(true);
 
+			fireEvent(ureq, new TableEvent(COMMAND_SORTBYCOLUMN, -1, COMMAND_SORTBYCOLUMN));
 		} else if (cmd == TableReplayableEvent.PAGE_ACTION) {
 
-
 			if (value1.equals(COMMAND_PAGEACTION_SHOWALL)) {
 				//updatePageing(null);	(see OLAT-1340)			
 				setShowAllSelected(true);
@@ -662,22 +619,6 @@ public class Table extends AbstractComponent {
 		this.sortingEnabled = sortingEnabled;
 	}
 
-	/**
-	 * @return true when columns can be moved left/right
-	 */
-	protected boolean isColumnMovingOffered() {
-		return columnMovingOffered;
-	}
-
-	/**
-	 * Set column moving configuration
-	 * 
-	 * @param columnMovingOffered
-	 */
-	protected void setColumnMovingOffered(final boolean columnMovingOffered) {
-		this.columnMovingOffered = columnMovingOffered;
-	}
-
 	/**
 	 * @return true: table will render header, false: table has no headers
 	 */
diff --git a/src/main/java/org/olat/core/gui/components/table/TableController.java b/src/main/java/org/olat/core/gui/components/table/TableController.java
index fcc1e396e6aead31e6585113a121c9d6d418c6a4..6a481ea727a27992905bdf959052ba81ed002da0 100644
--- a/src/main/java/org/olat/core/gui/components/table/TableController.java
+++ b/src/main/java/org/olat/core/gui/components/table/TableController.java
@@ -142,6 +142,7 @@ public class TableController extends BasicController {
 	private boolean tablePrefsInitialized = false;
 	private CloseableCalloutWindowController cmc;
 	private Controller tableSearchController;
+	private TableSort tableSort;
 
 	private Link resetLink;
 	
@@ -235,7 +236,6 @@ public class TableController extends BasicController {
 
 		// propagate table specific configuration to table,
 		// rest of configuration is handled by this controller
-		table.setColumnMovingOffered(tableConfig.isColumnMovingOffered());
 		table.setDisplayTableHeader(tableConfig.isDisplayTableHeader());
 		table.setSelectedRowUnselectable(tableConfig.isSelectedRowUnselectable());
 		table.setSortingEnabled(tableConfig.isSortingEnabled());
@@ -252,7 +252,7 @@ public class TableController extends BasicController {
 		// fetch prefs (which were loaded at login time
 		String preferencesKey = tableConfig.getPreferencesKey();
 		if (tableConfig.isPreferencesOffered() && preferencesKey != null) {
-			this.prefs = (TablePrefs) ureq.getUserSession().getGuiPreferences().get(TableController.class, preferencesKey);
+			prefs = (TablePrefs) ureq.getUserSession().getGuiPreferences().get(TableController.class, preferencesKey);
 		}
 
 		// empty table message
@@ -264,6 +264,13 @@ public class TableController extends BasicController {
 
 		contentVc.contextPut("tableConfig", tableConfig);
 		contentVc.contextPut(VC_VAR_HAS_TABLE_SEARCH, Boolean.FALSE);
+		
+		//sorters
+		contentVc.contextPut("hasSorters", new Boolean(tableConfig.isSortingEnabled()));
+		tableSort = new TableSort("tableSort", table);
+		contentVc.put("tableSort", tableSort);
+		
+		
 
 		//preference + download links
 		preferenceLink = LinkFactory.createCustomLink("prefLink", "cmd.changecols", "", Link.BUTTON | Link.NONTRANSLATED, contentVc, this);
@@ -303,10 +310,11 @@ public class TableController extends BasicController {
 	 */
 	public void event(final UserRequest ureq, final Component source, final Event event) {
 		if (source == table) {
-			boolean aPageingCommand = event.getCommand().equalsIgnoreCase(Table.COMMAND_SHOW_PAGES);
-			aPageingCommand = aPageingCommand || event.getCommand().equalsIgnoreCase(Table.COMMAND_PAGEACTION_SHOWALL);
-			
-			if (!aPageingCommand) {
+			String cmd = event.getCommand();
+			if(cmd.equalsIgnoreCase(Table.COMMAND_SORTBYCOLUMN)) {
+				tableSort.setDirty(true);
+			} else if (!cmd.equalsIgnoreCase(Table.COMMAND_SHOW_PAGES)
+					&& !cmd.equalsIgnoreCase(Table.COMMAND_PAGEACTION_SHOWALL)) {
 				// forward to table controller listener
 				fireEvent(ureq, event);
 			}
@@ -333,8 +341,8 @@ public class TableController extends BasicController {
 				cmc.deactivate();
 			}
 		} else if (source == resetLink) {
-			this.table.setSearchString(null);
-			this.modelChanged();
+			table.setSearchString(null);
+			modelChanged();
 		}
 	}
 
@@ -500,15 +508,15 @@ public class TableController extends BasicController {
 		table.modelChanged();
 		TableDataModel tableModel = table.getTableDataModel();
 		if (tableModel != null) {
-			this.contentVc.contextPut("tableEmpty", tableModel.getRowCount() == 0 ? Boolean.TRUE : Boolean.FALSE);
-			this.contentVc.contextPut("numberOfElements", String.valueOf(table.getUnfilteredRowCount()));
+			contentVc.contextPut("tableEmpty", tableModel.getRowCount() == 0 ? Boolean.TRUE : Boolean.FALSE);
+			contentVc.contextPut("numberOfElements", String.valueOf(table.getUnfilteredRowCount()));
 			if (table.isTableFiltered()) {
-				this.contentVc.contextPut("numberFilteredElements", String.valueOf(table.getRowCount()));
-				this.contentVc.contextPut(VC_VAR_IS_FILTERED, Boolean.TRUE); 
-				this.contentVc.contextPut("filter", table.getSearchString());
+				contentVc.contextPut("numberFilteredElements", String.valueOf(table.getRowCount()));
+				contentVc.contextPut(VC_VAR_IS_FILTERED, Boolean.TRUE); 
+				contentVc.contextPut("filter", table.getSearchString());
 				resetLink = LinkFactory.createCustomLink(LINK_NUMBER_OF_ELEMENTS, LINK_NUMBER_OF_ELEMENTS, String.valueOf(table.getUnfilteredRowCount()), Link.NONTRANSLATED, contentVc, this);
 			} else {
-				this.contentVc.contextPut(VC_VAR_IS_FILTERED, Boolean.FALSE); 
+				contentVc.contextPut(VC_VAR_IS_FILTERED, Boolean.FALSE); 
 			}
 		}
 		// else do nothing. The table might have no table data model during
@@ -647,6 +655,7 @@ public class TableController extends BasicController {
 				&& table.getColumnDescriptor(sortColumn).isSortingAllowed()) {
 			table.setSortColumn(sortColumn, isSortAscending);
 			table.resort();
+			tableSort.setDirty(true);
 		}
 	}
 	
@@ -655,6 +664,7 @@ public class TableController extends BasicController {
 			if(sortColumn == table.getColumnDescriptor(i)) {
 				table.setSortColumn(i, isSortAscending);
 				table.resort();
+				tableSort.setDirty(true);
 			}
 		}
 	}
diff --git a/src/main/java/org/olat/core/gui/components/table/TableGuiConfiguration.java b/src/main/java/org/olat/core/gui/components/table/TableGuiConfiguration.java
index eee6f2332a64636b84cb873194dcc09b6939988f..74871c5b64c4ea4ab2e602a748b8a85f9dd887bb 100644
--- a/src/main/java/org/olat/core/gui/components/table/TableGuiConfiguration.java
+++ b/src/main/java/org/olat/core/gui/components/table/TableGuiConfiguration.java
@@ -47,7 +47,6 @@ public class TableGuiConfiguration {
 	
 	private boolean displayTableHeader = true;
 	private boolean sortingEnabled = true;
-	private boolean columnMovingOffered = true;
 	private boolean selectedRowUnselectable = false;
 	private boolean multiSelect = false;
 
@@ -118,18 +117,6 @@ public class TableGuiConfiguration {
 	public boolean isDownloadOffered() {
 		return downloadOffered;
 	}
-	/**
-	 * @return boolean true: enable moving of table columns
-	 */
-	public boolean isColumnMovingOffered() {
-		return columnMovingOffered;
-	}
-	/**
-	 * @param columnMovingOffered true: enable moving of table columns
-	 */
-	public void setColumnMovingOffered(final boolean columnMovingOffered) {
-		this.columnMovingOffered = columnMovingOffered;
-	}
 	/**
 	 * @return boolean true: show the table header 
 	 */
diff --git a/src/main/java/org/olat/core/gui/components/table/TableRenderer.java b/src/main/java/org/olat/core/gui/components/table/TableRenderer.java
index 3022763c3c8be75a88e229e628fbb7d4243e40ac..2842e4c4f5758eced967f1b20c7639fa46f1ff2c 100644
--- a/src/main/java/org/olat/core/gui/components/table/TableRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/table/TableRenderer.java
@@ -50,7 +50,6 @@ public class TableRenderer extends DefaultComponentRenderer {
 
 	private static final String CLOSE_HTML_BRACE = "\">";
 	private static final String CLOSE_DIV = "</div>";
-	private static final String SINGLEQUOTE_CLOSEBRACE_OPEN_TITLE = "');\" title=\"";
 	private static final String B_LAST_CHILD = " b_last_child";
 	private static final String B_FIRST_CHILD = " b_first_child";
 	private static final String A_CLASS = "<a class=\"";
@@ -82,7 +81,6 @@ public class TableRenderer extends DefaultComponentRenderer {
 
 		int rows = table.getRowCount();
 		int cols = table.getColumnCount();
-		boolean asc = table.isSortAscending();
 		boolean selRowUnSelectable = table.isSelectedRowUnselectable();
 		// the really selected rowid (from the tabledatamodel)
 		int selRowId = table.getSelectedRowId();
@@ -107,10 +105,10 @@ public class TableRenderer extends DefaultComponentRenderer {
 		}
 
 		// starting real table table
-		target.append("<div class=\"o_table_wrapper table-responsive\" id=\"b_overflowscrollbox_").append(table.hashCode()).append("\">");
-
-		target.append("<table id=\"b_table").append(table.hashCode()).append("\" class=\"o_table table table-striped table-condensed table-hover").append(CLOSE_HTML_BRACE);
-		appendHeaderLinks(target, translator, table, formName, cols, asc);
+		target.append("<div class=\"o_table_wrapper table-responsive\" id=\"b_overflowscrollbox_").append(table.hashCode()).append("\">")
+		      .append("<table id=\"b_table").append(table.hashCode()).append("\" class=\"o_table table table-striped table-condensed table-hover").append(CLOSE_HTML_BRACE);
+		
+		appendHeaderLinks(target, translator, table, cols);
 		appendDataRows(renderer, target, ubu, table, iframePostEnabled, cols, selRowUnSelectable, selRowId, startRowId, endRowId);
 		target.append("</table><div class='o_table_footer'>");
 		appendSelectDeselectAllButtons(target, translator, table, formName, rows, resultsPerPage);
@@ -379,11 +377,9 @@ public class TableRenderer extends DefaultComponentRenderer {
 		return cssClass;
 	}
 
-	private void appendHeaderLinks(final StringOutput target, final Translator translator, Table table, String formName, int cols, boolean asc) {
+	private void appendHeaderLinks(final StringOutput target, final Translator translator, Table table, int cols) {
 		if (table.isDisplayTableHeader()) {
 			target.append("<thead><tr>");
-
-			ColumnDescriptor sortedCD = table.getCurrentlySortedColumnDescriptor();
 			for (int i = 0; i < cols; i++) {
 				ColumnDescriptor cd = table.getColumnDescriptor(i);
 				String header;
@@ -401,41 +397,9 @@ public class TableRenderer extends DefaultComponentRenderer {
 				if (i == cols - 1) {
 					target.append(B_LAST_CHILD);
 				}
-				target.append(CLOSE_HTML_BRACE);
-
-				// add 'move column left' link (if we are not at the leftmost position)
-				if (i != 0 && table.isColumnMovingOffered()) {
-					target.append(A_CLASS).append(HREF_JAVA_SCRIPT_TABLE_FORM_INJECT_COMMAND_AND_SUBMIT);
-					target.append(formName).append(SINGLE_COMMA_SINGLE + Table.COMMAND_MOVECOLUMN_LEFT + SINGLE_COMMA_SINGLE).append(i).append("');\" class=\"b_table_move_left\" title=\"");
-					target.append(StringEscapeUtils.escapeHtml(translator.translate("row.move.left"))).append("\"> <i class='o_icon o_icon_move_left'></i> </a> ");
-				}
-				// header either a link or not
-				if (table.isSortingEnabled() && cd.isSortingAllowed()) {
-					target.append(A_CLASS).append(HREF_JAVA_SCRIPT_TABLE_FORM_INJECT_COMMAND_AND_SUBMIT);
-					target.append(formName).append(SINGLE_COMMA_SINGLE + Table.COMMAND_SORTBYCOLUMN + SINGLE_COMMA_SINGLE).append(i).append(SINGLEQUOTE_CLOSEBRACE_OPEN_TITLE);
-					target.append(StringEscapeUtils.escapeHtml(translator.translate("row.sort"))).append(CLOSE_HTML_BRACE);
-					target.append(header);
-					target.append(CLOSE_HREF);
-				} else {
-					target.append(header);
-				}
-				// mark currently sorted row special
-				if (table.isSortingEnabled() && cd == sortedCD) {
-					target.append(A_CLASS).append(HREF_JAVA_SCRIPT_TABLE_FORM_INJECT_COMMAND_AND_SUBMIT);
-					target.append(formName).append(SINGLE_COMMA_SINGLE + Table.COMMAND_SORTBYCOLUMN + SINGLE_COMMA_SINGLE).append(i).append(SINGLEQUOTE_CLOSEBRACE_OPEN_TITLE);
-					target.append(StringEscapeUtils.escapeHtml(translator.translate("row.sort.invert"))).append("\">");
-					target.append((asc ? " <i class='o_icon o_icon_sort_asc'></i> " : " <i class='o_icon o_icon_sort_desc'></i> "));
-					target.append(CLOSE_HREF);
-				}
-
-				// add 'move column right' link (if we are not at the rightmost
-				// position)
-				if (i != cols - 1 && table.isColumnMovingOffered()) {
-					target.append(A_CLASS).append(HREF_JAVA_SCRIPT_TABLE_FORM_INJECT_COMMAND_AND_SUBMIT);
-					target.append(formName).append(SINGLE_COMMA_SINGLE + Table.COMMAND_MOVECOLUMN_RIGHT + SINGLE_COMMA_SINGLE).append(i).append("');\" class=\"b_table_move_right\" title=\"");
-					target.append(StringEscapeUtils.escapeHtml(translator.translate("row.move.right"))).append("\"> <i class='o_icon o_icon_move_right'></i> </a>");
-				}
-				target.append("</th>");
+				target.append(CLOSE_HTML_BRACE)
+				      .append(header)
+				      .append("</th>");
 			}
 			target.append("</tr></thead>");
 		}
diff --git a/src/main/java/org/olat/core/gui/components/table/TableReplayableEvent.java b/src/main/java/org/olat/core/gui/components/table/TableReplayableEvent.java
index a6fb7fd5bb14ca533f7bcfe83019e7bf72b73cef..324bda6484970740e228606d9524a6578e69cee7 100644
--- a/src/main/java/org/olat/core/gui/components/table/TableReplayableEvent.java
+++ b/src/main/java/org/olat/core/gui/components/table/TableReplayableEvent.java
@@ -41,8 +41,6 @@ public class TableReplayableEvent  {
 	private static final String M_DATA = "mData";
 	private static final String I_MODE = "iMode";
 	static final int SORT = 0;
-	static final int MOVE_R = 1;
-	static final int MOVE_L = 2;
 	static final int PAGE_ACTION = 3;
 	static final int ROW_ACTION = 4;
 	static final int MULTISELECT_ACTION = 5;
diff --git a/src/main/java/org/olat/core/gui/components/table/TableSort.java b/src/main/java/org/olat/core/gui/components/table/TableSort.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b6690439aa8bb174a66836cbc1ca1cc67e5faab
--- /dev/null
+++ b/src/main/java/org/olat/core/gui/components/table/TableSort.java
@@ -0,0 +1,59 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.gui.components.table;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.AbstractComponent;
+import org.olat.core.gui.components.ComponentRenderer;
+
+/**
+ * The table sort is a wrapper for the table and table controller. The events
+ * are send to the table component and not here.
+ * 
+ * Initial date: 10.06.2014<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+class TableSort extends AbstractComponent {
+	
+	private static final TableSortRenderer TABLE_SORT_RENDERER = new TableSortRenderer();
+	
+	private final Table table;
+	
+	public TableSort(String name, Table table) {
+		super(name);
+		setDomReplacementWrapperRequired(false);
+		this.table = table;
+	}
+	
+	public Table getTable() {
+		return table;
+	}
+
+	@Override
+	protected void doDispatchRequest(UserRequest ureq) {
+		//
+	}
+
+	@Override
+	public ComponentRenderer getHTMLRendererSingleton() {
+		return TABLE_SORT_RENDERER;
+	}
+}
diff --git a/src/main/java/org/olat/core/gui/components/table/TableSortRenderer.java b/src/main/java/org/olat/core/gui/components/table/TableSortRenderer.java
new file mode 100644
index 0000000000000000000000000000000000000000..f898f4cdccc75825bb764179909ff2d7c92c1b43
--- /dev/null
+++ b/src/main/java/org/olat/core/gui/components/table/TableSortRenderer.java
@@ -0,0 +1,90 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.gui.components.table;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.DefaultComponentRenderer;
+import org.olat.core.gui.render.RenderResult;
+import org.olat.core.gui.render.Renderer;
+import org.olat.core.gui.render.StringOutput;
+import org.olat.core.gui.render.URLBuilder;
+import org.olat.core.gui.translator.Translator;
+
+/**
+ * 
+ * Initial date: 10.06.2014<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+class TableSortRenderer extends DefaultComponentRenderer {
+
+	@Override
+	public void render(Renderer renderer, StringOutput sb, Component source, URLBuilder ubu,
+			Translator translator, RenderResult renderResult, String[] args) {
+		TableSort sorter = (TableSort)source;
+		Table table = sorter.getTable();
+		String id = sorter.getDispatchID();
+		
+		sb.append("<div id='o_c").append(id).append("' class='btn-group'>")
+		  .append("<button class='btn btn-default dropdown-toggle' data-toggle='dropdown'>")
+		  .append("<i class='o_icon o_icon-lg o_icon_sort_menu'> </i>")
+		  .append("<b class='caret'></b>")
+		  .append("</button>")
+		  .append("<ul class='dropdown-menu' role='menu'>");
+
+		int cols = table.getColumnCount();
+		boolean asc = table.isSortAscending();
+		String formName = "tb_ms_" + table.hashCode();
+		ColumnDescriptor sortedCD = table.getCurrentlySortedColumnDescriptor();
+		
+		for (int i = 0; i < cols; i++) {
+			ColumnDescriptor cd = table.getColumnDescriptor(i);
+			// header either a link or not
+			if (cd.isSortingAllowed()) {
+				sb.append("<li>")
+				  .append("<a class=\"").append("\" href=\"JavaScript:tableFormInjectCommandAndSubmit('")
+				  .append(formName).append("','").append(Table.COMMAND_SORTBYCOLUMN).append("','").append(i).append("');\" title=\"")
+				  .append(StringEscapeUtils.escapeHtml(translator.translate("row.sort"))).append("\">");
+				
+				if(sortedCD == cd) {
+					System.out.println(sortedCD.getHeaderKey() + " :: " + asc);
+					
+					if(asc) {
+						sb.append("<i class='o_icon o_icon_sort_asc'></i> ");
+					} else {
+						sb.append("<i class='o_icon o_icon_sort_desc'></i> ");
+					}
+				}
+				
+				String header;
+				if (cd.translateHeaderKey()) {
+					header = translator.translate(cd.getHeaderKey());
+				} else {
+					header = cd.getHeaderKey();
+				}
+				sb.append(header)
+				  .append("</a></li>");
+			}
+		}
+
+		sb.append("</ul></div>");
+	}
+}
diff --git a/src/main/java/org/olat/core/gui/components/table/_content/tablelayout.html b/src/main/java/org/olat/core/gui/components/table/_content/tablelayout.html
index 3adb0089dd523dc9ef3e7ee7d68f938e0a7175f4..ed7343d59f2cf8b3011290fb7e10c9a37220fbd0 100644
--- a/src/main/java/org/olat/core/gui/components/table/_content/tablelayout.html
+++ b/src/main/java/org/olat/core/gui/components/table/_content/tablelayout.html
@@ -1,70 +1,50 @@
 <div class="o_table_layout $!tableConfig.getCustomCssClass() o_scrollbox">
-#if ($hasTableSearch && !$tableEmpty)
-  <div>$r.render("tableSearch")</div>
-#end
-
-#if ($hasFilters && $filters.size() > 0)
-	<div class="o_table_filter">
-		<form name="tablefilter" action="">
-			<label for="filter">$filterTitle</label>
-			<select name="filter" size="1" onchange="{tf = document.tablefilter; tf.action=tf.filter.value; if(o2cl()){tf.submit();}}">
+<div class="row clearfix">
+	<div class="col-lg-6">
+		#if ($hasTableSearch && !$tableEmpty)
+		  $r.render("tableSearch")
+		#end
+	</div>
+	<div class="col-lg-2"></div>
+	<div class="col-lg-4"><div class="pull-right o_table_tools">
+		#if ($hasFilters && $filters.size() > 0)
+		<div class="btn-group">	
+			<button class='btn btn-default dropdown-toggle' data-toggle='dropdown'>
+				<i class='o_icon o_icon-lg o_icon_filter'> </i>
+				<b class="caret"></b>
+			</button>
+			<ul class="dropdown-menu" role="menu">
 				#if ($useNoFilterOption)
-					<option value="$r.commandURI("cmd.filter.nofilter")">$noFilterOption</option>
+					<li><a href="$r.commandURI("cmd.filter.nofilter")">$noFilterOption</a></li>
 				#end
 				#foreach ($filter in $filters)
-					#if ($filter == $selectedFilterValue)
-						#set ($selected="selected")
-					#else
-						#set ($selected="")
-					#end
-					#set ($filterPosition = $velocityCount - 1)
-					<option $selected value="$r.commandURI("cmd.filter.${filterPosition}")">$r.escapeHtml($filter.getShortName())</option>
+					<li>
+						#set ($filterPosition = $velocityCount - 1)
+						<a href="$r.commandURI("cmd.filter.${filterPosition}")">
+						#if ($filter == $selectedFilterValue)
+							
+						<i class="o_icon o_icon_check o_icon-fw"> </i>
+						#end
+						$r.escapeHtml($filter.getShortName())</a>
+					</li>
 				#end
-			</select>
-		</form>
-	</div>
-#end
-
-#if ($tableEmpty)
-	<div class="o_table_empty">$tableEmptyMessage</div>
-#else
-	<div class="btn-toolbar">
-		#if ($tableConfig.isDisplayRowCount())
-			<div class="o_table_count">
-			    #if ($isFiltered)
-			    	$numberFilteredElements
-			    	$r.translate("table.filtered.of")
-			    	$r.render("link.numberOfElements")
-			    	#if ($numberOfElements == "1")
-			    		$r.translate("table.entry")
-			    	#else
-			    		$r.translate("table.entries.dative")
-			    	#end
-			    	#if ($numberFilteredElements == "1")
-						$r.translate("table.filtered.include.sing")
-					#else
-						$r.translate("table.filtered.include.plur")
-					#end			    	
-			    	`$filter`			    	
-			    #else
-					$numberOfElements
-					#if ($numberOfElements == "1")
-						$r.translate("table.entry")
-					#else
-						$r.translate("table.entries")
-					#end
-				#end
-			</div>
+			</ul>
+		</div>
+		#end
+		#if ($hasSorters)
+			$r.render("tableSort")
 		#end
-		<div class="pull-right">
 		#if ($tableConfig.isPreferencesOffered())
 			$r.render("prefLink")
 		#end
 		#if ($tableConfig.isDownloadOffered())	
 			$r.render("downloadLink")
 		#end
-		</div>
-	</div>
+	</div></div>
+</div>
+#if ($tableEmpty)
+	<div class="o_table_empty o_info">$tableEmptyMessage</div>
+#else
 	$r.render("table", $tableConfig.getCssPrefix())
 #end
 </div>
diff --git a/src/main/java/org/olat/course/archiver/GenericArchiveController.java b/src/main/java/org/olat/course/archiver/GenericArchiveController.java
index aa1f5b6962751188fd90d22476af676f4735bacf..71efdc97ea0751786dbcf5a0b8eb32dffeea5036 100644
--- a/src/main/java/org/olat/course/archiver/GenericArchiveController.java
+++ b/src/main/java/org/olat/course/archiver/GenericArchiveController.java
@@ -140,7 +140,6 @@ public class GenericArchiveController extends BasicController {
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(translate("nodesoverview.nonodes"));
 		tableConfig.setDownloadOffered(false);
-		tableConfig.setColumnMovingOffered(false);
 		tableConfig.setSortingEnabled(false);
 		tableConfig.setDisplayTableHeader(true);
 		tableConfig.setDisplayRowCount(false);
diff --git a/src/main/java/org/olat/course/assessment/AssessmentMainController.java b/src/main/java/org/olat/course/assessment/AssessmentMainController.java
index c975fac676662d9a8aea7fc4a04c98d2b01741e6..1267c0e7493ba74ff27ca2574846a4ea776ac5fb 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentMainController.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentMainController.java
@@ -891,7 +891,6 @@ public class AssessmentMainController extends MainLayoutBasicController implemen
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(translate("nodesoverview.nonodes"));
 		tableConfig.setDownloadOffered(false);
-		tableConfig.setColumnMovingOffered(false);
 		//fxdiff VCRP-4: assessment overview with max score
 		tableConfig.setSortingEnabled(true);
 		tableConfig.setDisplayTableHeader(true);
diff --git a/src/main/java/org/olat/course/assessment/IdentityAssessmentOverviewController.java b/src/main/java/org/olat/course/assessment/IdentityAssessmentOverviewController.java
index cfc4de5d75194ccd65abd56a89b5098426397914..37c2c9580515ed7f576648f6c317bb663d44d57e 100644
--- a/src/main/java/org/olat/course/assessment/IdentityAssessmentOverviewController.java
+++ b/src/main/java/org/olat/course/assessment/IdentityAssessmentOverviewController.java
@@ -192,7 +192,6 @@ public class IdentityAssessmentOverviewController extends BasicController {
 
 			TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 			tableConfig.setDownloadOffered(false);
-			tableConfig.setColumnMovingOffered(false);
 			//fxdiff VCRP-4: assessment overview with max score
 			tableConfig.setSortingEnabled(true);
 			tableConfig.setDisplayTableHeader(true);
diff --git a/src/main/java/org/olat/ims/qti/export/CourseQTIArchiveController.java b/src/main/java/org/olat/ims/qti/export/CourseQTIArchiveController.java
index d9623cf9dfe76ce301afe4cace36953662aece03..5ec8ebc59ae3145bc6e38a0403b89c1a6f358400 100644
--- a/src/main/java/org/olat/ims/qti/export/CourseQTIArchiveController.java
+++ b/src/main/java/org/olat/ims/qti/export/CourseQTIArchiveController.java
@@ -142,7 +142,6 @@ public class CourseQTIArchiveController extends BasicController {
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(translate("nodesoverview.nonodes"));
 		tableConfig.setDownloadOffered(false);
-		tableConfig.setColumnMovingOffered(false);
 		tableConfig.setSortingEnabled(false);
 		tableConfig.setDisplayTableHeader(true);
 		tableConfig.setDisplayRowCount(false);
diff --git a/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java b/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java
index 9a1682ce389be1dce00c5cb259f65f75988c4879..e7e071972c520d991e82f62ca44d416f38b2d5a5 100644
--- a/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java
+++ b/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java
@@ -146,7 +146,6 @@ public class QTIArchiveWizardController extends BasicController {
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(getTranslator().translate("nodesoverview.nonodes"));
 		tableConfig.setDownloadOffered(false);
-		tableConfig.setColumnMovingOffered(false);
 		tableConfig.setSortingEnabled(false);
 		tableConfig.setDisplayTableHeader(true);
 		tableConfig.setDisplayRowCount(false);
diff --git a/src/main/java/org/olat/modules/fo/FilterForUserController.java b/src/main/java/org/olat/modules/fo/FilterForUserController.java
index fe988fd5441f6a2ae861ce539b459364e5acacc9..d6c29c0d6310c71130b570eae062210de0037e78 100644
--- a/src/main/java/org/olat/modules/fo/FilterForUserController.java
+++ b/src/main/java/org/olat/modules/fo/FilterForUserController.java
@@ -130,7 +130,6 @@ public class FilterForUserController extends BasicController {
 		dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, ureq.getLocale());
 
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
-		tableConfig.setColumnMovingOffered(true);
 		tableConfig.setSortingEnabled(true);
 		
 		userListCtr = new TableController(tableConfig, ureq, wControl, getTranslator());
diff --git a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomsController.java b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomsController.java
index f4756784cc8a2d52d6b333bb2c6a242171e58523..6fa1f42f1e116b441e2f0e916a10aa78e9e2d497 100644
--- a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomsController.java
+++ b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomsController.java
@@ -72,7 +72,6 @@ public class OpenMeetingsAdminRoomsController extends BasicController {
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(translate("table.empty"));
 		tableConfig.setDownloadOffered(true);
-		tableConfig.setColumnMovingOffered(false);
 		tableConfig.setSortingEnabled(true);
 		tableConfig.setDisplayTableHeader(true);
 		tableConfig.setDisplayRowCount(false);
diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java
index 3e48b2d6fe377ada7c66dc34874fbc414807c382..62f80f95ea91bffe4e5747f2740287d34c09c6fe 100644
--- a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java
+++ b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java
@@ -75,7 +75,6 @@ public class ViteroBookingsAdminController extends BasicController {
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(translate("table.empty"));
 		tableConfig.setDownloadOffered(true);
-		tableConfig.setColumnMovingOffered(false);
 		tableConfig.setSortingEnabled(true);
 		tableConfig.setDisplayTableHeader(true);
 		tableConfig.setDisplayRowCount(false);
diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java
index 43b18956f61894c76c175034a3db9ec5a8effecc..4b06c3676a9c494e4c919fd09c371fca309db197 100644
--- a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java
+++ b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java
@@ -76,7 +76,6 @@ public class ViteroBookingsController extends BasicController {
 
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(translate("table.empty"));
-		tableConfig.setColumnMovingOffered(true);
 		tableConfig.setSortingEnabled(true);
 		tableCtr = new TableController(tableConfig, ureq, wControl, getTranslator());
 		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("group.name", ViteroBookingDataModel.Column.name.ordinal(), null, ureq.getLocale()));
diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java
index a3c0c86bcfb520553ad9052d44c651baeb76235f..3e34fdc59c0d748c2c2a3d44cfe68b24aea4d53a 100644
--- a/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java
+++ b/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java
@@ -59,7 +59,6 @@ public class ViteroRoomsOverviewController extends BasicController {
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(translate("table.empty"));
 		tableConfig.setDownloadOffered(true);
-		tableConfig.setColumnMovingOffered(false);
 		tableConfig.setSortingEnabled(true);
 		tableConfig.setDisplayTableHeader(true);
 		tableConfig.setDisplayRowCount(false);
diff --git a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
index f3378c31a8c157b27b5a75db2b35d75fe289f0ee..ebacc6cc7d686384ea73943804d6ef5ba82a8b98 100644
--- a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
+++ b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
@@ -310,7 +310,8 @@ public class ReferencableEntriesSearchController extends BasicController {
 					searchCtr.displayAdminSearchForm();
 				}
 			}
-		} else if(source == createRessourceCmp || createRessourceButtons.contains(source)) {
+		} else if(source == createRessourceCmp ||
+				(createRessourceButtons != null && createRessourceButtons.contains(source))) {
 			removeAsListenerAndDispose(createController);
 			RepositoryHandler handler = (RepositoryHandler)((Link)source).getUserObject();
 			createController = new CreateRepositoryEntryController(ureq, getWindowControl(), handler);