Index: tmp/org.txm.rcp/plugin.xml
===================================================================
--- tmp/org.txm.rcp/plugin.xml	(revision 3083)
+++ tmp/org.txm.rcp/plugin.xml	(revision 3084)
@@ -52,7 +52,7 @@
          </property>
          <property
                name="aboutText"
-               value="&lt;TXM Software User Agreement&gt;&#x0A;&#x0A;TXM 0.8.2 Copyright © 2010-2020 ENS de Lyon, University of Franche-Comté, CNRS&#x0A;&#x0A;&lt;English version below&gt;&#x0A;&#x0A;EN ACCEPTANT CETTE MISE À JOUR ET EN UTILISANT TXM, VOUS VOUS ENGAGEZ À CITER L&apos;ARTICLE DE RÉFÉRENCE DE LA PLATEFORME* DANS VOS PUBLICATIONS DE RÉSULTATS OBTENUS À PARTIR D&apos;ELLE. CELA EST ESSENTIEL POUR NOUS PERMETTRE DE JUSTIFIER LE BESOIN DE PÉRENNISATION DE CET INSTRUMENT DE TRAVAIL POUR LA COMMUNAUTÉ SCIENTIFIQUE.&#x0A;&#x0A;Le logiciel TXM est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier suivant les termes de la Licence publique générale GNU telle que publiée par la Free Software Foundation, soit la version 2 de cette License, soit une version ultérieure.&#x0A;&#x0A;Le logiciel TXM est distribué dans l&apos;espoir qu&apos;il sera utile, mais sans aucune garantie, y compris mais non de façon limitative les garanties implicites de qualité marchande et de convenance à un usage particulier. Consultez la version 2 et la version 3 de la Licence publique générale GNU pour plus de détails.&#x0A;&#x0A;Vous devriez avoir reçu une copie de la Licence publique générale GNU en accompagnement du logiciel TXM ; si ce n&apos;est pas le cas, veuillez consulter la page http://www.gnu.org/licenses/gpl-2.0.html&#x0A;_______________&#x0A;* Serge Heiden, Jean-Philippe Magué, Bénédicte Pincemin.&#x0A;TXM : Une plateforme logicielle open-source pour la textométrie - conception et développement. Sergio Bolasco, Isabella Chiari, Luca Giuliano. 10th International Conference on the Statistical Analysis of Textual Data - JADT 2010, Jun 2010, Rome, Italie.&#x0A;Edizioni Universitarie di Lettere Economia Diritto, 2 (3), pp.1021-1032, 2010. &lt;halshs-00549779&gt;&#x0A;&#x0A;&#x0A;ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH&#x0A;&#x0A;&#x0A;By accepting this update and by using TXM, you agree to cite the TXM platform reference article** in your publications of results obtained from it. That is essential for us to justify the need for sustainability of this instrument for the scientific community.&#x0A;&#x0A;The TXM platform is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.&#x0A;&#x0A;The TXM platform is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.&#x0A;&#x0A;You should have received a copy of the GNU General Public License along with the TXM platform. If not, see http://www.gnu.org/licenses/gpl-2.0.html&#x0A;_______________&#x0A;** Serge Heiden. The TXM Platform: Building Open-Source Textual&#x0A;Analysis Software Compatible with the TEI Encoding Scheme. Ryo Otoguro, Kiyoshi Ishikawa, Hiroshi Umemoto, Kei Yoshimoto and Yasunari Harada. 24th Pacific Asia Conference on Language, Information and Computation, Nov 2010, Sendai, Japan. Institute for Digital Enhancement of Cognitive Development, Waseda University, pp.389-398, 2010. &lt;halshs-00549764&gt;">
+               value="&lt;TXM Software User Agreement&gt;&#x0A;&#x0A;TXM 0.8.1 Copyright © 2010-2020 ENS de Lyon, University of Franche-Comté, CNRS&#x0A;&#x0A;&lt;English version below&gt;&#x0A;&#x0A;EN ACCEPTANT CETTE MISE À JOUR ET EN UTILISANT TXM, VOUS VOUS ENGAGEZ À CITER L&apos;ARTICLE DE RÉFÉRENCE DE LA PLATEFORME* DANS VOS PUBLICATIONS DE RÉSULTATS OBTENUS À PARTIR D&apos;ELLE. CELA EST ESSENTIEL POUR NOUS PERMETTRE DE JUSTIFIER LE BESOIN DE PÉRENNISATION DE CET INSTRUMENT DE TRAVAIL POUR LA COMMUNAUTÉ SCIENTIFIQUE.&#x0A;&#x0A;Le logiciel TXM est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier suivant les termes de la Licence publique générale GNU telle que publiée par la Free Software Foundation, soit la version 2 de cette License, soit une version ultérieure.&#x0A;&#x0A;Le logiciel TXM est distribué dans l&apos;espoir qu&apos;il sera utile, mais sans aucune garantie, y compris mais non de façon limitative les garanties implicites de qualité marchande et de convenance à un usage particulier. Consultez la version 2 et la version 3 de la Licence publique générale GNU pour plus de détails.&#x0A;&#x0A;Vous devriez avoir reçu une copie de la Licence publique générale GNU en accompagnement du logiciel TXM ; si ce n&apos;est pas le cas, veuillez consulter la page http://www.gnu.org/licenses/gpl-2.0.html&#x0A;_______________&#x0A;* Serge Heiden, Jean-Philippe Magué, Bénédicte Pincemin.&#x0A;TXM : Une plateforme logicielle open-source pour la textométrie - conception et développement. Sergio Bolasco, Isabella Chiari, Luca Giuliano. 10th International Conference on the Statistical Analysis of Textual Data - JADT 2010, Jun 2010, Rome, Italie.&#x0A;Edizioni Universitarie di Lettere Economia Diritto, 2 (3), pp.1021-1032, 2010. &lt;halshs-00549779&gt;&#x0A;&#x0A;&#x0A;ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH&#x0A;&#x0A;&#x0A;By accepting this update and by using TXM, you agree to cite the TXM platform reference article** in your publications of results obtained from it. That is essential for us to justify the need for sustainability of this instrument for the scientific community.&#x0A;&#x0A;The TXM platform is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.&#x0A;&#x0A;The TXM platform is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.&#x0A;&#x0A;You should have received a copy of the GNU General Public License along with the TXM platform. If not, see http://www.gnu.org/licenses/gpl-2.0.html&#x0A;_______________&#x0A;** Serge Heiden. The TXM Platform: Building Open-Source Textual&#x0A;Analysis Software Compatible with the TEI Encoding Scheme. Ryo Otoguro, Kiyoshi Ishikawa, Hiroshi Umemoto, Kei Yoshimoto and Yasunari Harada. 24th Pacific Asia Conference on Language, Information and Computation, Nov 2010, Sendai, Japan. Institute for Digital Enhancement of Cognitive Development, Waseda University, pp.389-398, 2010. &lt;halshs-00549764&gt;">
          </property>
          <property
                name="startupProgressRect"
@@ -1876,7 +1876,7 @@
          </command>
          <command
                commandId="org.txm.rcp.commands.OpenBrowser"
-               label="%command.label.22"
+               label="%command.label"
                style="push"
                tooltip="%command.tooltip.18">
             <visibleWhen
Index: tmp/org.txm.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.rcp/META-INF/MANIFEST.MF	(revision 3083)
+++ tmp/org.txm.rcp/META-INF/MANIFEST.MF	(revision 3084)
@@ -104,7 +104,7 @@
  org.txm.rcp.wizard,
  swing2swt.layout
 Bundle-SymbolicName: org.txm.rcp;singleton:=true
-Bundle-Version: 0.8.1.qualifier
+Bundle-Version: 0.8.2.qualifier
 Bundle-Name: %Bundle-Name
 Bundle-ClassPath: .,lib/commons-cli-1.2.jar,lib/commons-lang-2.4.jar,l
  ib/junit-4.5.jar,lib/log4j-1.2.12.jar,swing2swt.jar
Index: tmp/org.txm.rcp/icons/objects/file_audio.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.rcp/icons/objects/file_audio.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.rcp/icons/objects/file_doc.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.rcp/icons/objects/file_doc.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.rcp/icons/objects/script.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: tmp/org.txm.rcp/icons/objects/file_video.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.rcp/icons/objects/file_video.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.rcp/icons/objects/file_image.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.rcp/icons/objects/file_image.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.rcp/icons/logo/TXM_logo_16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.rcp/icons/logo/TXM_logo_16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/IImageKeys.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/IImageKeys.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/IImageKeys.java	(revision 3084)
@@ -139,6 +139,9 @@
 	/** The Constant SCRIPT. */
 	public static final String SCRIPT = "icons/objects/script.png"; //$NON-NLS-1$
 	
+	/** The Constant SCRIPT. */
+	public static final String SCRIPT_RUN = "icons/functions/page_go.png"; //$NON-NLS-1$
+	
 	/** The Constant SUBCORPUS. */
 	public static final String SUBCORPUS = "icons/objects/subcorpus.png"; //$NON-NLS-1$
 	
@@ -238,6 +241,8 @@
 	
 	public static final String TXM = "icons/logo/TXM_logo_64x64.png";
 	
+	public static final String TXM1616 = "icons/logo/TXM_logo_16x16.png";
+	
 	public static final String SPLASH = "splash.bmp";
 	
 	public static final String OPEN_DECORATOR = "icons/decorators/bullet_arrow_down.png";
@@ -246,6 +251,14 @@
 	
 	public static final String TXM_FLAT_LOGO = "icons/logo/TXM_flat_logo.png";
 	
