diff --git a/src/main/java/org/olat/core/commons/controllers/filechooser/FileChoosenEvent.java b/src/main/java/org/olat/core/commons/controllers/filechooser/FileChoosenEvent.java
index 2fd8409c8628ca406da6c12731709ffb09c23ffd..02801b80ef07b63b683f1048ecd19740684d9bc4 100644
--- a/src/main/java/org/olat/core/commons/controllers/filechooser/FileChoosenEvent.java
+++ b/src/main/java/org/olat/core/commons/controllers/filechooser/FileChoosenEvent.java
@@ -35,6 +35,8 @@ import org.olat.core.util.vfs.VFSItem;
  */
 
 public class FileChoosenEvent extends Event {
+
+	private static final long serialVersionUID = 6650009491560019373L;
 	public static final String COMMAND = "fileSelected";
 	private VFSItem selectedItem;
 
diff --git a/src/main/java/org/olat/core/commons/controllers/filechooser/FileChooserController.java b/src/main/java/org/olat/core/commons/controllers/filechooser/FileChooserController.java
index 04dffe26743749f613e37eb6efc29ea37595f8b5..838863d414045cfa816c540c8be02ab0228ec29b 100644
--- a/src/main/java/org/olat/core/commons/controllers/filechooser/FileChooserController.java
+++ b/src/main/java/org/olat/core/commons/controllers/filechooser/FileChooserController.java
@@ -22,8 +22,10 @@ package org.olat.core.commons.controllers.filechooser;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.tree.SelectionTree;
+import org.olat.core.gui.components.link.LinkFactory;
+import org.olat.core.gui.components.tree.MenuTree;
 import org.olat.core.gui.components.tree.TreeEvent;
+import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
@@ -59,7 +61,8 @@ import org.olat.core.util.vfs.filters.VFSItemFilter;
 public class FileChooserController extends BasicController {
 
 	private Link cancelLink, selectLink;
-	private SelectionTree selectionTree;
+	private MenuTree selectionTree;
+	private VelocityContainer mainVC;
 	private FolderTreeModel treeModel;
 
 	private VFSItem selectedItem;
@@ -88,11 +91,16 @@ public class FileChooserController extends BasicController {
 		this.onlyLeafsSelectable = onlyLeafsSelectable;
 
 		treeModel = new FolderTreeModel(ureq.getLocale(), rootContainer,  false, true, !onlyLeafsSelectable, false, customItemFilter);
-		selectionTree = new SelectionTree("stTree", getTranslator());
+		selectionTree = new MenuTree("stTree");
 		selectionTree.setTreeModel(treeModel);
 		selectionTree.addListener(this);
-		selectionTree.setFormButtonKey("select");
-		putInitialPanel(selectionTree);
+		
+		mainVC = createVelocityContainer("filechooserajax");
+		mainVC.put("treeCtr", selectionTree);
+		selectLink = LinkFactory.createButton("select", mainVC, this);
+		cancelLink = LinkFactory.createButton("cancel", mainVC, this);
+		
+		putInitialPanel(mainVC);
 	}
 
 	/**
@@ -118,16 +126,9 @@ public class FileChooserController extends BasicController {
 			}
 		} else if (source == selectionTree) {
 			TreeEvent te = (TreeEvent) event;
-			if (te.getCommand().equals(TreeEvent.COMMAND_TREENODE_CLICKED)) {
+			if (te.getCommand().equals(MenuTree.COMMAND_TREENODE_CLICKED)) {
 				String selectedPath = treeModel.getSelectedPath(selectionTree.getSelectedNode());
 				selectedItem = rootContainer.resolve(selectedPath);
-				if (selectedItem != null) {
-					fireEvent(ureq, new FileChoosenEvent(selectedItem));
-				} else {
-					fireEvent(ureq, Event.FAILED_EVENT);
-				}
-			} else if (te.getCommand().equals(TreeEvent.COMMAND_CANCELLED)) {
-				fireEvent(ureq, Event.CANCELLED_EVENT);
 			}
 		}
 	}
@@ -135,9 +136,5 @@ public class FileChooserController extends BasicController {
 	@Override
 	protected void doDispose() {
 		// Controllers auto disposed by basic controller. NULL composite objects to help GC
-		cancelLink = null;
-		selectLink = null;
-		treeModel = null;
-		selectionTree = null;
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/controllers/filechooser/_content/filechooserajax.html b/src/main/java/org/olat/core/commons/controllers/filechooser/_content/filechooserajax.html
index ae947b65b6da85d6085414b7c420e764a9936a92..16d3c6c4348d127375403b9b19f5b0d9a17c5bc2 100644
--- a/src/main/java/org/olat/core/commons/controllers/filechooser/_content/filechooserajax.html
+++ b/src/main/java/org/olat/core/commons/controllers/filechooser/_content/filechooserajax.html
@@ -1,8 +1,6 @@
 #if($showTitle)
 	<h4>$r.translate("filechooser.tree.select.title")</h4>
-	<p>
-		$r.translate("filechooser.tree.select.intro")
-	</p>
+	<p>$r.translate("filechooser.tree.select.intro")</p>
 #end
 $r.render("treeCtr")
 <div class="b_button_group">
diff --git a/src/main/java/org/olat/core/gui/control/generic/folder/FolderHelper.java b/src/main/java/org/olat/core/gui/control/generic/folder/FolderHelper.java
index 3dbd1149005296da95512a12225f911f2a5ef7b3..6b8f7461e686960a81b497baa54a402965314740 100644
--- a/src/main/java/org/olat/core/gui/control/generic/folder/FolderHelper.java
+++ b/src/main/java/org/olat/core/gui/control/generic/folder/FolderHelper.java
@@ -30,6 +30,7 @@ package org.olat.core.gui.control.generic.folder;
 
 import java.util.HashSet;
 import java.util.Locale;
+import java.util.Set;
 import java.util.StringTokenizer;
 
 import org.olat.core.gui.translator.Translator;
@@ -46,14 +47,14 @@ import org.olat.core.util.Util;
 public class FolderHelper {
 	
 	private static final String FILETYPES =  "avi bat bmp css doc docx dvi exe gif gz htm html jpeg jpg log midi mov mp3 mpeg mpg pdf png ppt pptx ps ra ram readme rtf tar tgz txt wav xls xlsx xml xsl zip";
-	private static HashSet knownFileTypes;
+	private static Set<String> knownFileTypes;
 
 	static {
 		// initialize known filetypes for faster access
-		FolderHelper.knownFileTypes = new HashSet();
+		FolderHelper.knownFileTypes = new HashSet<String>();
 		StringTokenizer st = new StringTokenizer(FILETYPES, " ");
 		while (st.hasMoreElements()) {
-			FolderHelper.knownFileTypes.add(st.nextElement());
+			FolderHelper.knownFileTypes.add(st.nextToken());
 		}
 	}
 	
diff --git a/src/main/java/org/olat/core/gui/control/generic/folder/FolderTreeModel.java b/src/main/java/org/olat/core/gui/control/generic/folder/FolderTreeModel.java
index 4d47e0787cce263c174399febe02a53e829010e3..1aa963267117dfe224286e34e1ae804eeff4fb0b 100644
--- a/src/main/java/org/olat/core/gui/control/generic/folder/FolderTreeModel.java
+++ b/src/main/java/org/olat/core/gui/control/generic/folder/FolderTreeModel.java
@@ -48,6 +48,8 @@ import org.olat.core.util.vfs.filters.VFSItemFilter;
  */
 public class FolderTreeModel extends GenericTreeModel {
 
+	private static final long serialVersionUID = 7930807550759664872L;
+	
 	private boolean foldersOnly = false;
 	private boolean selectableFiles = false;
 	private boolean selectableFolders = true;
@@ -96,19 +98,19 @@ public class FolderTreeModel extends GenericTreeModel {
 	}
 
 	private boolean buildTree(TreeNode tParent, VFSContainer parentContainer, String parentPath) {
-		List children = parentContainer.getItems(fileFilter);
+		List<VFSItem> children = parentContainer.getItems(fileFilter);
 		if (children.size() == 0) return false;
 
 		// sort the children
-		Collections.sort(children, new Comparator(){
+		Collections.sort(children, new Comparator<VFSItem>(){
 			final Collator c = collator;
-			public int compare(final Object o1, final Object o2) {
-				return c.compare(((VFSItem)o1).getName(), ((VFSItem)o2).getName());
+			public int compare(final VFSItem o1, final VFSItem o2) {
+				return c.compare(o1.getName(), o2.getName());
 			}});
 
 		boolean addedAtLeastOneChild = false;
-		for (Iterator iter = children.iterator(); iter.hasNext();) {
-			VFSItem child = (VFSItem) iter.next();
+		for (Iterator<VFSItem> iter = children.iterator(); iter.hasNext();) {
+			VFSItem child = iter.next();
 			String childName = child.getName();
 			if (child instanceof VFSContainer) {
 				// container node