+	public static final String FILE_IMAGE = "icons/objects/file_image.png"; //$NON-NLS-1$ ;
+	
+	public static final String FILE_AUDIO = "icons/objects/file_audio.png"; //$NON-NLS-1$ ;
+	
+	public static final String FILE_VIDEO = "icons/objects/file_video.png"; //$NON-NLS-1$ ;
+	
+	public static final String FILE_DOC = "icons/objects/file_doc.png"; //$NON-NLS-1$ ;
+	
 	/**
 	 * Gets the image.
 	 *
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages/TXMUIMessages.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages/TXMUIMessages.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages/TXMUIMessages.java	(revision 3084)
@@ -1126,7 +1126,7 @@
 	
 	public static String LoadBinaryCorporaDirectory_loadingCorporaFromTheP0Directory;
 	
-	public static String LoadBinaryCorporaDirectory_selectTheTXMCorpusToLoad;
+	public static String LoadBinaryCorporaDirectory_selectTheTXMCorpusToLoadIn;
 	
 	public static String selectAnotherTXMCorporaToRestore;
 	
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages.properties
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages.properties	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages.properties	(revision 3084)
@@ -7,8 +7,8 @@
 
 EMPTY = \	\n
 
-Explorer_4 = 🡅
-Explorer_5 = ⭮
+Explorer_4 = ⇧
+Explorer_5 = ↻
 Explorer_7 = ⌂
 
 FileTreeContentProvider_4 = '
@@ -18,7 +18,7 @@
 LoadBinaryCorporaDirectory_corporaDirectoryNotFoundAborting               = Corpora directory not found. Aborting.
 LoadBinaryCorporaDirectory_corpusLoad                                     = Corpus load
 LoadBinaryCorporaDirectory_loadingCorporaFromTheP0Directory               = Loading corpora from the {0} directory...
-LoadBinaryCorporaDirectory_selectTheTXMCorpusToLoad                       = Select the '.txm' corpus to load.
+LoadBinaryCorporaDirectory_selectTheTXMCorpusToLoadIn=Select the corpus to load of {0}.
 
 P0CorpusLoaded = {0} corpus loaded.
 
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages_fr.properties
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages_fr.properties	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages_fr.properties	(revision 3084)
@@ -4,9 +4,9 @@
 
 EMPTY = \	\n
 
-Explorer_4 = 🡅
+Explorer_4 = ⇧
 
-Explorer_5 = ⭮
+Explorer_5 = ↻
 
 Explorer_7 = ⌂
 
@@ -479,7 +479,7 @@
 failedToLoadBinaryCorpusNullError = ** Échec de chargement du corpus binaire (null error).
 
 failedToLoadCorpusFromDirectoryColonP0WeCannotFindTheNecessaryComponents = ** Échec du chargement du corpus à partir du dossier {0}.\nImpossible de trouver les composants nécessaires.
-
+LoadBinaryCorporaDirectory_selectTheTXMCorpusToLoadIn=Selectionner les corpus à charger à partir de {0}.
 failedToLoadCorpusP0 = ** Échec du chargement du corpus {0}
 
 failedToMoveCorpus = ** Impossible de déplacer le corpus {0} vers {1}.
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMBrowser.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMBrowser.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMBrowser.java	(revision 3084)
@@ -108,11 +108,6 @@
 		return webbrowser.getBrowser();
 	}
 	
-	public void load(String url, String partName) {
-		this.getBrowser().setUrl(url);
-		setPartName(partName);
-	}
-	
 	@Override
 	public void setPartName(String partName) {
 		super.setPartName(partName);
@@ -637,7 +632,7 @@
 			+ "else \n"
 			+ "return node.ChildNodes;\n"
 			+ "}\n"
-			+ "function findSpans(c, a) {\n" +
+			+ "findSpans = function findSpans(c, a) {\n" +
 			"    for (var i = 0 ; i < c.length ; i++) {\n" +
 			"        if (c.item(i).tagName == \"SPAN\") {\n" +
 			"            var id = c.item(i).getAttribute(\"id\")\n" +
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java	(revision 3084)
@@ -66,6 +66,7 @@
 import org.txm.core.results.BeanParameters;
 import org.txm.core.results.Parameter;
 import org.txm.core.results.TXMResult;
+import org.txm.objects.CorpusBuild;
 import org.txm.rcp.JobsTimer;
 import org.txm.rcp.StatusLine;
 import org.txm.rcp.TXMWindows;
@@ -1044,7 +1045,7 @@
 	 * @param result
 	 * @param editorPartId
 	 */
-	public static TXMEditor openEditor(TXMResult result, String editorPartId) {
+	public static TXMEditor<? extends TXMResult> openEditor(TXMResult result, String editorPartId) {
 		return openEditor(new TXMResultEditorInput<>(result), editorPartId);
 	}
 	
@@ -1068,7 +1069,7 @@
 			
 			// since some editor fields need some values of their parent,
 			// ensure the parents branch is ready (e.g. Sub-corpus properties in Cooccurrence editor, etc.)
-			// show modal blocking cancelable progression dialog
+			// show modal blocking&cancelable progression dialog
 			if (!wasAlreadyOpened
 			// && !editorInput.getResult().getParent().hasBeenComputedOnce()
 			) {
@@ -1079,7 +1080,6 @@
 					// StatusLine.setMessage(editorInput.getResult().getComputingStartMessage());
 					// }
 					// catch (Exception e) {
-					// // TODO Auto-generated catch block
 					// e.printStackTrace();
 					// }
 					// }
@@ -1126,8 +1126,8 @@
 				// editor.compute(false); // FIXME: temporary fix for the AHC SVG bug but there are 2 computing (skipped but it stays a quick'n'dirty fix)
 				editor.refresh(false);
 				
-				// TODO: SJ: focus in the main widget
-				// or maybe better to do the call directly at the end of TXMEditor.refresh()?
+				// TODO SJ: focus in the main widget or maybe better to do the call directly at the end of TXMEditor.refresh()?
+				// TODO MD: I don't think because it will force focus when a linked editor is refreshed
 				// editor.setFocus();
 				
 				// }
@@ -1160,6 +1160,11 @@
 			return;
 		}
 		
+		String className = this.getClass().getSimpleName();
+		if (className.isEmpty()) { // anonymous class case
+			className = this.getClass().getSuperclass().getSimpleName();
+		}
+		
 		// this.parent.setRedraw(false);
 		
 		this.notifyExtensions("notifyStartOfRefresh"); //$NON-NLS-1$
@@ -1181,16 +1186,12 @@
 		// SJ: need to check all works fine, it also was dedicated to not refresh the Editor from result after a computing, it's not needed since the computing has been done
 		// from fields themselves
 		// if (!update) {
-		// FIXME: debug
-		String className = this.getClass().getSimpleName();
-		if (className.isEmpty()) { // anonymous class case
-			className = this.getClass().getSuperclass().getSimpleName();
-		}
 		
+		this.initializeEditorFieldsFromResult(update);
+		
 		Log.finest("TXMEditor.refresh(): " + className + ": auto updating editor from result: " + this.getResult().getClass().getSimpleName() + "."); //$NON-NLS-1$
 		this.autoUpdateEditorFieldsFromResult(update); // auto update from Parameter annotations
 		
-		// FIXME: debug
 		Log.finest("TXMEditor.refresh(): " + className + ": updating subclass editor from result: " + this.getResult().getClass().getSimpleName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
 		this.updateEditorFromResult(update); // subclasses manual settings
 		// }
@@ -1255,7 +1256,52 @@
 		// this.parent.setRedraw(true);
 	}
 	
+	protected boolean firstFieldsInitializationDone = false;
+	
 	/**
+	 * Fields initialization to be done before setting new values from the TXMResult in the refresh() before calling autoUpdateFieldsValuesFromResult()
+	 * 
+	 * @param update
+	 */
+	private void initializeEditorFieldsFromResult(boolean update) throws Exception {
+		if (!firstFieldsInitializationDone) {
+			firstInitializeEditorFieldsFromResult(update);
+			firstFieldsInitializationDone = true;
+		}
+		reinitializeEditorFieldsFromResult(update);
+	}
+	
+	/**
+	 * Fields re-initialization to be done before setting new values from the TXMResult in the refresh() before calling autoUpdateFieldsValuesFromResult()
+	 * 
+	 * eg, if a new property is available a List can update its available values
+	 * 
+	 * rewrite this method if you need extra initialization to be done
+	 * 
+	 * TODO MD: see if this method should be abstract to force TXMEditors initialization pattern
+	 * 
+	 * @param update
+	 */
+	protected void reinitializeEditorFieldsFromResult(boolean update) throws Exception {
+		
+	}
+	
+	/**
+	 * First fields initialization to be done before setting default/new values from the TXMResult
+	 * 
+	 * This method will be called only one time by initializeEditorFieldsFromResult()
+	 * 
+	 * rewrite this method if you need extra first initialization to be done
+	 * 
+	 * TODO MD: see if this method should be abstract to force TXMEditors initialization pattern
+	 * 
+	 * @param update
+	 */
+	protected void firstInitializeEditorFieldsFromResult(boolean update) throws Exception {
+		
+	}
+	
+	/**
 	 * Synchronizes the result parameters with editor widgets.
 	 * 
 	 * It should be called or called itself in the UI thread when accessing Widget parameters.
@@ -1372,11 +1418,11 @@
 						((PropertiesSelector) object).setSelectedProperties((List) value);
 					}
 					else if (value instanceof ReferencePattern) {
-						((PropertiesSelector) object).setSelectedProperties(((ReferencePattern) value).getProperties());
+						((PropertiesSelector<Property>) object).setSelectedProperties(((ReferencePattern) value).getProperties());
 					}
 					// single
 					else {
-						((PropertiesSelector) object).setSelectedProperty((Property) value);
+						((PropertiesSelector<Property>) object).setSelectedProperty((Property) value);
 					}
 				}
 				else if (object instanceof NewNavigationWidget) {
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditorToolBar.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditorToolBar.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditorToolBar.java	(revision 3084)
@@ -35,26 +35,26 @@
  *
  */
 public class TXMEditorToolBar extends ToolBar {
-
+	
 	/**
 	 * The linked <code>TXMEditor</code>.
 	 */
 	protected TXMEditor<? extends TXMResult> editorPart;
-
+	
 	/**
 	 * Contains references to installed groups to composite.
 	 */
-	private HashMap<String, Composite> groups = new HashMap<String, Composite>();
-
+	private HashMap<String, Composite> groups = new HashMap<>();
+	
 	private GLComposite subWidgetComposite;
 	
 	/**
 	 * Contains references to installed groups to ToolItem.
 	 */
-	private HashMap<String, ToolItem> buttons = new HashMap<String, ToolItem>();
-
+	private HashMap<String, ToolItem> buttons = new HashMap<>();
+	
 	private ToolBarManager manager;
-
+	
 	/**
 	 * 
 	 * The parent layout must be a GridLayout.
@@ -72,14 +72,13 @@
 		this.subWidgetComposite = subWidgetComposite;
 		// permit to contribute via RCP plugin.xml menu extension
 		manager = new ToolBarManager(this);
-		IMenuService menuService = (IMenuService) this.editorPart.getSite().getService(IMenuService.class);
+		IMenuService menuService = this.editorPart.getSite().getService(IMenuService.class);
 		menuService.populateContributionManager(manager, "toolbar:" + toolbarId); //$NON-NLS-1$
 	}
-
+	
 	@Override
-	protected void checkSubclass() {
-	}
-
+	protected void checkSubclass() {}
+	
 	public ToolBarManager getToolBarManager() {
 		return manager;
 	}
@@ -91,15 +90,16 @@
 	public GLComposite getSubWidgetComposite() {
 		return subWidgetComposite;
 	}
-
+	
 	/**
 	 * Gets the <code>TXMEditor</code> linked to this tool bar.
+	 * 
 	 * @return the editorPart
 	 */
 	public TXMEditor<? extends TXMResult> getEditorPart() {
 		return editorPart;
 	}
-
+	
 	/**
 	 * Sets the visibility state of the specified composite.
 	 * The mechanism is based on GridData.exclude to hide the composite therefore the composite must have a GridData as layout data.
@@ -107,13 +107,13 @@
 	 * @param composite
 	 * 
 	 */
-	public void setVisible(String id, boolean visible)	{
+	public void setVisible(String id, boolean visible) {
 		if (groups.containsKey(id) && !groups.get(id).isDisposed()) {
 			Composite composite = groups.get(id);
 			setVisible(composite, visible);
 		}
 	}
-
+	
 	/**
 	 * Sets the visibility state of the specified composite.
 	 * The mechanism is based on GridData.exclude to hide the composite therefore the composite must have a GridData as layout data.
@@ -121,34 +121,36 @@
 	 * @param composite
 	 * 
 	 */
-	protected void setVisible(Composite composite, boolean visible)	{
+	protected void setVisible(Composite composite, boolean visible) {
 		
-		((GridData)composite.getLayoutData()).exclude = !visible;
+		((GridData) composite.getLayoutData()).exclude = !visible;
 		composite.setVisible(visible);
 		subWidgetComposite.layout(true);
 		composite.layout(true);
 		editorPart.layout(true);
 	}
-
-
+	
+	
 	/**
 	 * TODO not generic enough and call editorPart.getParametersGroupsComposite()
 	 * Shows/hides the command parameters group.
+	 * 
 	 * @param visible
 	 */
-	public void setComputingParametersVisible(boolean visible)	{
+	public void setComputingParametersVisible(boolean visible) {
 		setVisible(TXMEditor.COMPUTING_PARAMETERS_GROUP_ID, visible);
 	}
-
-
+	
+	
 	/**
 	 * Adds the specified control to this toolbar.
 	 * Convenience method to add non-ToolItem controls to the toolbar using the SWT.SEPARATOR trick, plus packing and setting the right width.
 	 * 
 	 * Warning: the item size is not synchronized with the control size
+	 * 
 	 * @param control
 	 */
-	public void addControl(final Control control)	{
+	public void addControl(final Control control) {
 		final ToolItem itemSeparator = new ToolItem(this, SWT.SEPARATOR);
 		control.pack();
 		itemSeparator.setWidth(control.getBounds().width);
@@ -161,25 +163,27 @@
 			}
 		});
 	}
-
+	
 	/**
 	 * Creates a <code>GLComposite</code> in the toolbar subwidgets container.
 	 * 
-	 * @param groupTitle the composite uniq title in the toolbar 
+	 * @param groupTitle the composite uniq title in the toolbar
 	 * @return
 	 */
-	public GLComposite installGLComposite(String groupTitle, int numColumns, boolean makeColumnsEqualWidth)	{
+	public GLComposite installGLComposite(String groupTitle, int numColumns, boolean makeColumnsEqualWidth) {
 		if (this.groups.containsKey(groupTitle)) {
 			return (GLComposite) this.groups.get(groupTitle);
 		}
-		final GLComposite comp = new GLComposite(subWidgetComposite, SWT.NONE, "Group: "+groupTitle);
+		final GLComposite comp = new GLComposite(subWidgetComposite, SWT.NONE, "Group: " + groupTitle);
+		comp.getLayout().horizontalSpacing = 1;
 		comp.getLayout().numColumns = numColumns;
 		comp.getLayout().makeColumnsEqualWidth = makeColumnsEqualWidth;
 		return comp;
 	}
-
+	
 	/**
 	 * Creates a group with a dropdown button and multiple modes
+	 * 
 	 * @param groupTitle
 	 * @param buttonToolTip
 	 * @param openIconFilePath
@@ -195,7 +199,7 @@
 		final DropDownCheckToolItem openCloseButton = new DropDownCheckToolItem(this, buttonToolTip, openIconFilePath, closeIconFilePath);
 		
 		openCloseButton.addSelectionListener(new SelectionListener() {
-
+			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (e.doit) {
@@ -203,14 +207,14 @@
 					selectionListener.widgetSelected(e);
 				}
 			}
-
+			
 			@Override
-			public void widgetDefaultSelected(SelectionEvent e) { }
+			public void widgetDefaultSelected(SelectionEvent e) {}
 		});
 		
 		org.txm.rcp.swt.listeners.DropdownSelectionListener listenerOne = openCloseButton.getDropDownListener();
-		//listenerOne.setDefaultSelectionListener(selectionListener);
-		for (int i = 0 ; i < modes.size() && i < modeSelectionListeners.size(); i++) {
+		// listenerOne.setDefaultSelectionListener(selectionListener);
+		for (int i = 0; i < modes.size() && i < modeSelectionListeners.size(); i++) {
 			MenuItem item1 = new MenuItem(listenerOne.getMenu(), SWT.PUSH);
 			item1.setText(modes.get(i));
 			item1.addSelectionListener(modeSelectionListeners.get(i));
@@ -240,86 +244,87 @@
 	 * @param openIconFilePath
 	 * @return the Group widget created
 	 */
-	public Group installGroup(String groupTitle, String buttonToolTip, String openIconFilePath, String closeIconFilePath, boolean showGroup)	{
-
+	public Group installGroup(String groupTitle, String buttonToolTip, String openIconFilePath, String closeIconFilePath, boolean showGroup) {
+		
 		if (this.groups.containsKey(groupTitle)) {
 			return (Group) this.groups.get(groupTitle);
 		}
-
+		
 		final Group group = new Group(subWidgetComposite, SWT.NONE);
 		group.setText(groupTitle);
-
+		
 		// FIXME: SJ: new version to avoid to redefine the grid layout in each subclasses editors
-//		GridLayout layout = new GridLayout();
-//		layout.marginLeft = 5;
-//		layout.marginWidth = 0;
-//		layout.marginBottom = 0;
-//		layout.marginHeight = 0;
-//		layout.marginTop = 0;
-
+		// GridLayout layout = new GridLayout();
+		// layout.marginLeft = 5;
+		// layout.marginWidth = 0;
+		// layout.marginBottom = 0;
+		// layout.marginHeight = 0;
+		// layout.marginTop = 0;
+		
 		// FIXME: SJ: old version
 		RowLayout layout = new RowLayout();
 		layout.wrap = true;
 		layout.center = true;
 		layout.spacing = 8;
 		layout.marginWidth = layout.marginBottom = layout.marginHeight = layout.marginTop = 0;
-
+		
 		group.setLayout(layout);
-
+		
 		GridData gd2 = new GridData(GridData.FILL_BOTH);
 		gd2.grabExcessVerticalSpace = false;
 		gd2.grabExcessHorizontalSpace = true;
 		gd2.exclude = true;
 		group.setLayoutData(gd2);
 		group.setVisible(false);
-
+		
 		// add finally a button to the toolbar to show/hide the Group
 		OpenCloseToolItem showParameters = new OpenCloseToolItem(this, groupTitle, openIconFilePath, closeIconFilePath, buttonToolTip);
 		this.setVisible(group, showGroup); // default init
-
+		
 		showParameters.addSelectionListener(new SelectionListener() {
-
+			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				OpenCloseToolItem b = (OpenCloseToolItem) e.widget;
 				setVisible(group, b.getSelection());
 			}
-
+			
 			@Override
-			public void widgetDefaultSelected(SelectionEvent e) { }
+			public void widgetDefaultSelected(SelectionEvent e) {}
 		});
-
+		
 		this.groups.put(groupTitle, group);
 		this.buttons.put(groupTitle, showParameters);
 		return group;
 	}
-
+	
 	public void unInstallGroup(String groupTitle) {
 		if (this.groups.containsKey(groupTitle)) {
-			this.groups.get(groupTitle).dispose();			
+			this.groups.get(groupTitle).dispose();
 		}
 		if (this.buttons.containsKey(groupTitle)) {
-			this.buttons.get(groupTitle).dispose();			
+			this.buttons.get(groupTitle).dispose();
 		}
 	}
-
+	
 	public ToolItem getGroupButton(String groupTitle) {
 		return this.buttons.get(groupTitle);
 	}
 	
-
+	
 	/**
 	 * Gets a ToolItem from RCP item contribution from plugin.xml by its id.
+	 * 
 	 * @param id
 	 * @return
 	 */
-	public ToolItem getItemByContributionId(String id)	{
+	public ToolItem getItemByContributionId(String id) {
 		ToolItem item = null;
 		for (int i = 0; i < this.getItemCount(); i++) {
 			
-			if(this.getItem(i).getData() != null && this.getItem(i).getData() instanceof HandledContributionItem)	{
-				HandledContributionItem contribution = (HandledContributionItem) this.getItem(i).getData(); 
-				if(contribution.getId().equals(id))	{
+			if (this.getItem(i).getData() != null && this.getItem(i).getData() instanceof HandledContributionItem) {
+				HandledContributionItem contribution = (HandledContributionItem) this.getItem(i).getData();
+				if (contribution.getId().equals(id)) {
 					item = this.getItem(i);
 					break;
 				}
@@ -331,11 +336,11 @@
 	@Override
 	public void setEnabled(boolean enabled) {
 		super.setEnabled(enabled);
-		for(Control c : this.getChildren()) {
-		    c.setEnabled(enabled);
+		for (Control c : this.getChildren()) {
+			c.setEnabled(enabled);
 		}
 	}
-
+	
 	public boolean isVisible(String id) {
 		if (!groups.containsKey(id)) return false;
 		
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/toolbar/DropDownCheckToolItem.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/toolbar/DropDownCheckToolItem.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/toolbar/DropDownCheckToolItem.java	(revision 3084)
@@ -16,9 +16,11 @@
  *
  */
 public class DropDownCheckToolItem extends ToolItem {
-
+	
 	boolean selected = false;
+	
 	private DropdownSelectionListener dropDownListener;
+	
 	private SelectionListener listener;
 	
 	/**
@@ -30,10 +32,10 @@
 	 */
 	public DropDownCheckToolItem(ToolBar parent, String title, String openIconFilePath, String closeIconFilePath) {
 		super(parent, SWT.DROP_DOWN);
-
-		this.dropDownListener = new org.txm.rcp.swt.listeners.DropdownSelectionListener(this);
-		this.addSelectionListener(dropDownListener); // activate 
 		
+		this.dropDownListener = new org.txm.rcp.swt.listeners.DropdownSelectionListener(parent, this);
+		this.addSelectionListener(dropDownListener); // activate
+		
 		if (openIconFilePath != null) {
 			openIcon = IImageKeys.getImage(openIconFilePath);
 			this.setImage(openIcon);
@@ -41,7 +43,8 @@
 			if (closeIconFilePath != null) {
 				closeIcon = IImageKeys.getImage(closeIconFilePath);
 			}
-		} else {
+		}
+		else {
 			this.setText(title);
 		}
 		
@@ -68,12 +71,14 @@
 		if (closeIcon != null) {
 			if (getSelection()) {
 				setImage(closeIcon);
-			} else {
+			}
+			else {
 				setImage(openIcon);
 			}
 		}
 	}
-
+	
+	@Override
 	public boolean getSelection() {
 		return selected;
 	}
@@ -82,18 +87,20 @@
 		listener.widgetSelected(null);
 	}
 	
+	@Override
 	public void setSelection(boolean selected) {
 		this.selected = selected;
 		updateIcon();
 	}
 	
 	@Override
-	public void checkSubclass() { }
-
+	public void checkSubclass() {}
+	
 	protected Image openIcon;
+	
 	protected Image closeIcon;
-
+	
 	public DropdownSelectionListener getDropDownListener() {
 		return dropDownListener;
 	}
-}
\ No newline at end of file
+}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/NewNavigationWidget.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/NewNavigationWidget.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/NewNavigationWidget.java	(revision 3084)
@@ -30,6 +30,8 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseWheelListener;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Color;
@@ -107,7 +109,9 @@
 		this.shift = 1;
 		this.currentPosition = 0;
 		
-		this.setLayout(new GridLayout(6, false));
+		GridLayout layout = new GridLayout(6, false);
+		layout.horizontalSpacing = 1;
+		this.setLayout(layout);
 		
 		// | [|<] [<] [info] [>] [>|] |
 		
@@ -158,10 +162,7 @@
 		currentPositionText.addKeyListener(new KeyListener() {
 			
 			@Override
-			public void keyReleased(KeyEvent e) {
-				// TODO Auto-generated method stub
-				
-			}
+			public void keyReleased(KeyEvent e) {}
 			
 			@Override
 			public void keyPressed(KeyEvent e) {
@@ -171,11 +172,26 @@
 				}
 			}
 		});
+		MouseWheelListener wheelListener = new MouseWheelListener() {
+			
+			@Override
+			public void mouseScrolled(MouseEvent e) {
+				if (e.count > 0) {
+					currentPosition++;
+					refresh();
+				}
+				else {
+					currentPosition--;
+					refresh();
+				}
+			}
+		};
+		currentPositionText.addMouseWheelListener(wheelListener);
 		
-		
 		// [info]
 		infoLine = new Label(this, SWT.NONE);
-		GridData layoutData = new GridData(GridData.VERTICAL_ALIGN_CENTER, SWT.CENTER, true, false);
+		GridData layoutData = new GridData(GridData.CENTER, SWT.CENTER, true, false);
+		layoutData.minimumWidth = 50;
 		infoLine.setLayoutData(layoutData);
 		
 		whiteColor = currentPositionText.getBackground();
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/parameters/ParametersDialog.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/parameters/ParametersDialog.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/parameters/ParametersDialog.java	(revision 3084)
@@ -58,8 +58,10 @@
 	
 	protected Map args; // store values given by another Macro, if contains all the needed values, no dialog is shown
 	
-	protected int numberOfParameters; // number of parameters to show in the dialog box (not set by 'args'), if 0 parameters no dialog is shown
+	// protected int numberOfParameters; // number of parameters to show in the dialog box (not set by 'args'), if 0 parameters no dialog is shown
 	
+	protected ArrayList<String> parametersToSetByTheUser;
+	
 	protected boolean mustShowDialog; // show dialog if args.size == 0 OR if there is at least one mandatory field to set
 	
 	HashMap<String, Object> values = new HashMap<>(); // store the values of the parameters (may not contains all the values needed
@@ -69,6 +71,8 @@
 	Properties defaultScriptValues = new Properties(); // default values set by the Groovy script @Field@def annotation attribute
 	
 	File propFile;
+	
+	protected ArrayList<String> mandatoryParametersToSetByTheUser;
 	// private int titleWidth;
 	// private Composite parent;
 	
@@ -91,8 +95,9 @@
 		
 		// count the number of fields to show. If "0" then don't show the dialog, see the "open()" function
 		// and select only the NamedOptionDef annotations
-		numberOfParameters = 0; // number of parameters not set by args
-		int numberOfMandatoryFields = 0;
+		// numberOfParameters = 0; // number of parameters not set by args
+		parametersToSetByTheUser = new ArrayList<>();
+		mandatoryParametersToSetByTheUser = new ArrayList<>();
 		for (OptionHandler arg : allParameters) {
 			if (arg.option instanceof NamedOptionDef) {
 				NamedOptionDef option = (NamedOptionDef) arg.option;
@@ -103,12 +108,14 @@
 				}
 				
 				// count number of mandatory fields set AND add exception for "Separator" widget types
-				if (option.required() || "Separator".equals(option.widget())) numberOfMandatoryFields++;
-				numberOfParameters++;
+				if (option.required() || "Separator".equals(option.widget())) {
+					mandatoryParametersToSetByTheUser.add(option.name());
+				}
+				parametersToSetByTheUser.add(option.name());
 			}
 		}
 		
-		mustShowDialog = numberOfMandatoryFields > 0 || (args.size() == 0 && numberOfParameters > 0);
+		mustShowDialog = mandatoryParametersToSetByTheUser.size() > 0 || (args.size() == 0 && parametersToSetByTheUser.size() > 0);
 		
 		// initialize the properties file default values store
 		defaultValues = new Properties();
@@ -279,7 +286,7 @@
 				}
 			}
 		});
-		if (numberOfParameters == 0) button.setEnabled(false);
+		if (parametersToSetByTheUser.size() == 0) button.setEnabled(false);
 		
 		super.createButtonsForButtonBar(parent);
 		this.getButton(IDialogConstants.OK_ID).setText(TXMUIMessages.run);
@@ -326,8 +333,8 @@
 		// } );
 		
 		
-		if (numberOfParameters > MAX_PARAMETERS_PER_LINE) {
-			columns.getLayout().numColumns = 1 + (numberOfParameters / MAX_PARAMETERS_PER_LINE);
+		if (parametersToSetByTheUser.size() > MAX_PARAMETERS_PER_LINE) {
+			columns.getLayout().numColumns = 1 + (parametersToSetByTheUser.size() / MAX_PARAMETERS_PER_LINE);
 		}
 		
 		GLComposite column = new GLComposite(columns, SWT.NONE, "column");
@@ -593,8 +600,11 @@
 							Log.finest("Activating shell:" + shell);
 							shell.setActive();
 						}
-						if (dialog.getMustShowDialog()) {
-							Log.finest("The parameters dialog must be opened to fill all mandatory fields.");
+						
+						ArrayList missingParameters = dialog.getParametersToSet();
+						ArrayList missingMandatoryParameters = dialog.getMandatoryParametersToSet();
+						if (missingParameters.size() > 0) {
+							Log.finer("The parameters dialog must be opened to fill parameters " + missingParameters + " and all mandatory fields: " + missingMandatoryParameters);
 							retOpen = dialog.open() == ParametersDialog.OK;
 							errorOpen = dialog.isError();
 						}
@@ -627,12 +637,20 @@
 		return retOpen && !errorOpen;
 	}
 	
+	protected ArrayList getMandatoryParametersToSet() {
+		return mandatoryParametersToSetByTheUser;
+	}
+	
+	protected ArrayList getParametersToSet() {
+		return parametersToSetByTheUser;
+	}
+	
 	public boolean getMustShowDialog() {
 		return mustShowDialog;
 	}
 	
 	protected int getNumberOfFields() {
-		return numberOfParameters;
+		return parametersToSetByTheUser.size();
 	}
 	
 	// TODO: uncomment this to enable "args" detection
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/PropertiesSelector.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/PropertiesSelector.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/PropertiesSelector.java	(revision 3084)
@@ -170,9 +170,10 @@
 			
 			if (p instanceof StructuralUnitProperty || p instanceof VirtualProperty) {
 				buffer.append(p.getFullName());
-			} else {
+			}
+			else {
 				buffer.append(p.getName());
-			}			
+			}
 		}
 		if (buffer.length() > 0) {
 			int l = buffer.length();
@@ -291,7 +292,7 @@
 	}
 	
 	/**
-	 * Sets the properties.
+	 * Sets the available properties and reset the selected ones.
 	 * 
 	 * @param available a list of properties set to the this.availableProperties list
 	 */
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/listeners/DropdownSelectionListener.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/listeners/DropdownSelectionListener.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/listeners/DropdownSelectionListener.java	(revision 3084)
@@ -7,24 +7,28 @@
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.ToolBar;
 import org.eclipse.swt.widgets.ToolItem;
 
 public class DropdownSelectionListener extends SelectionAdapter {
-
+	
 	private Menu menu;
+	
 	private SelectionListener defaultListener;
-	public DropdownSelectionListener(ToolItem dropdown) {
-		menu = new Menu(dropdown.getDisplay().getActiveShell(), SWT.POP_UP);
+	
+	public DropdownSelectionListener(ToolBar parent, ToolItem dropdown) {
+		menu = new Menu(parent.getShell(), SWT.POP_UP);
 	}
-
+	
 	public void setDefaultSelectionListener(SelectionListener defaultListener) {
-		this.defaultListener = defaultListener;			
+		this.defaultListener = defaultListener;
 	}
-
+	
 	public Menu getMenu() {
 		return menu;
 	}
-
+	
+	@Override
 	public void widgetSelected(SelectionEvent event) {
 		if (event.detail == SWT.ARROW) {
 			ToolItem item = (ToolItem) event.widget;
@@ -33,10 +37,11 @@
 			menu.setLocation(pt.x, pt.y + rect.height);
 			menu.setVisible(true);
 			event.doit = false;
-		} else {
+		}
+		else {
 			if (defaultListener != null) {
 				defaultListener.widgetSelected(event);
 			}
 		}
 	}
-}
\ No newline at end of file
+}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/perspective/TXMPerspective.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/perspective/TXMPerspective.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/perspective/TXMPerspective.java	(revision 3084)
@@ -36,37 +36,40 @@
 
 // TODO: Auto-generated Javadoc
 /**
- * define which view are opened at TXM start up 
+ * define which view are opened at TXM start up
+ * 
  * @author mdecorde.
  */
 public class TXMPerspective implements IPerspectiveFactory {
-
+	
 	/** The Constant ID. */
 	public static final String ID = "org.txm.rcp.perspective.TXMPerspective"; //$NON-NLS-1$
+	
 	static IPageLayout initialLayout;
 	
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
 	 * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)
 	 */
 	@Override
 	public void createInitialLayout(IPageLayout layout) {
 		
 		TXMPerspective.initialLayout = layout;
-		//System.out.println("INITIAL LAYOUT="+initialLayout);
+		// System.out.println("INITIAL LAYOUT="+initialLayout);
 		String editorArea = layout.getEditorArea();
 		layout.setEditorAreaVisible(true);
-
+		
 		IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, 0.20f, editorArea); //$NON-NLS-1$
 		left.addView(CorporaView.ID);
 		left.addView(Explorer.ID);
-
+		
 		layout.getViewLayout(CorporaView.ID).setCloseable(false);
-		layout.getViewLayout(Explorer.ID).setCloseable(false);
+		layout.getViewLayout(Explorer.ID).setCloseable(true);
 		
 		IFolderLayout bottom = layout.createFolder("bottom", IPageLayout.BOTTOM, 0.7f, editorArea); //$NON-NLS-1$
 		// bottom.addView(IPageLayout.ID_OUTLINE);
 		bottom.addView(IConsoleConstants.ID_CONSOLE_VIEW);
-		//bottom.addView("org.eclipse.ui.views.ProgressView"); //$NON-NLS-1$
+		// bottom.addView("org.eclipse.ui.views.ProgressView"); //$NON-NLS-1$
 		// bottom.addView(GroovyConsole.ID);
 		// bottom.addView(IConsoleConstants.ID_CONSOLE_VIEW);
 		
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/commands/workspace/LoadBinaryCorporaDirectory.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/commands/workspace/LoadBinaryCorporaDirectory.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/commands/workspace/LoadBinaryCorporaDirectory.java	(revision 3084)
@@ -44,6 +44,7 @@
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.DirectoryDialog;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
@@ -53,6 +54,7 @@
 import org.txm.core.engines.EngineType;
 import org.txm.core.messages.TXMCoreMessages;
 import org.txm.objects.Project;
+import org.txm.rcp.IImageKeys;
 import org.txm.rcp.StatusLine;
 import org.txm.rcp.commands.RestartTXM;
 import org.txm.rcp.messages.TXMUIMessages;
@@ -73,33 +75,34 @@
  * @author mdecorde
  */
 public class LoadBinaryCorporaDirectory extends AbstractHandler {
-
+	
 	private static final String ID = LoadBinaryCorporaDirectory.class.getName();
-
+	
 	@Override
 	/**
 	 * calling this command will : open a directory dialog and try to load the content of the selected directory
 	 */
 	public Object execute(ExecutionEvent event) throws ExecutionException {
-
+		
 		// create dialog to get the corpus directory
 		Shell shell = HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell();
 		DirectoryDialog dialog = new DirectoryDialog(shell, SWT.OPEN);
 		if (LastOpened.getFile(ID) != null) {
-			dialog.setFilterPath(LastOpened.getFolder(ID));
+			dialog.setFilterPath(LastOpened.getFolder(ID) + "/" + LastOpened.getFile(ID));
 		}
-
+		
 		if (dialog.open() != null) {
-
+			
 			File directory = new File(dialog.getFilterPath());
-
+			
 			if (directory.exists()) {
 				LastOpened.set(ID, directory);
-				JobHandler job = loadBinaryCorpusFromCorporaDirectory(directory, true, true, false);
+				JobHandler job = loadBinaryCorpusFromCorporaDirectory(directory, true, true, true);
 				if (job != null) {
 					try {
 						job.join();
-					} catch (InterruptedException e) {
+					}
+					catch (InterruptedException e) {
 						// TODO Auto-generated catch block
 						e.printStackTrace();
 					}
@@ -108,7 +111,7 @@
 		}
 		return null;
 	}
-
+	
 	/**
 	 * stop engines, try loading binary corpora from a directory, restart engines and refresh views
 	 * 
@@ -116,131 +119,155 @@
 	 * @return
 	 */
 	public static JobHandler loadBinaryCorpusFromCorporaDirectory(final File directory, final boolean askSelection, final boolean replace, final boolean loadDirectories) {
-
+		
 		JobHandler jobhandler = new JobHandler(NLS.bind(TXMUIMessages.LoadBinaryCorporaDirectory_loadingCorporaFromTheP0Directory, directory), true) {
-
+			
 			JobHandler self = this;
+			
 			@Override
 			protected IStatus run(final IProgressMonitor monitor) {
 				this.runInit(monitor);
-
-				//				try {
-				//					SearchEnginesManager.getCQPSearchEngine().stop();
-				//				} catch (Exception e1) {
-				//					// TODO Auto-generated catch block
-				//					e1.printStackTrace();
-				//				}
-
+				
+				// try {
+				// SearchEnginesManager.getCQPSearchEngine().stop();
+				// } catch (Exception e1) {
+				// // TODO Auto-generated catch block
+				// e1.printStackTrace();
+				// }
+				
 				File corporaDirectory = new File(Toolbox.getTxmHomePath(), "corpora"); //$NON-NLS-1$
 				if (!corporaDirectory.exists()) {
 					Log.severe(TXMUIMessages.LoadBinaryCorporaDirectory_corporaDirectoryNotFoundAborting);
-					//					try {
-					//						SearchEnginesManager.getCQPSearchEngine().start(null);
-					//					} catch (Exception e) {
-					//						// TODO Auto-generated catch block
-					//						e.printStackTrace();
-					//					}
+					// try {
+					// SearchEnginesManager.getCQPSearchEngine().start(null);
+					// } catch (Exception e) {
+					// // TODO Auto-generated catch block
+					// e.printStackTrace();
+					// }
 					return Status.CANCEL_STATUS;
 				}
-
-				final ArrayList<Project> newProjects = new ArrayList<Project>();
+				
+				final ArrayList<Project> newProjects = new ArrayList<>();
 				if (askSelection) {
-
+					
 					this.syncExec(new Runnable() {
+						
 						@Override
 						public void run() {
-							List<File>  files = getBinaryCorpusSelection(directory, loadDirectories);
+							List<File> files = getBinaryCorpusSelection(directory, loadDirectories);
 							ArrayList<Project> tmp = loadBinaryCorpusFromCorporaDirectory(files, self, monitor, replace);
 							if (tmp != null) {
 								newProjects.addAll(tmp);
 							}
 						}
 					});
-
-				} else { // try loading corpora and dont replace existing corpus
-					List<File>  files = Arrays.asList(getBinaryCorpusFiles(directory, loadDirectories));
+					
+				}
+				else { // try loading corpora and dont replace existing corpus
+					List<File> files = Arrays.asList(getBinaryCorpusFiles(directory, loadDirectories));
 					ArrayList<Project> tmp = loadBinaryCorpusFromCorporaDirectory(files, this, monitor, replace);
 					if (tmp != null) {
 						newProjects.addAll(tmp);
 					}
 				}
-
-				//				this.acquireSemaphore();
-				//				try {
-				//					SearchEnginesManager.getCQPSearchEngine().start(null);
-				//				} catch (Exception e) {
-				//					e.printStackTrace();
-				//				}
-				//				this.releaseSemaphore();
-
+				
+				// this.acquireSemaphore();
+				// try {
+				// SearchEnginesManager.getCQPSearchEngine().start(null);
+				// } catch (Exception e) {
+				// e.printStackTrace();
+				// }
+				// this.releaseSemaphore();
+				
 				for (Project newProject2 : newProjects) {
 					try {
 						newProject2.compute(true);
-					} catch (Exception e) {
+					}
+					catch (Exception e) {
 						e.printStackTrace();
 					}
 				}
 				if (newProjects.size() > 0) {
 					System.out.println(NLS.bind(TXMUIMessages.P0CorpusLoaded, newProjects.size()));
 				}
-
+				
 				this.syncExec(new Runnable() {
+					
 					@Override
 					public void run() {
 						RestartTXM.reloadViews();
 						StatusLine.setMessage(TXMUIMessages.info_txmIsReady);
 					}
 				});
-
+				
 				return Status.OK_STATUS;
 			}
 		};
-
+		
 		jobhandler.schedule();
 		return jobhandler;
 	}
-
+	
 	protected static List<File> getBinaryCorpusSelection(File directory, boolean loadDirectories) {
-		ArrayList<File> selectedFiles = new ArrayList<File>();;
+		ArrayList<File> selectedFiles = new ArrayList<>();
+		;
 		if (!directory.isDirectory()) return selectedFiles;
 		if (!directory.exists()) return selectedFiles;
-
+		
 		Shell shell = null;
-
+		
 		if (Display.getCurrent() != null) {
 			shell = Display.getCurrent().getActiveShell();
-		} else if (Display.getDefault() == null) {
+		}
+		else if (Display.getDefault() == null) {
 			shell = Display.getDefault().getActiveShell();
-		} else if (Display.findDisplay(Thread.currentThread()) != null) {
+		}
+		else if (Display.findDisplay(Thread.currentThread()) != null) {
 			shell = Display.findDisplay(Thread.currentThread()).getActiveShell();
-		} else {
+		}
+		else {
 			return selectedFiles;
 		}
 		File[] files = getBinaryCorpusFiles(directory, loadDirectories);
-
+		
 		ListSelectionDialog lsd = new ListSelectionDialog(shell, files, new ArrayContentProvider(), new LabelProvider() {
-
+			
 			@Override
+			public Image getImage(Object element) {
+				File f = (File) element;
+				if (f.getName().endsWith(".txm")) {
+					return IImageKeys.getImage(IImageKeys.TXM1616);
+				}
+				else if (f.isDirectory()) {
+					return IImageKeys.getImage(IImageKeys.FOLDER);
+				}
+				return null;
+			}
+			
+			@Override
 			public String getText(Object element) {
 				if (element == null) return "error";//$NON-NLS-1$
-
-				if (!(element instanceof File)) return "not a file ("+element+")";//$NON-NLS-1$ //$NON-NLS-2$
-
+				
+				if (!(element instanceof File)) return "not a file (" + element + ")";//$NON-NLS-1$ //$NON-NLS-2$
+				
 				File f = (File) element;
-				if (f.isDirectory()) {
-					if (new File(f, ".settings").exists()) {//$NON-NLS-1$
-						return f.getName().toUpperCase()+" ("+f+")";//$NON-NLS-1$ //$NON-NLS-2$
-					} else if (new File(f, "import.xml").exists()) {//$NON-NLS-1$
-						return f.getName().toUpperCase()+" ("+f+")";//$NON-NLS-1$ //$NON-NLS-2$
-					}
-				} else if (f.getName().endsWith(".txm")) {//$NON-NLS-1$
-					return Zip.getRoot(f).toUpperCase()+" ("+f+")";//$NON-NLS-1$ //$NON-NLS-2$
-				}
-
-				return "not a txm corpus ("+f+")";//$NON-NLS-1$ //$NON-NLS-2$
+				// if (f.isDirectory()) {
+				// if (new File(f, ".settings").exists()) {//$NON-NLS-1$
+				// return f.getName();
+				// }
+				// else if (new File(f, "import.xml").exists()) {//$NON-NLS-1$
+				// return f.getName();
+				// }
+				// }
+				// else if (f.getName().endsWith(".txm")) {//$NON-NLS-1$
+				// return f.getName();
+				// }
+				return f.getName();
+				
+				// return "not a txm corpus (" + f + ")";//$NON-NLS-1$ //$NON-NLS-2$
 			}
-		}, TXMUIMessages.LoadBinaryCorporaDirectory_selectTheTXMCorpusToLoad);
-		lsd.setInitialSelections(files);
+		}, TXMUIMessages.bind(TXMUIMessages.LoadBinaryCorporaDirectory_selectTheTXMCorpusToLoadIn, directory));
+		// lsd.setInitialSelections(files);
 		lsd.setTitle(TXMUIMessages.LoadBinaryCorporaDirectory_corpusLoad);
 		if (lsd.open() == ListSelectionDialog.OK) {
 			System.out.println(lsd.getResult());
@@ -248,30 +275,38 @@
 				selectedFiles.add(new File(o.toString()));
 			}
 		}
-
+		
 		return selectedFiles;
 	}
-
+	
 	private static File[] getBinaryCorpusFiles(File directory, boolean loadDirectories) {
 		File[] files = null;
-
+		
 		if (loadDirectories) {
 			files = directory.listFiles(new FileFilter() {
+				
 				@Override
 				public boolean accept(File arg0) {
-					return IOUtils.HIDDENFILE_FILTER.accept(arg0) && arg0.isDirectory();
+					return IOUtils.HIDDENFILE_FILTER.accept(arg0) &&
+							((arg0.isDirectory() && (new File(arg0, "import.xml").exists() || new File(arg0, ".settings").exists()))
+									|| arg0.getName().endsWith(".txm")
+							
+							);
 				}
 			});
-		} else {
+		}
+		else {
 			files = directory.listFiles(new FileFilter() {
+				
 				@Override
 				public boolean accept(File arg0) {
 					return IOUtils.HIDDENFILE_FILTER.accept(arg0) && arg0.getName().endsWith(".txm"); //$NON-NLS-1$
 				}
 			});
 		}
-
+		
 		Arrays.sort(files, new Comparator<File>() {
+			
 			@Override
 			public int compare(File o1, File o2) {
 				int i = o1.getName().compareTo(o2.getName());
@@ -281,10 +316,10 @@
 				return i;
 			}
 		});
-
+		
 		return files;
 	}
-
+	
 	/**
 	 * dont manage SearchEngine state
 	 * 
@@ -297,7 +332,7 @@
 		File[] files = directory.listFiles(IOUtils.HIDDENFILE_FILTER);
 		return loadBinaryCorpusFromCorporaDirectory(Arrays.asList(files), job, monitor, replace);
 	}
-
+	
 	/**
 	 * dont manage SearchEngine state
 	 * 
@@ -305,66 +340,73 @@
 	 * @param job
 	 * @param monitor
 	 * @param replace if true replace existing corpus
-	 * @param loadDirectories 
+	 * @param loadDirectories
 	 * @return the loaded projects
 	 */
 	protected static ArrayList<Project> loadBinaryCorpusFromCorporaDirectory(List<File> corporaFiles, JobHandler job, IProgressMonitor monitor, boolean replace) {
-
-		ArrayList<Project> projects = new ArrayList<Project>();
-
+		
+		ArrayList<Project> projects = new ArrayList<>();
+		
 		try {
-
-			//			SearchEngine engine = SearchEnginesManager.getCQPSearchEngine();
-			//			if (engine.isRunning()) {
-			//				engine.stop();
-			//			}
-
+			
+			// SearchEngine engine = SearchEnginesManager.getCQPSearchEngine();
+			// if (engine.isRunning()) {
+			// engine.stop();
+			// }
+			
 			monitor.beginTask(TXMUIMessages.loadingBinaryCorpus, 100);
-			job.acquireSemaphore();
-			//			Toolbox.getEngineManager(EngineType.SEARCH).stopEngines();
-			job.releaseSemaphore();
-
+			// job.acquireSemaphore();
+			// Toolbox.getEngineManager(EngineType.SEARCH).stopEngines();
+			// job.releaseSemaphore();
+			
 			monitor.subTask(TXMUIMessages.loadingTheCorpusInThePlatform);
 			for (File corpusDirectory : corporaFiles) {
 				try {
 					if (corpusDirectory.isHidden()) {
 						continue;
 					}
-
+					
 					Project project = Toolbox.workspace.getProject(corpusDirectory.getName().toUpperCase());
 					if (project != null) {
-						Log.warning(TXMCoreMessages.bind(TXMUIMessages.LoadBinaryCorporaDirectory_aCorpusNamedP0alreadyExistsLoadingOfP1Canceled, corpusDirectory.getName().toUpperCase(), corpusDirectory));
+						Log.warning(TXMCoreMessages.bind(TXMUIMessages.LoadBinaryCorporaDirectory_aCorpusNamedP0alreadyExistsLoadingOfP1Canceled, corpusDirectory.getName().toUpperCase(),
+								corpusDirectory));
 						continue;
 					}
-
+					
 					if (corpusDirectory.isDirectory()) {
 						project = LoadBinaryCorpus.loadBinaryCorpusAsDirectory(corpusDirectory, monitor, replace);
-					} else {
+					}
+					else {
 						project = LoadBinaryCorpus.loadBinaryCorpusArchive(corpusDirectory, job, monitor, replace);
 					}
-
-					//				Project base = LoadBinaryCorpus.loadBinaryCorpusAsDirectory(corpusDirectory);
+					
+					// Project base = LoadBinaryCorpus.loadBinaryCorpusAsDirectory(corpusDirectory);
 					if (project == null) {
-						//Log.warning("Failed to load binary corpus: "+corpusDirectory);
-					} else {
+						// Log.warning("Failed to load binary corpus: "+corpusDirectory);
+					}
+					else {
 						projects.add(project);
 						project.save();
 					}
-				} catch (Exception e2) {
-					Log.warning("Could not load corpus from "+corpusDirectory+": "+e2);
+				}
+				catch (Exception e2) {
+					Log.warning("Could not load corpus from " + corpusDirectory + ": " + e2);
 					Log.printStackTrace(e2);
 				}
 			}
-
+			
 			monitor.subTask(TXMUIMessages.restartingThePlatform);
-
-		} catch (ThreadDeath td) { 
-		} catch (Exception e2) {
+			
+		}
+		catch (ThreadDeath td) {
+		}
+		catch (Exception e2) {
 			org.txm.utils.logger.Log.printStackTrace(e2);
-		} finally {
+		}
+		finally {
 			monitor.done();
 		}
-
+		
 		return projects;
 	}
-}
\ No newline at end of file
+}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/ApplicationWorkbenchAdvisor.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/ApplicationWorkbenchAdvisor.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/ApplicationWorkbenchAdvisor.java	(revision 3084)
@@ -343,10 +343,11 @@
 		
 		if (txm_date.equals(build_date)) {
 			System.out.println(NLS.bind(TXMUIMessages.startingUpP0,
-				v.getMajor()+"."+v.getMinor()+"."+v.getMicro(), build_date));
-		} else {
+					v.getMajor() + "." + v.getMinor() + "." + v.getMicro(), build_date));
+		}
+		else {
 			System.out.println(NLS.bind(TXMUIMessages.startingUpP0,
-					v.getMajor()+"."+v.getMinor()+"."+v.getMicro(), "update "+txm_date+ " - build "+build_date));
+					v.getMajor() + "." + v.getMinor() + "." + v.getMicro(), "update " + txm_date + " - build " + build_date));
 		}
 	}
 	
@@ -837,30 +838,48 @@
 			txmhomedir = new File(Toolbox.getTxmHomePath().trim());
 		}
 		corporaDir = new File(txmhomedir, "corpora"); //$NON-NLS-1$
-		corporaDir.mkdir();
 		
-		File previous080CorporaDirectory = new File(System.getProperty("user.home"), "TXM-0.8.0/corpora"); //$NON-NLS-1$ //$NON-NLS-2$ $NON-NLS-2$
-		File previous079CorporaDirectory = new File(System.getProperty("user.home"), "TXM/corpora"); //$NON-NLS-1$ //$NON-NLS-2$ $NON-NLS-2$
+		String previousVersions[] = { "0.8.1", "0.8.0", "0.7.9" };
+		String previousVersionLabels[] = new String[previousVersions.length];
+		File previousVersionCorporaDirectories[] = new File[previousVersions.length];
 		
+		for (int i = 0; i < previousVersions.length; i++) {
+			String v = previousVersions[i];
+			
+			previousVersionLabels[i] = TXMUIMessages.bind(TXMUIMessages.corporaOfPreviousTXMP0, v);
+			
+			File dir = new File(System.getProperty("user.home"), "TXM-" + v + "/corpora");
+			if ("0.7.9".equals(v)) {
+				dir = new File(System.getProperty("user.home"), "TXM/corpora");
+			}
+			previousVersionCorporaDirectories[i] = dir;
+		}
+		
 		Version v = Activator.getDefault().getBundle().getVersion();
 		String vv = v.getMajor() + "." + v.getMinor() + "." + v.getMicro(); //$NON-NLS-1$ //$NON-NLS-2$ $NON-NLS-2$
-		String SAMPLES = "1. " + TXMUIMessages.bind(TXMUIMessages.sampleCorporaOfCurrentTXMP0, vv);//$NON-NLS-1$
-		String V081 = "2. " + TXMUIMessages.bind(TXMUIMessages.corporaOfPreviousTXMP0, vv);//$NON-NLS-1$
-		String V080 = "3. " + TXMUIMessages.bind(TXMUIMessages.corporaOfPreviousTXMP0, "0.8.0"); //$NON-NLS-1$ //$NON-NLS-2$ $NON-NLS-2$
-		String V079 = "4. " + TXMUIMessages.bind(TXMUIMessages.corporaOfPreviousTXMP0, "0.7.9"); //$NON-NLS-1$ //$NON-NLS-2$ $NON-NLS-2$
-		String OTHER = "5. " + TXMUIMessages.selectAnotherTXMCorporaToRestore;//$NON-NLS-1$
+		String SAMPLES = "1. " + TXMUIMessages.bind(TXMUIMessages.sampleCorporaOfCurrentTXMP0, vv);
+		String vCURRENT = "2. " + TXMUIMessages.bind(TXMUIMessages.corporaOfPreviousTXMP0, vv);
 		
+		int n = 3;
+		final ArrayList<Object> selectedCorporaDirs = new ArrayList<>();
+		selectedCorporaDirs.add(SAMPLES);
+		selectedCorporaDirs.add(vCURRENT);
 		
-		final ArrayList<Object> corporaDirs = new ArrayList<>();
-		corporaDirs.add(SAMPLES);
-		corporaDirs.add(V081);
-		corporaDirs.add(V080);
-		corporaDirs.add(V079);
-		corporaDirs.add(OTHER);
+		if (corporaDir.exists() && corporaDir.listFiles(IOUtils.HIDDENFILE_FILTER).length > 0) selectedCorporaDirs.add(vCURRENT);
 		
+		for (int i = 0; i < previousVersions.length; i++) {
+			if (previousVersionCorporaDirectories[i].exists()
+					&& previousVersionCorporaDirectories[i].listFiles(IOUtils.HIDDENFILE_FILTER).length > 0) {
+				selectedCorporaDirs.add("" + (n++) + ". " + previousVersionLabels[i]);
+			}
+		}
+		
+		String OTHER = "" + (n++) + ". " + TXMUIMessages.selectAnotherTXMCorporaToRestore;
+		selectedCorporaDirs.add(OTHER);
+		
 		final ArrayList<Object> initialCorporaDirs = new ArrayList<>();
 		initialCorporaDirs.add(SAMPLES);
-		initialCorporaDirs.add(V081);
+		initialCorporaDirs.add(vCURRENT);
 		
 		Display.getDefault().syncExec(new Runnable() {
 			
@@ -868,22 +887,22 @@
 			public void run() {
 				Display display = Display.getDefault();
 				Shell shell = display.getActiveShell();
-				ListSelectionDialog dialog = new ListSelectionDialog(shell, corporaDirs,
+				ListSelectionDialog dialog = new ListSelectionDialog(shell, selectedCorporaDirs,
 						new ArrayContentProvider(), new LabelProvider(), TXMUIMessages.corporaWillBeRestoredInTheFollowingOrderCorporaAlreadyRestoredWillNotBeReplaced);
 				dialog.setTitle(TXMUIMessages.selectThecorporaSetsToRestore);
 				dialog.setInitialElementSelections(initialCorporaDirs);
 				if (dialog.open() == ListSelectionDialog.OK) {
-					corporaDirs.clear();
+					selectedCorporaDirs.clear();
 					List<Object> selection = Arrays.asList(dialog.getResult());
-					corporaDirs.addAll(selection);
+					selectedCorporaDirs.addAll(selection);
 				}
 				else {
-					corporaDirs.clear();
+					selectedCorporaDirs.clear();
 				}
 			}
 		});
 		
-		// move previous TXM 0.8.2 corpora
+		// move the previous TXM 0.8.2 corpora
 		File backupDir = new File(corporaDir.getAbsolutePath() + "-previous"); //$NON-NLS-1$
 		if (corporaDir.exists()) {
 			backupDir.mkdirs();
@@ -894,8 +913,10 @@
 			}
 		}
 		
+		corporaDir.mkdir();
+		
 		// load TXM-0.8.2 sample corpora (from the install directory)
-		if (corporaDirs.contains(SAMPLES) && sampleCorporaDirectory.exists()) {
+		if (selectedCorporaDirs.contains(SAMPLES) && sampleCorporaDirectory.exists()) {
 			
 			Log.info(TXMUIMessages.installingSampleCorpus);
 			
@@ -909,9 +930,9 @@
 			}
 		}
 		
-		// TXM-0.8.2 previous installation corpora
-		if (corporaDirs.contains(V081) && backupDir.listFiles(IOUtils.HIDDENFILE_FILTER).length > 0) { // not a new install, restore corpus from the corpora-previous directory
-			Log.info(NLS.bind(TXMUIMessages.installingPreviousCorpusFromP0, "0.8.2", corporaDir)); //$NON-NLS-1$
+		// TXM-CURRENT previous installation corpora
+		if (selectedCorporaDirs.contains(vCURRENT) && backupDir.listFiles(IOUtils.HIDDENFILE_FILTER).length > 0) { // not a new install, restore corpus from the corpora-previous directory
+			Log.info(NLS.bind(TXMUIMessages.installingPreviousCorpusFromP0, vv, corporaDir));
 			JobHandler job = LoadBinaryCorporaDirectory.loadBinaryCorpusFromCorporaDirectory(backupDir, false, false, true);
 			try {
 				job.join();
@@ -921,33 +942,23 @@
 			}
 		}
 		
-		// TXM-0.8.0 previous installation corpora
-		if (corporaDirs.contains(V080) && previous080CorporaDirectory.exists()
-				&& previous080CorporaDirectory.listFiles(IOUtils.HIDDENFILE_FILTER).length > 0) { // not a new install, restore corpus from the corpora-previous directory
-			Log.info(NLS.bind(TXMUIMessages.installingPreviousCorpusFromP0, "0.8.0", corporaDir)); //$NON-NLS-1$
-			JobHandler job = LoadBinaryCorporaDirectory.loadBinaryCorpusFromCorporaDirectory(previous080CorporaDirectory, false, false, true);
-			try {
-				job.join();
+		for (int i = 0; i < previousVersions.length; i++) {
+			if (selectedCorporaDirs.contains(previousVersionLabels[i])) {
+				
+				Log.info(NLS.bind(TXMUIMessages.installingPreviousCorpusFromP0, previousVersions[i], previousVersionCorporaDirectories[i]));
+				
+				JobHandler job = LoadBinaryCorporaDirectory.loadBinaryCorpusFromCorporaDirectory(previousVersionCorporaDirectories[i], false, false, true);
+				try {
+					job.join();
+				}
+				catch (InterruptedException e) {
+					e.printStackTrace();
+				}
 			}
-			catch (InterruptedException e) {
-				e.printStackTrace();
-			}
 		}
 		
-		// TXM previous installation corpora
-		if (corporaDirs.contains(V079) && previous079CorporaDirectory.exists()) { // new installation (empty corpora directory)
-			Log.info(NLS.bind(TXMUIMessages.installingPreviousCorpusFromP0, "0.7.9", previous079CorporaDirectory)); //$NON-NLS-1$
-			JobHandler job = LoadBinaryCorporaDirectory.loadBinaryCorpusFromCorporaDirectory(previous079CorporaDirectory, false, false, true);
-			try {
-				job.join();
-			}
-			catch (InterruptedException e) {
-				e.printStackTrace();
-			}
-		}
-		
-		// TXM previous installation corpora
-		if (corporaDirs.contains(OTHER)) { // new installation (empty corpora directory)
+		// recovery from an other corpora directory to select by the user
+		if (selectedCorporaDirs.contains(OTHER)) { // new installation (empty corpora directory)
 			final HashMap<String, String> bindings = new HashMap<>();
 			Display.getDefault().syncExec(new Runnable() {
 				
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/FileTreeLabelProvider.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/FileTreeLabelProvider.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/FileTreeLabelProvider.java	(revision 3084)
@@ -38,36 +38,78 @@
 import org.txm.rcp.Application;
 import org.txm.rcp.IImageKeys;
 
-// TODO: Auto-generated Javadoc
 /**
- * The Class FileTreeLabelProvider.
+ * The Class FileTreeLabelProvider: cache of TXM images and utility methods to get an image of a plugin
  */
 public class FileTreeLabelProvider extends LabelProvider {
 	
 	/** The image table. */
-	private Map<ImageDescriptor, Image> imageTable = new HashMap<ImageDescriptor, Image>(
-			7);
-
-	/* (non-Javadoc)
+	private Map<ImageDescriptor, Image> imageTable = new HashMap<>();
+	
+	/*
+	 * (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
 	 */
 	@Override
 	public String getText(Object element) {
 		return ((File) element).getName();
 	}
-
-	/* (non-Javadoc)
+	
+	/*
+	 * (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
 	 */
 	@Override
 	public final Image getImage(Object element) {
 		File f = ((File) element);
-		ImageDescriptor imageDescriptor = AbstractUIPlugin
-				.imageDescriptorFromPlugin(Application.PLUGIN_ID,
-						IImageKeys.FILE);
-		if (f.isDirectory())
+		ImageDescriptor imageDescriptor = null;
+		if (f.isDirectory()) {
 			imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(
 					Application.PLUGIN_ID, IImageKeys.FOLDER);
+		}
+		else if (f.isFile()) {
+			if (f.getName().matches(".*\\.(mp4|avi|mkv|ogv|mpg|webm)")) {
+				imageDescriptor = AbstractUIPlugin
+						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
+								IImageKeys.FILE_VIDEO);
+			}
+			else if (f.getName().endsWith(".txm")) {
+				imageDescriptor = AbstractUIPlugin
+						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
+								IImageKeys.TXM1616);
+			}
+			else if (f.getName().matches(".*\\.(mp3|ogg|wav|flac)")) {
+				imageDescriptor = AbstractUIPlugin
+						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
+								IImageKeys.FILE_AUDIO);
+			}
+			else if (f.getName().matches(".*\\.(png|jpg|jpeg|bmp|gif)")) {
+				imageDescriptor = AbstractUIPlugin
+						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
+								IImageKeys.FILE_IMAGE);
+			}
+			else if (f.getName().endsWith("Macro.groovy")) {
+				imageDescriptor = AbstractUIPlugin
+						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
+								IImageKeys.SCRIPT_RUN);
+			}
+			else if (f.getName().matches(".*\\.(groovy|R|py|pl|java|rb|sh|bat)")) {
+				imageDescriptor = AbstractUIPlugin
+						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
+								IImageKeys.SCRIPT);
+			}
+			else if (f.getName().matches(".*\\.(doc.|od.|pdf)")) {
+				imageDescriptor = AbstractUIPlugin
+						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
+								IImageKeys.FILE_DOC);
+			}
+			else {
+				imageDescriptor = AbstractUIPlugin
+						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
+								IImageKeys.FILE);
+			}
+		}
+		
 		Image image = imageTable.get(imageDescriptor);
 		if (image == null) {
 			image = imageDescriptor.createImage();
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/MacroTreeLabelProvider.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/MacroTreeLabelProvider.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/MacroTreeLabelProvider.java	(revision 3084)
@@ -55,39 +55,43 @@
 	
 	
 	private MacroExplorer explorer;
+	
 	private Font font;
-
+	
 	public MacroTreeLabelProvider(MacroExplorer explorer) {
 		this.explorer = explorer;
 		
 		Font font = Display.getCurrent().getSystemFont();
-        FontData fontData = font.getFontData()[0];
+		FontData fontData = font.getFontData()[0];
 		fontData.setStyle(SWT.ITALIC);
-        this.font = new Font(Display.getCurrent(), fontData);
+		this.font = new Font(Display.getCurrent(), fontData);
 	}
 	
 	/** The image table. */
-	private Map<ImageDescriptor, Image> imageTable = new HashMap<ImageDescriptor, Image>(7);
-
-	/* (non-Javadoc)
+	private Map<ImageDescriptor, Image> imageTable = new HashMap<>(7);
+	
+	/*
+	 * (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
 	 */
 	@Override
 	public String getText(Object element) {
-	
+		
 		File f = (File) element;
 		String name = f.getName();
 		if (f.isDirectory()) {
 			return name;
-		} else {
+		}
+		else {
 			int idx = name.indexOf("Macro.groovy"); //$NON-NLS-1$
 			if (idx > 0) return name.substring(0, idx);
 			
 			return name;
 		}
 	}
-
-	/* (non-Javadoc)
+	
+	/*
+	 * (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
 	 */
 	@Override
@@ -96,16 +100,23 @@
 		File f = ((File) element);
 		ImageDescriptor imageDescriptor = null;
 		if (f.isFile()) {
-			if (f.getName().endsWith(".groovy")) {
+			if (f.getName().endsWith("Macro.groovy")) {
 				imageDescriptor = AbstractUIPlugin
-				.imageDescriptorFromPlugin(Application.PLUGIN_ID,
-						IImageKeys.SCRIPT);
-			} else {
+						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
+								IImageKeys.SCRIPT_RUN);
+			}
+			else if (f.getName().endsWith(".groovy")) {
 				imageDescriptor = AbstractUIPlugin
 						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
+								IImageKeys.SCRIPT);
+			}
+			else {
+				imageDescriptor = AbstractUIPlugin
+						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
 								IImageKeys.FILE);
 			}
-		} else if (f.isDirectory()) {
+		}
+		else if (f.isDirectory()) {
 			imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(
 					Application.PLUGIN_ID, IImageKeys.FOLDER);
 		}
@@ -117,19 +128,21 @@
 		}
 		return image;
 	}
-
+	
 	public StyledString getStyledText(Object element) {
 		
-		//if (!explorer.isUserScriptExists(element)) return new StyledString(getText(element), BOLD_FONT_STYLER);
+		// if (!explorer.isUserScriptExists(element)) return new StyledString(getText(element), BOLD_FONT_STYLER);
 		
 		return new StyledString(getText(element));
 	}
 	
 	Styler BOLD_FONT_STYLER = new BoldFontStyler();
-	public class BoldFontStyler extends Styler {                                                                  
-	    @Override
-	    public void applyStyles(final TextStyle textStyle) {
-	        textStyle.font = font;
-	    }
+	
+	public class BoldFontStyler extends Styler {
+		
+		@Override
+		public void applyStyles(final TextStyle textStyle) {
+			textStyle.font = font;
+		}
 	}
 }
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/Explorer.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/Explorer.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/Explorer.java	(revision 3084)
@@ -30,6 +30,7 @@
 import java.io.File;
 import java.util.List;
 
+import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
@@ -47,17 +48,21 @@
 import org.eclipse.swt.layout.FormAttachment;
 import org.eclipse.swt.layout.FormData;
 import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.program.Program;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MessageBox;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.TreeItem;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.ViewPart;
 import org.txm.Toolbox;
-import org.txm.core.preferences.TBXPreferences;
+import org.txm.rcp.IImageKeys;
 import org.txm.rcp.commands.OpenBrowser;
 import org.txm.rcp.commands.OpenGraph;
+import org.txm.rcp.commands.workspace.LoadBinaryCorpus;
 import org.txm.rcp.handlers.files.CopyFile;
 import org.txm.rcp.handlers.files.CutFile;
 import org.txm.rcp.handlers.files.DeleteFile;
@@ -65,42 +70,44 @@
 import org.txm.rcp.handlers.files.PasteFile;
 import org.txm.rcp.handlers.files.RenameFile;
 import org.txm.rcp.messages.TXMUIMessages;
+import org.txm.rcp.swt.GLComposite;
+import org.txm.utils.DeleteDir;
+import org.txm.utils.FileUtils;
 
 /**
  * Simple file explorer
- *  
+ * 
  * @author mdecorde.
  */
 public class Explorer extends ViewPart {
-
+	
 	/** The ID. */
 	static public String ID = "org.txm.rcp.views.fileexplorer.Explorer"; //$NON-NLS-1$
-
+	
 	/** Initialize currentPath with user home directory */
-	private String currentPath = System.getProperty("user.home");//Toolbox.getTxmHomePath();  //$NON-NLS-1$
-
+	private String currentPath = System.getProperty("user.home");// Toolbox.getTxmHomePath(); //$NON-NLS-1$
+	
 	/** The tv. */
 	TreeViewer tv;
-
+	
 	/** The address. */
 	Text address;
-
+	
 	/**
 	 * Instantiates a new explorer.
 	 */
 	public Explorer() {
-
+		
 	}
-
+	
 	/**
 	 * Refresh.
 	 */
-	public static void refresh()
-	{
+	public static void refresh() {
 		Explorer explorerView = (Explorer) PlatformUI.getWorkbench()
 				.getActiveWorkbenchWindow().getActivePage().findView(
 						Explorer.ID);
-
+		
 		explorerView.tv.refresh();
 	}
 	
@@ -113,40 +120,40 @@
 		Explorer explorerView = (Explorer) PlatformUI.getWorkbench()
 				.getActiveWorkbenchWindow().getActivePage().findView(
 						Explorer.ID);
-
+		
 		explorerView.tv.refresh(f);
 	}
-
-	/* (non-Javadoc)
+	
+	/*
+	 * (non-Javadoc)
 	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
 	public void createPartControl(Composite parent) {
-
+		
 		FormLayout formLayout = new FormLayout();
 		formLayout.marginWidth = 0;
 		formLayout.marginHeight = 0;
 		parent.setLayout(formLayout);
-
+		
 		// controles composite
-		Composite controls = new Composite(parent, SWT.NONE);
-
+		GLComposite controls = new GLComposite(parent, SWT.NONE, "buttons");
+		
 		FormData controlsData = new FormData();
 		controlsData.top = new FormAttachment(0);
 		controlsData.left = new FormAttachment(0);
 		controlsData.right = new FormAttachment(100);
 		controls.setLayoutData(controlsData);
-
-		FormLayout controlsLayout = new FormLayout();
-		controlsLayout.marginWidth = 0;
-		controlsLayout.marginHeight = 0;
-		controls.setLayout(controlsLayout);
-
+		
+		controls.getLayout().numColumns = 10;
+		controls.getLayout().horizontalSpacing = 1;
 		// its widgets
 		Button go_up = new Button(controls, SWT.NONE);
+		go_up.setLayoutData(new GridData(GridData.CENTER, GridData.CENTER, false, false));
 		go_up.setText(TXMUIMessages.Explorer_4);
 		go_up.setToolTipText(TXMUIMessages.goToParentFolder);
 		go_up.addSelectionListener(new SelectionAdapter() {
+			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				File f = new File(address.getText()).getParentFile();
@@ -155,13 +162,14 @@
 				}
 			}
 		});
-
+		
 		address = new Text(controls, SWT.BORDER);
-		if (currentPath == null)
-			currentPath = "/"; //$NON-NLS-1$
+		if (currentPath == null) currentPath = "/"; //$NON-NLS-1$
+		address.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
 		address.setText(currentPath);
 		address.setToolTipText(TXMUIMessages.goToTXMHome);
 		address.addKeyListener(new KeyAdapter() {
+			
 			@Override
 			public void keyPressed(KeyEvent e) {
 				if (e.keyCode == SWT.CR) {
@@ -172,11 +180,13 @@
 				}
 			}
 		});
-
+		
 		Button go = new Button(controls, SWT.NONE);
+		go.setLayoutData(new GridData(GridData.CENTER, GridData.CENTER, false, false));
 		go.setText(TXMUIMessages.Explorer_5);
 		go.setToolTipText(TXMUIMessages.common_refresh);
 		go.addSelectionListener(new SelectionAdapter() {
+			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				File f = new File(address.getText());
@@ -187,101 +197,135 @@
 		});
 		
 		Button homeBtn = new Button(controls, SWT.NONE);
+		homeBtn.setLayoutData(new GridData(GridData.CENTER, GridData.CENTER, false, false));
 		homeBtn.setText(TXMUIMessages.Explorer_7);
 		homeBtn.setToolTipText(TXMUIMessages.goToTXMHome_2);
 		homeBtn.addSelectionListener(new SelectionAdapter() {
+			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				currentPath = System.getProperty("user.home"); //$NON-NLS-1$
-				setRoot(currentPath); 
+				setRoot(currentPath);
 			}
 		});
-
-		// set positions & sizes
-		FormData widgetData = new FormData();
-		widgetData.left = new FormAttachment(0);
-		go_up.setLayoutData(widgetData);
-		widgetData = new FormData();
-		widgetData.top = new FormAttachment(0);
-		widgetData.bottom = new FormAttachment(100);
-		widgetData.left = new FormAttachment(go_up, 0);
-		widgetData.right = new FormAttachment(go, 0);
-		address.setLayoutData(widgetData);
-		widgetData = new FormData();
-		widgetData.right = new FormAttachment(homeBtn, 0);
-		go.setLayoutData(widgetData);
-		widgetData = new FormData();
-		widgetData.right = new FormAttachment(100);
-		homeBtn.setLayoutData(widgetData);
-
+		
+		Button txmHomeBtn = new Button(controls, SWT.NONE);
+		txmHomeBtn.setLayoutData(new GridData(GridData.CENTER, GridData.CENTER, false, false));
+		txmHomeBtn.setImage(IImageKeys.getImage(IImageKeys.TXM1616));
+		txmHomeBtn.setToolTipText("Go to TXM home directory");
+		txmHomeBtn.addSelectionListener(new SelectionAdapter() {
+			
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				currentPath = Toolbox.getTxmHomePath();
+				setRoot(currentPath);
+			}
+		});
+		
 		// the explorer
 		tv = new TreeViewer(parent, SWT.VIRTUAL);
 		tv.setContentProvider(new FileTreeContentProvider());
 		tv.setUseHashlookup(true);
 		tv.setLabelProvider(new FileTreeLabelProvider());
 		tv.setInput(new File(currentPath));
-
+		
 		FormData tvData = new FormData();
 		tvData.top = new FormAttachment(controls, 0);
 		tvData.bottom = new FormAttachment(100);
 		tvData.left = new FormAttachment(0);
 		tvData.right = new FormAttachment(100);
 		tv.getTree().setLayoutData(tvData);
-
+		
 		tv.addDoubleClickListener(new IDoubleClickListener() {
+			
 			@Override
 			public void doubleClick(DoubleClickEvent event) {
 				TreeSelection selection = (TreeSelection) tv.getSelection();
 				File selectedItem = (File) selection.getFirstElement();
+				String ext = FileUtils.getExtension(selectedItem).toLowerCase();
 				if (!selectedItem.isDirectory()) {
-					if (selectedItem.getName().endsWith("html")) //$NON-NLS-1$
+					if (ext.endsWith("html") || ext.endsWith("bmp") || ext.endsWith("png") || ext.endsWith("jpg") || ext.endsWith("gif")) //$NON-NLS-1$
 					{
 						OpenBrowser.openfile(selectedItem.getAbsolutePath());
-					} 
-					else if (selectedItem.getName().endsWith("svg")) //$NON-NLS-1$
+					}
+					else if (ext.equals("svg")) //$NON-NLS-1$
 					{
 						OpenGraph.OpenFile(selectedItem.getAbsolutePath());
 					}
-					else
+					else if (ext.equals("txm")) //$NON-NLS-1$
+					{
+						MessageBox dialog = new MessageBox(tv.getTree().getShell(), SWT.YES | SWT.NO);
+						dialog.setMessage(NLS.bind("Load the {0} corpus file ?", selectedItem));
+						
+						int buttonID = dialog.open();
+						switch (buttonID) {
+							case SWT.YES:
+								try {
+									LoadBinaryCorpus.loadBinaryCorpusArchive(selectedItem);
+								}
+								catch (ExecutionException e) {
+									// TODO Auto-generated catch block
+									e.printStackTrace();
+								}
+							case SWT.NO:
+								// exits here ...
+								break;
+							case SWT.CANCEL:
+								// does nothing ...
+						}
+					}
+					else if (ext.equals("pdf") || ext.equals("odt") || ext.startsWith("doc")) //$NON-NLS-1$
+					{
+						Program.launch(selectedItem.getAbsolutePath());
+					}
+					else {
 						EditFile.openfile(selectedItem.getAbsolutePath());
-				} else {
+					}
+				}
+				else {
 					changeState(selection);
 				}
 			}
 		});
-
+		
 		tv.getTree().addKeyListener(new KeyListener() {
-
+			
 			@Override
 			public void keyReleased(KeyEvent e) {
 				// TODO Auto-generated method stub
-
+				
 			}
-
+			
 			@Override
 			public void keyPressed(KeyEvent e) {
 				ISelection sel = tv.getSelection();
 				if (sel instanceof IStructuredSelection) {
-					List objects = ((IStructuredSelection)sel).toList();
+					List objects = ((IStructuredSelection) sel).toList();
 					if (e.keyCode == SWT.DEL) {
 						DeleteFile.delete(objects);
-					} else if (e.keyCode == SWT.F5) {
+					}
+					else if (e.keyCode == SWT.F5) {
 						Explorer.refresh();
-					} else {
+					}
+					else {
 						for (Object o : objects) {
-							//Object o = ((IStructuredSelection)sel).getFirstElement();
+							// Object o = ((IStructuredSelection)sel).getFirstElement();
 							if (o instanceof File) {
 								File file = (File) o;
 								if (e.keyCode == SWT.DEL) {
 									DeleteFile.delete(file);
-								} else if ((char)e.keyCode == 'c' & ((e.stateMask & SWT.CTRL) != 0)) {
+								}
+								else if ((char) e.keyCode == 'c' & ((e.stateMask & SWT.CTRL) != 0)) {
 									CopyFile.copy(file);
-								} else if ((char)e.keyCode == 'x' & ((e.stateMask & SWT.CTRL) != 0)) {
+								}
+								else if ((char) e.keyCode == 'x' & ((e.stateMask & SWT.CTRL) != 0)) {
 									CutFile.cut(file);
-								} else if ((char)e.keyCode == 'v' & ((e.stateMask & SWT.CTRL) != 0)) {
+								}
+								else if ((char) e.keyCode == 'v' & ((e.stateMask & SWT.CTRL) != 0)) {
 									if (file.isFile()) file = file.getParentFile();
 									PasteFile.paste(file);
-								} else if (e.keyCode == SWT.F2) {
+								}
+								else if (e.keyCode == SWT.F2) {
 									RenameFile.rename(file);
 								}
 							}
@@ -291,17 +335,17 @@
 				}
 			}
 		});
-
+		
 		MenuManager menuManager = new MenuManager();
 		Menu menu = menuManager.createContextMenu(tv.getTree());
-
+		
 		// Set the MenuManager
 		tv.getTree().setMenu(menu);
 		getSite().registerContextMenu(menuManager, tv);
 		// Make the selection available
 		getSite().setSelectionProvider(tv);
 	}
-
+	
 	/**
 	 * Can delete.
 	 *
@@ -312,25 +356,24 @@
 		File txmhome = new File(Toolbox.getTxmHomePath());
 		File scripts = new File(Toolbox.getTxmHomePath(), "scripts"); //$NON-NLS-1$
 		File corpora = new File(Toolbox.getTxmHomePath(), "corpora"); //$NON-NLS-1$
-		//File registry = new File(Toolbox.getTxmHomePath(), "registry"); //$NON-NLS-1$
+		// File registry = new File(Toolbox.getTxmHomePath(), "registry"); //$NON-NLS-1$
 		File workspaces = new File(Toolbox.getTxmHomePath(), "workspaces"); //$NON-NLS-1$
 		File xsl = new File(Toolbox.getTxmHomePath(), "xsl"); //$NON-NLS-1$
 		File samples = new File(Toolbox.getTxmHomePath(), "samples"); //$NON-NLS-1$
-		if (selectedItem.equals(txmhome) || 
+		if (selectedItem.equals(txmhome) ||
 				selectedItem.equals(txmhome) ||
 				selectedItem.equals(scripts) ||
 				selectedItem.equals(corpora) ||
-				//selectedItem.equals(registry) ||
+				// selectedItem.equals(registry) ||
 				selectedItem.equals(workspaces) ||
 				selectedItem.equals(samples) ||
-				selectedItem.equals(xsl))
-		{
+				selectedItem.equals(xsl)) {
 			System.out.println(NLS.bind(TXMUIMessages.folderP0ShouldNotBeDeleted, selectedItem));
 			return false;
 		}
 		return false;
 	}
-
+	
 	/**
 	 * Change state.
 	 *
@@ -339,18 +382,16 @@
 	protected void changeState(TreeSelection selection) {
 		TreeItem[] items = tv.getTree().getSelection();
 		for (TreeItem item : items) {
-			if (item.getExpanded())
-			{
-				item.setExpanded(false);	
+			if (item.getExpanded()) {
+				item.setExpanded(false);
 			}
-			else
-			{
+			else {
 				item.setExpanded(true);
 			}
 			tv.refresh();
-		}	
+		}
 	}
-
+	
 	/**
 	 * Sets the root.
 	 *
@@ -362,7 +403,7 @@
 		tv.setInput(new File(home));
 		tv.refresh();
 	}
-
+	
 	/**
 	 * Sets the root.
 	 *
@@ -374,14 +415,15 @@
 		tv.setInput(new File(currentPath));
 		tv.refresh();
 	}
-
-	/* (non-Javadoc)
+	
+	/*
+	 * (non-Javadoc)
 	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
 	 */
 	@Override
 	public void setFocus() {
 		// TODO Auto-generated method stub
-
+		
 	}
-
-}
\ No newline at end of file
+	
+}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/handlers/files/DeleteFile.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/handlers/files/DeleteFile.java	(revision 3083)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/handlers/files/DeleteFile.java	(revision 3084)
@@ -82,7 +82,7 @@
 		
 		Shell shell = new Shell();
 		MessageBox dialog = new MessageBox(shell, SWT.YES | SWT.NO);
-		dialog.setMessage(TXMUIMessages.areYouSureYouWantToDeleteP0Colon + file + " ? ");  //$NON-NLS-1$
+		dialog.setMessage(TXMUIMessages.bind(TXMUIMessages.areYouSureYouWantToDeleteP0Colon, file));
 		
 		int buttonID = dialog.open();
 		switch (buttonID) {
@@ -112,7 +112,7 @@
 	public static void delete(List files) {
 		Shell shell = new Shell();
 		MessageBox dialog = new MessageBox(shell, SWT.YES | SWT.NO);
-		dialog.setMessage(TXMUIMessages.areYouSureYouWantToDeleteP0Colon + files + " ? ");  //$NON-NLS-1$
+		dialog.setMessage(TXMUIMessages.bind(TXMUIMessages.areYouSureYouWantToDeleteP0Colon, files));
 		
 		int buttonID = dialog.open();
 		switch (buttonID) {
