Index: tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 1428)
+++ tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 1429)
@@ -10,7 +10,6 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
-import java.util.TreeSet;
 import java.util.concurrent.Semaphore;
 import java.util.regex.Pattern;
 
@@ -39,20 +38,15 @@
  * 
  * A TXMResult always have a parent (except the root: @see Workspace).
  * 
- * To compute a result simply call the {@link #compute()} method. It contains
- * all the life cycle steps of the result.
+ * To compute a result simply call the {@link #compute()} method. It contains all the life cycle steps of the result.
  * 
- * To set parameters, you can alternatively call the {@link #setParameters()}
- * methods or the setXXX methods. The setParameters methods are usually useful
- * to transfer several parameters at once.
+ * To set parameters, you can alternatively call the {@link #setParameters()} methods or the setXXX methods. The setParameters methods are usually useful to transfer several parameters at once.
  * 
- * The class contains convenient methods to maintain the same logic between
- * results : - canCompute() : test if all necessary parameters are set -
- * isDirty(): return true if the result needs to be recomputed (if a parameter
- * changed)
+ * The class contains convenient methods to maintain the same logic between results :
+ * - canCompute() : test if all necessary parameters are set
+ * - isDirty(): return true if the result needs to be recomputed (if a parameter changed)
  * 
  * Groovy call sample :
- * 
  * <pre>
  * {@code
  * MyTXMResult result = new MyTXMResult(parent);
@@ -65,7 +59,6 @@
  * </pre>
  * 
  * @author mdecorde
- * 
  * @author sjacquot
  */
 public abstract class TXMResult implements Cloneable, IProgressMonitor, Comparable<TXMResult> {
@@ -76,12 +69,13 @@
 	public static final String UNDERSCORE = "_";
 
 	private static int next = 0;
-	//TreeSet<TXMResultListener> listeners = new TreeSet<>();
+	
 
-	// /**
-	// * Unique ID of the result.
-	// */
-	// protected String uniqueID;
+	
+//	/**
+//	 * Unique ID of the result.
+//	 */
+//	protected String uniqueID;
 
 	/**
 	 * Editor can use this to test if the result has been computed once.
@@ -94,19 +88,18 @@
 	protected int weight;
 
 	/**
-	 * the command this command to true when the result needs to be recomputed. like
-	 * after updating parameters
+	 * the command this command to true when the result needs to be recomputed.
+	 * like after updating parameters
 	 */
 	protected boolean dirty = true;
-
+	
 	/**
 	 * if frozen, the result is not updated when computed
 	 */
 	protected boolean frozen = false;
-
+	
 	/**
-	 * if a method changed the internal data without **recomputing** the result, the
-	 * result must be marked "altered"
+	 * if a method changed the internal data without **recomputing** the result, the result must be marked "altered"
 	 */
 	protected boolean altered = false;
 
@@ -124,12 +117,10 @@
 	 * Command preferences node path.
 	 */
 	protected String commandPreferencesNodePath;
-	// protected IEclipsePreferences preferencesNode; // TODO: directly use a
-	// preferences node rather than a node path?
+	//protected IEclipsePreferences preferencesNode; // TODO: directly use a preferences node rather than a node path?
 
 	/**
-	 * Parameters node path. Concatenation of the Project scope path + the result
-	 * uuid
+	 * Parameters node path. Concatenation of the Project scope path + the result uuid
 	 */
 	protected String parametersNodePath;
 
@@ -144,18 +135,14 @@
 	private Semaphore progressSemaphore = new Semaphore(1);
 
 	/**
-	 * To keep track of the parameters used for the last computing and to determine
-	 * if the result is dirty.
+	 * To keep track of the parameters used for the last computing and to determine if the result is dirty. 
 	 */
-	// FIXME: SJ: actually only used by the chart results. Purpose here is that the
-	// chart creators need to know if a computing parameter has changed to recreate
-	// or not some entity.
-	// The problem is since the result is already computing, the parameters are
-	// already updated and the method hasParameterChanged() will always return
-	// false. Using this stack fix the problem.
+	// FIXME: SJ: actually only used by the chart results. Purpose here is that the chart creators need to know if a computing parameter has changed to recreate or not some entity.
+	// The problem is since the result is already computing, the parameters are already updated and the method hasParameterChanged() will always return false. Using this stack fix the problem.
 	// But this stack is also the start for an UNDO command on TXMResult.
 	protected ArrayList<HashMap<String, Object>> parametersHistory = new ArrayList<HashMap<String, Object>>();
 
+	
 	/**
 	 * Internal persistable state.
 	 */
@@ -169,26 +156,28 @@
 	/**
 	 * The visibility state.
 	 */
-	@Parameter(key = TXMPreferences.VISIBLE, type = Parameter.INTERNAL)
+	@Parameter(key=TXMPreferences.VISIBLE, type=Parameter.INTERNAL)
 	private Boolean visible;
 
 	/**
 	 * The user name (to rename a result).
 	 */
-	@Parameter(key = TXMPreferences.USER_NAME, type = Parameter.INTERNAL)
+	@Parameter(key=TXMPreferences.USER_NAME, type=Parameter.INTERNAL)
 	protected String userName;
 
 	/**
-	 * To store the simple name for unserialization and lazy loading. This string
-	 * can be used, for example, to display some infos in UI even if the result has
-	 * not yet been recomputed.
+	 *  To store the simple name for unserialization and lazy loading.
+	 *  This string can be used, for example, to display some infos in UI even if the result has not yet been recomputed.
 	 */
-	@Parameter(key = TXMPreferences.LAZY_NAME, type = Parameter.INTERNAL)
+	@Parameter(key=TXMPreferences.LAZY_NAME, type=Parameter.INTERNAL)
 	private String lazyName;
 
+
+
+
+
 	/**
 	 * Creates a new TXMResult, child of the specified parent.
-	 * 
 	 * @param parent
 	 */
 	public TXMResult(TXMResult parent) {
@@ -196,10 +185,8 @@
 	}
 
 	/**
-	 * Creates a new TXMResult with no parent. If a local node exist with the
-	 * parent_uuid, the parent will be retrieved and this result will be added to
-	 * it.
-	 * 
+	 * Creates a new TXMResult with no parent.
+	 * If a local node exist with the parent_uuid, the parent will be retrieved and this result will be added to it. 
 	 * @param uuid
 	 */
 	public TXMResult(String parametersNodePath) {
@@ -207,9 +194,8 @@
 	}
 
 	/**
-	 * Creates a new TXMResult, child of the specified parent. If the parameters
-	 * node path is null, a new path is generated from the project root path ending
-	 * by a new generated UUID.
+	 * Creates a new TXMResult, child of the specified parent.
+	 * If the parameters node path is null, a new path is generated from the project root path ending by a new generated UUID.
 	 * 
 	 * @param uuid
 	 * @param parent
@@ -222,14 +208,15 @@
 			parent.addChild(this);
 		}
 
-		if (parametersNodePath == null) {
-			if (this.getProject() != null) {
+		if (parametersNodePath == null)	{
+			if (this.getProject() != null)	{
 				parametersNodePath = this.getProject().getParametersNodeRootPath();
 			} else {
 				parametersNodePath = "";
 			}
-			this.parametersNodePath = parametersNodePath + createUUID() + "_" + this.getClass().getSimpleName(); //$NON-NLS-1$ ;
-		} else {
+			this.parametersNodePath = parametersNodePath + createUUID() + "_" + this.getClass().getSimpleName(); //$NON-NLS-1$;
+		}
+		else	{
 			this.parametersNodePath = parametersNodePath;
 		}
 
@@ -238,56 +225,60 @@
 		this.weight = 0;
 
 		this.children = new ArrayList<TXMResult>(1);
-		// this.children = Collections.synchronizedList(new ArrayList<TXMResult>()); //
-		// FIXME: SJ: can fix the conccurent excpetion if needed
+		//this.children = Collections.synchronizedList(new ArrayList<TXMResult>()); // FIXME: SJ: can fix the conccurent excpetion if needed
 
-		this.commandPreferencesNodePath = FrameworkUtil.getBundle(getClass()).getSymbolicName(); // $NON-NLS-1$
+		this.commandPreferencesNodePath = FrameworkUtil.getBundle(getClass()).getSymbolicName(); //$NON-NLS-1$
 		Log.finest("TXMResult.TXMResult(): command preferences node path: " + this.commandPreferencesNodePath + "."); //$NON-NLS-1$ //$NON-NLS-2$
 
+
 		this.visible = true;
 		this.dirty = true;
 		this.internalPersistable = false;
 		this.userPersistable = TBXPreferences.getInstance().getBoolean(TBXPreferences.AUTO_PERSISTENCE_ENABLED);
 
+
 		// retrieving parent from UUID
 		String parentNodePath = this.getStringParameterValue(TXMPreferences.PARENT_PARAMETERS_NODE_PATH);
 
-		// System.out.println("TXMResult.TXMResult(): parent UUID = " + parentUUID);
+		//System.out.println("TXMResult.TXMResult(): parent UUID = " + parentUUID);
 
 		if (!("ROOT".equals(this.parametersNodePath)) && // search for parent only if UUID != "ROOT"
-				parent == null && this.parametersNodePath != null && !parentNodePath.isEmpty()) {
+				parent == null && 
+				this.parametersNodePath != null && 
+				!parentNodePath.isEmpty()) {
 			Log.finest("Searching parent with UUID: " + parentNodePath + "..."); //$NON-NLS-1$ //$NON-NLS-2$
 			TXMResult retrievedParent = TXMResult.getResult(parentNodePath);
 			if (retrievedParent != null) {
 				Log.finest("Parent retrieved from UUID: " + retrievedParent + "."); //$NON-NLS-1$ //$NON-NLS-2$
 				retrievedParent.addChild(this);
-			} else {
+			}
+			else {
 				Log.severe("Warning: no parent was found in project for path=" + parametersNodePath + " and puuid=" + parentNodePath + " preferences=" + this.dumpParameters()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				// FIXME: commented for now
-				// TBXPreferences.delete(this);
+				//TBXPreferences.delete(this);
 				return;
 			}
 		}
 
-		// loads parameters from local result node, current command preferences or
-		// default command preferences
+		// loads parameters from local result node, current command preferences or default command preferences
 		try {
 			this.autoLoadParametersFromAnnotations(); // auto fill from Parameter annotations
-			this.loadParameters(); // subclasses manual settings
+			this.loadParameters();  // subclasses manual settings
 		} catch (Exception e) {
 			Log.severe("Fail to load " + parametersNodePath + "result: " + e); //$NON-NLS-1$ //$NON-NLS-2$
 			Log.printStackTrace(e);
 		}
 
 		// Log
-		if (this.parent == null) {
+		if (this.parent == null)	{
 			Log.finest("Warning: the TXMResult of " + this.getClass() + " is attached to no parent. (uuid = " + this.parametersNodePath + ")");//$NON-NLS-1$ //$NON-NLS-2$
 		}
 
 		try {
 			this.parametersHistory.add(new HashMap<String, Object>());
-			// this.updateLastParameters();
-		} catch (Exception e) {
+			//this.updateLastParameters();
+		}
+		catch (Exception e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
@@ -295,7 +286,6 @@
 
 	/**
 	 * Sets the user name.
-	 * 
 	 * @param name
 	 */
 	public void setUserName(String name) {
@@ -308,26 +298,21 @@
 	public boolean isAltered() {
 		return altered;
 	}
-
+	
 	/**
 	 * Mark the result as altered -> modifications are lost after a re-compute
-	 * 
-	 * children are marked dirty since data has been modified
 	 */
 	public void setAltered() {
 		this.altered = true;
-		for (TXMResult r : getChildren()) {
-			r.setDirty();
-		}
 	}
-
+	
 	/**
 	 * Freezes the result -> cannot be recomputed.
 	 */
 	public void freeze() {
 		this.frozen = true;
 	}
-
+	
 	/**
 	 * Unfreezes the result -> can be recomputed.
 	 */
@@ -341,27 +326,24 @@
 	public void setFrozen(boolean frozen) {
 		this.frozen = frozen;
 	}
-
+	
 	/**
 	 * @return true if the resutl is frozen
 	 */
 	public boolean isFrozen() {
 		return this.frozen;
 	}
-
+	
 	/**
 	 * Creates an UUID dedicated to persistence of this result.
-	 * 
 	 * @return
 	 */
 	public static String createUUID() {
-		// FIXME: see if it's useful to put the class name or not, should be better to
-		// save it in the .prefs
-		// this.uniqueID = this.getClass().getName() + '@' + ID_TIME_FORMAT.format(new
-		// Date(System.currentTimeMillis())) + "_" + UUID.randomUUID();
+		// FIXME: see if it's useful to put the class name or not, should be better to save it in the .prefs
+		//this.uniqueID = this.getClass().getName() + '@' + ID_TIME_FORMAT.format(new Date(System.currentTimeMillis())) + "_" + UUID.randomUUID();
 		return UUID_PREFIX + ID_TIME_FORMAT.format(new Date(System.currentTimeMillis())) + "_" + nextInt();
 	}
-
+	
 	/**
 	 * 
 	 * @return the next integer in the current session of TXM
@@ -372,13 +354,13 @@
 
 	/**
 	 * Checks if the result at least one child.
-	 * 
 	 * @return
 	 */
 	public boolean hasChildren() {
 		return this.children.size() > 0;
 	}
 
+
 	/**
 	 * Gets the preferences node path of the result command.
 	 * 
@@ -388,6 +370,7 @@
 		return this.commandPreferencesNodePath;
 	}
 
+
 	public String[] getCommandPreferencesKeys() throws BackingStoreException {
 		return TXMPreferences.getCommandScopeKeys(this.commandPreferencesNodePath);
 	}
@@ -397,9 +380,7 @@
 	}
 
 	/**
-	 * Gets a current parameter specified by its annotation "key" attribute and its
-	 * annotation "type" attribute.
-	 * 
+	 * Gets a current parameter specified by its annotation "key" attribute and its annotation "type" attribute.
 	 * @param key
 	 * @param parameterType
 	 * @return
@@ -409,21 +390,18 @@
 	}
 
 	/**
-	 * Gets a current parameter specified by its annotation "key" attribute and its
-	 * annotation "type" attribute.
-	 * 
+	 * Gets a current parameter specified by its annotation "key" attribute and its annotation "type" attribute.
 	 * @param key
-	 * @param propagateToParent
-	 *            if true ask the parents
+	 * @param propagateToParent if true ask the parents
 	 * @param parameterType
 	 * @return
 	 */
 	public Object getParameter(String key, boolean propagateToParent) {
 		try {
-			Field field = this.getField(key);
-			if (field != null) {
+			Field field = this.getField(key); 
+			if (field != null)	{
 				field.setAccessible(true);
-				return field.get(this);
+				return field.get(this);	
 			} else if (propagateToParent && this.parent != null) {
 				return this.parent.getParameter(key, propagateToParent);
 			}
@@ -433,15 +411,15 @@
 		return null;
 	}
 
+
 	/**
 	 * Gets a member field according to its key.
-	 * 
 	 * @param key
 	 * @return the field if exists otherwise null
 	 */
-	public Field getField(String key) {
+	public Field getField(String key)	{
 
-		Field field = null;
+		Field field = null; 
 
 		List<Field> fields = this.getAllFields();
 
@@ -458,10 +436,9 @@
 
 	/**
 	 * Returns all the member fields of the class instance.
-	 * 
 	 * @return the list of declared fields
 	 */
-	public List<Field> getAllFields() {
+	public List<Field> getAllFields()	{
 
 		List<Field> fields = new ArrayList<Field>();
 		Class<?> clazz = this.getClass();
@@ -476,16 +453,15 @@
 
 	/**
 	 * Stores the parameters of the specified type used for last computing.
-	 * 
 	 * @throws Exception
 	 */
 	protected void updateLastParameters(int parameterType) throws Exception {
 		this.updateLastParameters(parameterType, false);
 	}
 
+
 	/**
 	 * Stores the parameters of the specified type used for last computing.
-	 * 
 	 * @param parameterType
 	 * @param appendToLastParameters
 	 * @throws Exception
@@ -494,9 +470,10 @@
 
 		HashMap<String, Object> lastParameters;
 
-		if (appendToLastParameters) {
+		if(appendToLastParameters)	{
 			lastParameters = this.getLastParametersFromHistory();
-		} else {
+		}
+		else	{
 			lastParameters = new HashMap<>();
 		}
 
@@ -509,9 +486,10 @@
 			}
 
 			String name;
-			if (!parameter.key().isEmpty()) {
+			if(!parameter.key().isEmpty())	{
 				name = parameter.key();
-			} else {
+			}
+			else	{
 				name = f.getName();
 			}
 
@@ -519,13 +497,13 @@
 			lastParameters.put(name, f.get(this));
 		}
 
-		if (!appendToLastParameters) {
+		if(!appendToLastParameters)	{
 			this.parametersHistory.add(lastParameters);
 		}
 
 		// truncate the stack to the max count
 		// FIXME: store this in a TBX preference
-		if (this.parametersHistory.size() > 5) {
+		if(this.parametersHistory.size() > 5)	{
 			this.parametersHistory.remove(0);
 			this.parametersHistory.remove(0);
 			this.parametersHistory.remove(0);
@@ -535,13 +513,13 @@
 
 	/**
 	 * Stores the last parameters used for computing.
-	 * 
 	 * @throws Exception
 	 */
 	protected void updateLastParameters() throws Exception {
 		this.updateLastParameters(Parameter.COMPUTING);
 	}
 
+
 	/**
 	 * 
 	 * @param parameterType
@@ -557,9 +535,10 @@
 			}
 
 			String name;
-			if (!parameter.key().isEmpty()) {
+			if(!parameter.key().isEmpty())	{
 				name = parameter.key();
-			} else {
+			}
+			else	{
 				name = f.getName();
 			}
 
@@ -567,42 +546,41 @@
 			this.getLastParametersFromHistory().remove(name);
 		}
 
-		if (this.getLastParametersFromHistory().isEmpty()) {
+		if(this.getLastParametersFromHistory().isEmpty())	{
 			this.parametersHistory.remove(this.parametersHistory.size() - 1);
 		}
 	}
 
+
 	/**
-	 * Clears the parameters used for last computing. Dedicated to force a full
-	 * recomputing.
-	 * 
+	 * Clears the parameters used for last computing.
+	 * Dedicated to force a full recomputing.
 	 * @throws Exception
 	 */
 	protected void clearLastComputingParameters() {
 		this.clearLastParameters(Parameter.COMPUTING);
 	}
 
+
 	/**
-	 * Checks if a parameter value has changed since the n-2 computing. This method
-	 * permits to know, for example, if a parent that has already been computed was
-	 * dirty before its computing, then a child can adjust or not its computing,
-	 * regarding to the parent state.
-	 * 
+	 * Checks if a parameter value has changed since the n-2 computing.
+	 * This method permits to know, for example, if a parent that has already been computed was dirty before its computing,
+	 * then a child can adjust or not its computing, regarding to the parent state.
 	 * @param key
 	 * @param older
 	 * @return
 	 */
 	public boolean hasParameterChanged(String key, boolean older) {
-		if (older) {
-			return this.hasParameterChanged(key, this.parametersHistory.get(this.parametersHistory.size() - 2));
-		} else {
+		if(older)	{
+			return this.hasParameterChanged(key, this.parametersHistory.get(this.parametersHistory.size() - 2));	
+		}
+		else	{
 			return this.hasParameterChanged(key);
 		}
 	}
 
 	/**
 	 * Checks if a parameter value has changed since last computing.
-	 * 
 	 * @param key
 	 * @param parameterType
 	 * @return
@@ -612,9 +590,7 @@
 	}
 
 	/**
-	 * Checks if a parameter value has changed since last computing according to the
-	 * specified external map.
-	 * 
+	 * Checks if a parameter value has changed since last computing according to the specified external map.
 	 * @param key
 	 * @param lastParameters
 	 * @return
@@ -623,34 +599,36 @@
 		if (key.isEmpty()) {
 			return false;
 		}
-		// if (this.isDirty()) {
-		// return true;
-		// }
+		//		if (this.isDirty()) {
+		//			return true;
+		//		}
 
 		Object lastValue = lastParameters.get(key);
 		Object newValue = this.getParameter(key);
 		if (lastValue == null) {
-			if (newValue != null) {
+			if(newValue != null)	{
 				return true;
-			} else {
+			}
+			else	{
 				return false;
 			}
-		} else {
+		}
+		else {
 			return !lastValue.equals(newValue);
 		}
 	}
 
+
+
 	/**
-	 * Dumps the command and default preferences of the result preferences node
-	 * qualifier.
-	 * 
+	 * Dumps the command and default preferences of the result preferences node qualifier.
 	 * @return
 	 */
-	public String dumpPreferences() {
+	public String dumpPreferences()	{
 
 		StringBuilder str = new StringBuilder();
 
-		if (TXMPreferences.resultScopeNodeExists(this)) {
+		if(TXMPreferences.resultScopeNodeExists(this))	{
 			str.append("\nResult local node preferences\n"); //$NON-NLS-1$
 			str.append(TXMPreferences.getKeysAndValues(this.getParametersNodePath()));
 		}
@@ -664,22 +642,22 @@
 		return str.toString();
 	}
 
+
 	/**
 	 * Dumps the result computing parameters (Parameter annotation).
-	 * 
 	 * @return
 	 */
-	public String dumpParameters() {
+	public String dumpParameters()	{
 		return this.dumpParameters(Parameter.COMPUTING);
 	}
 
+
 	/**
 	 * Dumps the result computing parameters (Parameter annotation).
-	 * 
 	 * @param parametersType
 	 * @return
 	 */
-	public String dumpParameters(int parametersType) {
+	public String dumpParameters(int parametersType)	{
 
 		StringBuilder str = new StringBuilder();
 
@@ -695,23 +673,26 @@
 			f.setAccessible(true);
 
 			String name;
-			if (!parameter.key().isEmpty()) {
+			if(!parameter.key().isEmpty())	{
 				name = parameter.key();
-			} else {
+			}
+			else	{
 				name = f.getName();
 			}
 
 			try {
 				Object v = f.get(this);
 				if (v != null) {
-					str.append(name + " (" + v.getClass().getSimpleName() + ") = " + v + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+					str.append(name + " ("+ v.getClass().getSimpleName() + ") = " + v + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 				} else {
 					str.append(name + " = NULL \n"); //$NON-NLS-1$ //$NON-NLS-2$
 				}
-			} catch (IllegalArgumentException e) {
+			}
+			catch (IllegalArgumentException e) {
 				// TODO Auto-generated catch block
 				e.printStackTrace();
-			} catch (IllegalAccessException e) {
+			}
+			catch (IllegalAccessException e) {
 				// TODO Auto-generated catch block
 				e.printStackTrace();
 			}
@@ -719,58 +700,57 @@
 		return str.toString();
 	}
 
+
+
 	/**
 	 * Updates the dirty state by comparing an old parameter with a new one.
 	 * 
-	 * @param lastValue
-	 *            may be null
-	 * @param newValue
-	 *            may be null
+	 * @param lastValue may be null
+	 * @param newValue may be null
 	 */
 	protected void updateDirty(Object lastValue, Object newValue) {
-		if (lastValue == null && newValue == null) {
+		if(lastValue == null && newValue == null)	{
 			return;
 		}
 		if (lastValue == null || !lastValue.equals(newValue)) {
-			Log.info("TXMResult.updateDirty(): " + this.getClass().getSimpleName() + ": setting dirty to true: last = " + lastValue + " / new = " + newValue);
+			Log.info("TXMResult.updateDirty(): " + this.getClass().getSimpleName() + ": setting dirty to true: last = "+ lastValue + " / new = " + newValue);
 			this.setDirty();
 		}
 	}
 
 	/**
-	 * Updates the dirty states by comparing TXMResult @Parameter with previously
-	 * used parameters in the compute() method.
+	 * Updates the dirty states by comparing TXMResult @Parameter with previously used parameters in the compute() method.
 	 * 
-	 * To work correctly : - the equals method of the TXMResult parameters must be
-	 * correctly implemented. - the @Parameter member must be another variable (the
-	 * previous is stored in the lastParameters protected variable) (e.g editing a
-	 * List @Parameter is not enough for this test)
+	 * To work correctly :
+	 *  - the equals method of the TXMResult parameters must be correctly implemented.
+	 *  - the @Parameter member must be another variable (the previous is stored in the lastParameters protected variable) (e.g editing a List @Parameter is not enough for this test)
 	 * 
-	 * The method is final and don't need to be re-implemented. To ignore this
-	 * method, don't use the @Parameter annotations
+	 * The method is final and don't need to be re-implemented. To ignore this method, don't use the @Parameter annotations
 	 * 
 	 * Implement isDirty if you need more test
 	 * 
 	 * @return
-	 * @throws IllegalAccessException
-	 * @throws IllegalArgumentException
+	 * @throws IllegalAccessException 
+	 * @throws IllegalArgumentException 
 	 */
 	public final boolean isDirtyFromHistory() throws Exception {
 
 		List<Field> fields = this.getAllFields();
-
+		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
-			if (parameter == null || parameter.type() != Parameter.COMPUTING
-			// FIXME: non electric mode tests
-			// || parameter.electric() == false
-			) {
+			if (parameter == null
+					|| parameter.type() != Parameter.COMPUTING
+					// FIXME: non electric mode tests
+					//|| parameter.electric() == false 
+					) {
 				continue;
 			}
 			String name;
-			if (!parameter.key().isEmpty()) {
+			if (!parameter.key().isEmpty())	{
 				name = parameter.key();
-			} else {
+			}
+			else {
 				name = f.getName();
 			}
 
@@ -779,8 +759,8 @@
 			Object previousValue = this.getLastParametersFromHistory().get(name);
 			Object newValue = f.get(this);
 
-			// // FIXME: debug
-			// Log.finest("TXMResult.isDirtyFromHistory(): checking parameter: " + name);
+			//			// FIXME: debug
+			//			Log.finest("TXMResult.isDirtyFromHistory(): checking parameter: " + name);
 
 			this.updateDirty(previousValue, newValue);
 			if (this.dirty) {
@@ -791,7 +771,8 @@
 		return this.dirty;
 	}
 
-	public HashMap<String, Object> getLastParametersFromHistory() {
+
+	public HashMap<String, Object> getLastParametersFromHistory()	{
 		return this.parametersHistory.get(this.parametersHistory.size() - 1);
 	}
 
@@ -805,19 +786,16 @@
 	}
 
 	/**
-	 * Marks the result as dirty so editors or others will know the TXMResult needs
-	 * to be recomputed. This method is also recursively called on all the children
-	 * branch to mark them as dirty.
+	 * Marks the result as dirty so editors or others will know the TXMResult needs to be recomputed.
+	 * This method is also recursively called on all the children branch to mark them as dirty.
 	 */
 	public void setDirty() {
 		this.setDirty(true);
 	}
 
 	/**
-	 * Sets the result dirty state so editors or others will know the TXMResult
-	 * needs to be recomputed or not. This method is also recursively called on all
-	 * the children branch sets the new dirty state.
-	 * 
+	 *  Sets the result dirty state so editors or others will know the TXMResult needs to be recomputed or not.
+	 *  This method is also recursively called on all the children branch sets the new dirty state.
 	 * @param dirty
 	 */
 	public void setDirty(boolean dirty) {
@@ -826,6 +804,7 @@
 			this.children.get(i).setDirty(dirty);
 		}
 	}
+	
 
 	/**
 	 * Gets the value of the specified key in parameters, local result node or
@@ -893,33 +872,31 @@
 		return TXMPreferences.getString(key, this, this.commandPreferencesNodePath);
 	}
 
+
 	/**
 	 * Checks if the specified parameter exists.
-	 * 
 	 * @param key
 	 * @return
 	 */
-	public boolean parameterExists(String key) {
+	public boolean parameterExists(String key)	{
 		return TXMPreferences.keyExists(this.parametersNodePath, key);
 	}
 
 	/**
-	 * Checks if a preference is empty (equals to "") in the command preference
-	 * node. An empty preference can be used to disable a functionality for a kind
-	 * of result (eg. A partition dimension bar chart does not have a legend so it
-	 * can be used to not offer the hide/show legend button in UI).
-	 * 
+	 * Checks if a preference is empty (equals to "") in the command preference node.
+	 * An empty preference can be used to disable a functionality for a kind of result
+	 * (eg. A partition dimension bar chart does not have a legend so it can be used to not offer the hide/show legend button in UI).
 	 * @param key
 	 * @return
 	 */
-	public boolean isEmptyPreference(String key) {
+	public boolean isEmptyPreference(String key)	{
 		return TXMPreferences.isEmpty(this.commandPreferencesNodePath, key);
 	}
 
+
+
 	/**
-	 * Stores the specified parameters pairs of key/value in a local node dedicated
-	 * to the specified result. The node qualifier is generated by the
-	 * <code>TXMResult.getUUID</code> method.
+	 * Stores the specified parameters pairs of key/value in a local node dedicated to the specified result. The node qualifier is generated by the <code>TXMResult.getUUID</code> method.
 	 * 
 	 * @param key
 	 * @return
@@ -928,29 +905,24 @@
 		this.saveParameter(key, StringUtils.join(values, UNDERSCORE));
 	}
 
+
 	/**
-	 * Stores the specified parameters pairs of key/value in a local node dedicated
-	 * to the specified result. The node qualifier is generated by the
-	 * <code>TXMResult.getUUID</code> method.
-	 * 
+	 * Stores the specified parameters pairs of key/value in a local node dedicated to the specified result. The node qualifier is generated by the <code>TXMResult.getUUID</code> method.
 	 * @param result
 	 * @param key
 	 * @param value
 	 */
-	public void saveParameter(String key, Object value) {
+	public void saveParameter(String key, Object value)	{
 		// FIXME: debug
-		// Log.info("TXMResult.saveParameter(): saving parameter " + key + " = " + value
-		// + " for " + this.getClass() + " (" + value.getClass() + ") to node.");
+		//Log.info("TXMResult.saveParameter(): saving parameter " + key + " = " + value + " for " + this.getClass() + " (" + value.getClass() + ") to node.");
 
 		TXMPreferences.putLocal(this, key, value);
 	}
 
+
 	/**
-	 * Stores the result parameter fields declared by their @Parameter annotation in
-	 * the persisted result node preferences. One have to implement saveParameters()
-	 * to save parameters that are not of primitive types (e.g. Property, List,
-	 * HashMap...)
-	 * 
+	 * Stores the result parameter fields declared by their @Parameter annotation in the persisted result node preferences.
+	 * One have to implement saveParameters() to save parameters that are not of primitive types (e.g. Property, List, HashMap...)
 	 * @return
 	 * @throws Exception
 	 */
@@ -962,19 +934,19 @@
 		this.saveParameter("class", this.getClass().getName()); //$NON-NLS-1$
 
 		this.saveParameter(TXMPreferences.RESULT_PARAMETERS_NODE_PATH, this.parametersNodePath);
-
-		// FIXME: old version that not work well if a bundle has no preference
-		// initializer
-		// this.saveParameter(TXMPreferences.BUNDLE_ID,
-		// this.commandPreferencesNodePath);
+		
+		// FIXME: old version that not work well if a bundle has no preference initializer
+		//this.saveParameter(TXMPreferences.BUNDLE_ID, this.commandPreferencesNodePath);
 		// FIXME: new version
 		this.saveParameter(TXMPreferences.BUNDLE_ID, FrameworkUtil.getBundle(getClass()).getSymbolicName());
-
-		if (this.parent != null) {
+		
+		
+		
+		if (this.parent != null)	{
 			this.saveParameter(TXMPreferences.PARENT_PARAMETERS_NODE_PATH, this.parent.getParametersNodePath());
 		}
 
-		if (this.hasBeenComputedOnce) {
+		if(this.hasBeenComputedOnce)	{
 			this.lazyName = this.getSimpleName();
 		}
 
@@ -990,16 +962,19 @@
 				continue; // no preference key defined
 			}
 
-			if (f.getType().isAssignableFrom(int.class) || f.getType().isAssignableFrom(Integer.class) || f.getType().isAssignableFrom(double.class) || f.getType().isAssignableFrom(Double.class)
-					|| f.getType().isAssignableFrom(float.class) || f.getType().isAssignableFrom(Float.class) || f.getType().isAssignableFrom(boolean.class)
-					|| f.getType().isAssignableFrom(Boolean.class) || f.getType().isAssignableFrom(String.class)
+			if (f.getType().isAssignableFrom(int.class) || f.getType().isAssignableFrom(Integer.class) ||
+					f.getType().isAssignableFrom(double.class) || f.getType().isAssignableFrom(Double.class) ||
+					f.getType().isAssignableFrom(float.class) || f.getType().isAssignableFrom(Float.class) ||
+					f.getType().isAssignableFrom(boolean.class) || f.getType().isAssignableFrom(Boolean.class) ||
+					f.getType().isAssignableFrom(String.class)
 
-			// FIXME: do not pass a Serializable for now
-			// || !f.getType().isAssignableFrom(Serializable.class)
-			// || !Serializable.class.isInstance(f)
+					// FIXME: do not pass a Serializable for now
+					//|| !f.getType().isAssignableFrom(Serializable.class)
+					//|| !Serializable.class.isInstance(f)
 
-			) {
+					) {
 
+
 				f.setAccessible(true); // set accessible to test the field values
 				try {
 					Object value = f.get(this);
@@ -1015,11 +990,9 @@
 	}
 
 	/**
-	 * Dedicated to stores the result parameters in the persisted result node
-	 * preferences. One have to implement this method to save parameters that are
-	 * not of primitive types (e.g. Property, List, HashMap...) Parameters of
-	 * primitive types are automatically saved after a computing.
-	 * 
+	 * Dedicated to stores the result parameters in the persisted result node preferences.
+	 * One have to implement this method to save parameters that are not of primitive types (e.g. Property, List, HashMap...)
+	 * Parameters of primitive types are automatically saved after a computing.
 	 * @return
 	 * @throws Exception
 	 */
@@ -1028,10 +1001,9 @@
 	/**
 	 * calls saveParameters() on this and children if childrenAsWell is set to true
 	 * 
-	 * only children
+	 * only children 
 	 * 
-	 * @param childrenAsWell
-	 *            save the children parameters as well
+	 * @param childrenAsWell save the children parameters as well
 	 * @return true if all saves were successful
 	 * @throws Exception
 	 */
@@ -1065,17 +1037,15 @@
 	 * @throws Exception
 	 */
 	protected boolean autoLoadParametersFromAnnotations() throws Exception {
-		return this.autoLoadParametersFromAnnotations(Parameter.COMPUTING) && this.autoLoadParametersFromAnnotations(Parameter.INTERNAL);
+		return this.autoLoadParametersFromAnnotations(Parameter.COMPUTING) && this.autoLoadParametersFromAnnotations(Parameter.INTERNAL); 
 	}
 
 	/**
-	 * Fills the result parameter fields declared by their @Parameter annotation
-	 * from the persisted result node or default node of the preferences. One have
-	 * to implement loadParameters() to load parameters that are not of primitive
-	 * types (e.g. Property, List, HashMap...)
+	 * Fills the result parameter fields declared by their @Parameter annotation from the persisted result node or default node of the preferences.
+	 * One have to implement loadParameters() to load parameters that are not of primitive types (e.g. Property, List, HashMap...)
 	 * 
 	 * @return
-	 * @throws Exception
+	 * @throws Exception 
 	 */
 	protected boolean autoLoadParametersFromAnnotations(int parameterType) throws Exception {
 
@@ -1087,12 +1057,11 @@
 			if (parameter == null || parameter.type() != parameterType) {
 				continue;
 			}
-
+			
 			String key = parameter.key();
 
 			if (key.isEmpty()) {
-				continue; // no preference key defined for the parameter so it can't be filled with
-							// default value or result persistence value from preferences nodes
+				continue; // no preference key defined for the parameter so it can't be filled with default value or result persistence value from preferences nodes
 			}
 			try {
 				f.setAccessible(true); // set accessible to test the field values
@@ -1102,28 +1071,26 @@
 				// only manage primitive types
 				if (f.getType().isAssignableFrom(String.class)) {
 					value = this.getStringParameterValue(key);
-				} else if (f.getType().isAssignableFrom(double.class) || f.getType().isAssignableFrom(Double.class)) {
+				}
+				else if (f.getType().isAssignableFrom(double.class) || f.getType().isAssignableFrom(Double.class)) {
 					value = this.getDoubleParameterValue(key);
-				} else if (f.getType().isAssignableFrom(float.class) || f.getType().isAssignableFrom(Float.class)) {
+				}
+				else if (f.getType().isAssignableFrom(float.class) || f.getType().isAssignableFrom(Float.class)) {
 					value = this.getFloatParameterValue(key);
-				} else if (f.getType().isAssignableFrom(int.class) || f.getType().isAssignableFrom(Integer.class)) {
+				}
+				else if (f.getType().isAssignableFrom(int.class) || f.getType().isAssignableFrom(Integer.class)) {
 					value = this.getIntParameterValue(key);
-				} else if (f.getType().isAssignableFrom(boolean.class) || f.getType().isAssignableFrom(Boolean.class)) {
+				}
+				else if (f.getType().isAssignableFrom(boolean.class) || f.getType().isAssignableFrom(Boolean.class)) {
 					value = this.getBooleanParameterValue(key);
 				}
-				// FIXME: test to automate other type creation as Property => problem here is
-				// that org.txm.core doesn't know the plug-in org.txm.searchengine.cqp.core
-				// could be done using reflection. Get the field runtime class, then get and
-				// call the constructor
-				// else if (f.getType().isAssignableFrom(Property.class)) {
-				// value = new Property(this.getStringParameterValue(key),
-				// Corpus.getCorpus(this));
-				// }
-				// MD: nope should be done via adapter or extension point
-				// "org.txm.searchengine.cqp.core" contributes to
-				// SJ: or better, when the abstraction of Property, etc. will be done, we could
-				// implement some extensions as in ChartCreator model to other engines, eg.
-				// SearchEngine, that will return
+				// FIXME: test to automate other type creation as Property => problem here is that org.txm.core doesn't know the plug-in org.txm.searchengine.cqp.core
+				// could be done using reflection. Get the field runtime class, then get and call the constructor
+				//				else if (f.getType().isAssignableFrom(Property.class)) {
+				//					value = new Property(this.getStringParameterValue(key), Corpus.getCorpus(this));
+				//				}
+				// MD: nope should be done via adapter or extension point "org.txm.searchengine.cqp.core" contributes to
+				// SJ: or better, when the abstraction of Property, etc. will be done, we could implement some extensions as in ChartCreator model to other engines, eg. SearchEngine, that will return
 				// the right class here
 				f.set(this, value);
 
@@ -1138,11 +1105,9 @@
 	}
 
 	/**
-	 * Method dedicated to manually create and load non primitive parameters from
-	 * strings stored in preference nodes in subclasses. This method is called by
-	 * the constructor of the class TXMResult. The constructor also auto-loads the
-	 * parameters that have a @Parameter annotation.
-	 * 
+	 * Method dedicated to manually create and load non primitive parameters from strings stored in preference nodes in subclasses.
+	 * This method is called by the constructor of the class TXMResult.
+	 * The constructor also auto-loads the parameters that have a @Parameter annotation.
 	 * @return
 	 * @throws Exception
 	 */
@@ -1161,7 +1126,7 @@
 	 * 
 	 * @param parameters
 	 * @return
-	 * @throws Exception
+	 * @throws Exception 
 	 */
 	public final boolean setParameters(HashMap<String, Object> parameters) throws Exception {
 		return setParameters(new TXMParameters(parameters));
@@ -1169,28 +1134,25 @@
 
 	/**
 	 * Sets a parameters from its parameter annotation "key".
-	 * 
 	 * @param key
 	 * @param value
 	 * @return
 	 * @throws Exception
 	 */
-	public boolean setParameter(String key, Object value) throws Exception {
+	public boolean setParameter(String key, Object value) throws Exception	{
 		return setParameter(key, value, false);
 	}
 
 	/**
 	 * Sets a parameters from its parameter annotation "key".
-	 * 
 	 * @param key
 	 * @param value
-	 * @param propagateToParent
-	 *            propagate the key=value to parent if the result has no field=key
+	 * @param propagateToParent propagate the key=value to parent if the result has no field=key
 	 * 
 	 * @return
 	 * @throws Exception
 	 */
-	public boolean setParameter(String key, Object value, boolean propagateToParent) throws Exception {
+	public boolean setParameter(String key, Object value, boolean propagateToParent) throws Exception	{
 
 		List<Field> fields = this.getAllFields();
 
@@ -1201,23 +1163,23 @@
 			if (parameter == null) {
 				continue;
 			}
-			if (!parameter.key().isEmpty() && parameter.key().equals(key)) {
+			if(!parameter.key().isEmpty() && parameter.key().equals(key))	{
 				targetField = f;
 				break;
 			}
 		}
 
-		if (targetField != null) {
+		if (targetField != null)	{
 			targetField.setAccessible(true);
 
 			// FIXME: debug
-			// if(value != null) {
-			// Log.info("TXMResult.setParameter(): setting parameter " + key + " = " + value
-			// + " for " + this.getClass() + " (" + value.getClass() + ")");
-			// }
+			//if(value != null)	{
+			//	Log.info("TXMResult.setParameter(): setting parameter " + key + " = " + value + " for " + this.getClass() + " (" + value.getClass() + ")");
+			//}
 
 			targetField.set(this, value);
-		} else if (this.parent != null && propagateToParent) {
+		}
+		else if (this.parent != null && propagateToParent) {
 			this.parent.setParameter(key, value, propagateToParent);
 		}
 
@@ -1225,9 +1187,7 @@
 	}
 
 	/**
-	 * Deletes the object from its parent, also deletes the children. The
-	 * <code>TXMResult.clean()</code> methods of this result and children results
-	 * are applied before the deletion.
+	 * Deletes the object from its parent, also deletes the children. The <code>TXMResult.clean()</code> methods of this result and children results are applied before the deletion.
 	 * 
 	 * @return
 	 */
@@ -1243,13 +1203,13 @@
 			while (this.children.size() > 0) {
 				TXMResult c = this.children.get(0);
 				c.delete(); // should call parent.removeResult(child)
-				// TXMPreferences.delete(this.children.get(i));
-				// this.removeChild(i);
+				//				TXMPreferences.delete(this.children.get(i));
+				//				this.removeChild(i);
 				this.children.remove(c); // but should be done already...
 			}
 			this.children.clear();
 
-			// THEN FINISH WITH THIS
+			//THEN FINISH WITH THIS
 			// delete the local node
 			TXMPreferences.delete(this);
 
@@ -1257,18 +1217,16 @@
 			this.clean();
 
 			if (this.parent != null) {
-
-				TXMResult parent = this.parent;
-
+				
+				TXMResult parent = this.parent; 
+				
 				this.parent.removeChild(this);
-
-				// FIXME: to delete the hidden parent when using shortcut command (eg.
-				// Specificities on Partition that hides the parent LexicalTable)
+				
+				// FIXME: to delete the hidden parent when using shortcut command (eg. Specificities on Partition that hides the parent LexicalTable)
 				// need to prove this method
-				if (!parent.isVisible() && !(parent instanceof Project) // FIXME: actually removing this test and modify DeleteObject.java method public
-																		// static List<Object> delete(Object o) by removing the MainCorpus test should
-																		// work
-				) {
+				if(!parent.isVisible() &&
+						!(parent instanceof Project) // FIXME: actually removing this test and modify DeleteObject.java method public static List<Object> delete(Object o) by removing the MainCorpus test should work
+						)	{
 					parent.delete();
 				}
 
@@ -1286,52 +1244,54 @@
 	 * Deletes all non persistent results and saves the results to persist.
 	 */
 	public static void deleteAllNonPersistentResults() {
-		// File logs = new File(System.getProperty("user.home"), "logs.txt");
-		// PrintWriter w = null;
+//		File logs = new File(System.getProperty("user.home"), "logs.txt");
+//		PrintWriter w = null;
 		try {
-			// w = IOUtils.getWriter(logs);
+//			w = IOUtils.getWriter(logs);
 			List<TXMResult> todo = Toolbox.workspace.getChildren();
 			while (todo.size() > 0) {
 				TXMResult r = null;
-				// try {
-				r = todo.remove(0);
-				todo.addAll(0, r.getChildren());
-				// w.println("Persisting? "+r);
-				if (r.mustBePersisted()) {
-					// w.println(" YES");
-					TXMPreferences.flush(r);
-				} else {
-					// w.println(" NO");
-					Log.finest("TXMResult.deleteAllNonPersistentResults(): Deleting result " + r.getSimpleName() + " of type " + r.getClass().getSimpleName() + ".");
-					TXMPreferences.delete(r);
-				}
-				// } catch (Exception e) {
-				// w.println(" Error: "+e+" with "+r);
-				// }
-				// w.println(" OK: "+r);
+//				try {
+					r = todo.remove(0);
+					todo.addAll(0, r.getChildren());
+//					w.println("Persisting? "+r);
+					if (r.mustBePersisted())	{ 
+//						w.println(" YES");
+						TXMPreferences.flush(r);
+					}
+					else {
+//						w.println(" NO");
+						Log.finest("TXMResult.deleteAllNonPersistentResults(): Deleting result " + r.getSimpleName() + " of type " + r.getClass().getSimpleName() + ".");
+						TXMPreferences.delete(r);
+					}
+//				} catch (Exception e) {
+//					w.println(" Error: "+e+" with "+r);
+//				}
+//				w.println(" OK: "+r);
 			}
 		} finally {
-			// if (w != null) w.close();
+//			if (w != null) w.close();
 		}
 	}
 
+
 	/**
 	 * Gets a child specified by its index in the children list.
-	 * 
 	 * @param index
 	 * @return the child specified by its index if exists otherwise null
 	 */
 	public TXMResult getChild(int index) {
 		try {
 			return this.children.get(index);
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			return null;
 		}
 	}
 
 	/**
-	 * Adds a child result to this result. If the child already have a parent, the
-	 * child will be remove from its old parent children.
+	 * Adds a child result to this result.
+	 * If the child already have a parent, the child will be remove from its old parent children.
 	 * 
 	 * @param child
 	 * @return true if the child has been added
@@ -1339,10 +1299,10 @@
 	private boolean addChild(TXMResult child) {
 		try {
 			// do nothing if the parent is already this result
-			// if(child.getParent() == this) {
-			// return true;
-			// }
-			// else {
+			//			if(child.getParent() == this)	{
+			//				return true;
+			//			}
+			//			else	{
 			// remove from current parent if exists
 			child.removeFromParent();
 
@@ -1353,7 +1313,7 @@
 				// child + " to parent " + this);
 				return this.children.add(child);
 			}
-			// }
+			//			}
 		} catch (Exception e) {
 			// nothing to do
 		}
@@ -1361,8 +1321,7 @@
 	}
 
 	/**
-	 * Inserts a child result in this result children list at the specified
-	 * position.
+	 * Inserts a child result in this result children list at the specified position.
 	 * 
 	 * @param index
 	 * @param child
@@ -1467,7 +1426,6 @@
 
 	/**
 	 * Gets the first child result specified by its class.
-	 * 
 	 * @param type
 	 * @return the first child if exists otherwise null
 	 */
@@ -1475,14 +1433,14 @@
 		List<TXMResult> children = this.getChildren(type, false);
 		try {
 			return children.get(0);
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			return null;
 		}
 	}
 
 	/**
 	 * Deletes the children of the specified class.
-	 * 
 	 * @param type
 	 * @return
 	 */
@@ -1493,20 +1451,22 @@
 		}
 	}
 
+
 	/**
 	 * Gets the first child.
-	 * 
 	 * @param classSimpleName
 	 * @return
 	 */
 	public TXMResult getFirstChild() {
 		try {
 			return this.children.get(0);
-		} catch (Exception e) {
 		}
+		catch (Exception e) {
+		}
 		return null;
 	}
 
+
 	/**
 	 * Gets the children of all the branch of the specified node in a flat list.
 	 * 
@@ -1531,7 +1491,7 @@
 	public List<TXMResult> getDeepChildren(Class<? extends TXMResult> clazz) {
 		return TXMResult.getDeepChildren(this, clazz);
 	}
-
+	
 	/**
 	 * Gets the children of all the branch in a flat list.
 	 * 
@@ -1540,7 +1500,7 @@
 	public static List<TXMResult> getDeepChildren(TXMResult r) {
 		return TXMResult.getDeepChildren(r, null);
 	}
-
+	
 	/**
 	 * Gets the children of all the branch in a flat list.
 	 * 
@@ -1551,21 +1511,20 @@
 	}
 
 	/**
-	 * Gets the TXMResult specified by its UUID in the children of the specified
-	 * root result.
-	 * 
+	 * Gets the TXMResult specified by its UUID in the children of the specified root result.
 	 * @param branchRoot
 	 * @param UUID
 	 * @return
 	 */
-	public static TXMResult getResult(TXMResult root, String nodePath) {
+	public static TXMResult getResult(TXMResult root, String nodePath)	{
 		TXMResult result = null;
-		if (root.getParametersNodePath().equals(nodePath)) {
+		if(root.getParametersNodePath().equals(nodePath))	{
 			result = root;
-		} else {
+		}
+		else	{
 			List<TXMResult> results = root.getDeepChildren();
 			for (int i = 0; i < results.size(); i++) {
-				if (results.get(i).getParametersNodePath().equals(nodePath)) {
+				if(results.get(i).getParametersNodePath().equals(nodePath))	{
 					result = results.get(i);
 					break;
 				}
@@ -1575,13 +1534,11 @@
 	}
 
 	/**
-	 * Gets the TXMResult specified by its UUID in the children of the Toolbox
-	 * Workspace member.
-	 * 
+	 * Gets the TXMResult specified by its UUID in the children of the Toolbox Workspace member.
 	 * @param UUID
 	 * @return
 	 */
-	public static TXMResult getResult(String nodePath) {
+	public static TXMResult getResult(String nodePath)	{
 		return getResult(Toolbox.workspace, nodePath);
 	}
 
@@ -1595,12 +1552,14 @@
 		List<TXMResult> nodes = new ArrayList<TXMResult>();
 		for (TXMResult child : srcNodes) {
 			try {
-				if ((type == null || child.getClass().asSubclass(type) != null) && (onlyVisible == false || child.isVisible())) {
+				if ((type == null || 
+						child.getClass().asSubclass(type) != null) 
+						&& (onlyVisible == false || child.isVisible())) {
 					nodes.add(child);
 				}
 
 				// add children of a non visible result
-				else if (!child.isVisible() && child.hasChildren()) {
+				else if (!child.isVisible() && child.hasChildren())	{
 					List<TXMResult> subChidlren = child.getChildren(type, onlyVisible);
 					nodes.addAll(subChidlren);
 				}
@@ -1613,16 +1572,15 @@
 
 	/**
 	 * Gets the direct children count.
-	 * 
 	 * @return the direct children count
 	 */
 	public int getChildrenCount() {
 		return this.children.size();
 	}
 
+
 	/**
 	 * Gets the root parent of the branch.
-	 * 
 	 * @return
 	 */
 	public TXMResult getRootParent() {
@@ -1636,10 +1594,9 @@
 		return root;
 	}
 
+
 	/**
-	 * Gets the first parent of the specified class, eg.
-	 * this.getFirstParent(Partition.class);
-	 * 
+	 * Gets the first parent of the specified class, eg. this.getFirstParent(Partition.class);
 	 * @param type
 	 * @return
 	 */
@@ -1647,9 +1604,9 @@
 		TXMResult node = null;
 		TXMResult parent = this.parent;
 		do {
-			if (parent != null) {
-				if (parent.getClass().equals(type)) {
-					node = parent;
+			if(parent != null)	{
+				if(parent.getClass().equals(type)) {
+					node = parent;	
 				}
 
 				parent = parent.getParent();
@@ -1659,39 +1616,47 @@
 		return node;
 	}
 
-	// /**
-	// * Gets the first parent of the specified class, eg.
-	// this.getFirstParent(Partition.class);
-	// * Returns the object itself if it is of the specified class.
-	// * @param type
-	// * @return null if the TXMResult is not attached to a BinaryCorpus
-	// */
-	// public Project getCorpusProject() {
-	// Object o = getFirstParent(Project.class);
-	// if (o != null) {
-	// return (Project)o;
-	// } else {
-	// return null;
-	// }
-	// }
-	//
-	// /**
-	// * Gets the first parent of the specified class, eg.
-	// this.getFirstParent(Partition.class);
-	// * Returns the object itself if it is of the specified class.
-	// * @param type
-	// * @return null if the TXMResult is not attached to a BinaryCorpus
-	// */
-	// public CorpusBuild getCorpusBuild() {
-	// Object o = getFirstParent(CorpusBuild.class);
-	// if (o != null) {
-	// return (CorpusBuild)o;
-	// } else {
-	// return null;
-	// }
-	// }
 
 	/**
+	 * Checks if the specified result is a child.
+	 * @return
+	 */
+	public boolean isChild(TXMResult child) {
+		return this.getDeepChildren().contains(child);
+	}
+	
+
+	//	/**
+	//	 * Gets the first parent of the specified class, eg. this.getFirstParent(Partition.class);
+	//	 * Returns the object itself if it is of the specified class.
+	//	 * @param type
+	//	 * @return null if the TXMResult is not attached to a BinaryCorpus
+	//	 */
+	//	public Project getCorpusProject() {
+	//		Object o = getFirstParent(Project.class);
+	//		if (o != null) {
+	//			return (Project)o;
+	//		} else {
+	//			return null;
+	//		}
+	//	}
+	//	
+	//	/**
+	//	 * Gets the first parent of the specified class, eg. this.getFirstParent(Partition.class);
+	//	 * Returns the object itself if it is of the specified class.
+	//	 * @param type
+	//	 * @return null if the TXMResult is not attached to a BinaryCorpus
+	//	 */
+	//	public CorpusBuild getCorpusBuild() {
+	//		Object o = getFirstParent(CorpusBuild.class);
+	//		if (o != null) {
+	//			return (CorpusBuild)o;
+	//		} else {
+	//			return null;
+	//		}
+	//	}
+
+	/**
 	 * Gets the sibling nodes of this node result.
 	 */
 	public List<TXMResult> getSiblings() {
@@ -1723,13 +1688,14 @@
 	public boolean isVisible() {
 		return this.visible;
 	}
-
+	
 	public boolean isParentVisible() {
 		return parent != null && (parent.isVisible() || parent.isInternalPersistable());
 	}
 
 	/**
-	 * Sets the result visibility state. Dedicated to UI purposes.
+	 * Sets the result visibility state.
+	 * Dedicated to UI purposes.
 	 * 
 	 * @param visible
 	 * @return
@@ -1764,59 +1730,58 @@
 	public abstract String getName();
 
 	/**
-	 * Gets the simple name of the result. Dedicated to be displayed in a small UI
-	 * area.
+	 * Gets the simple name of the result.
+	 * Dedicated to be displayed in a small UI area.
 	 * 
 	 * @return
 	 */
 	public abstract String getSimpleName();
 
 	/**
-	 * Gets some details about how the result has been computed (eg. additional
-	 * parameters, etc.). Dedicated to be displayed in a large UI area.
+	 * Gets some details about how the result has been computed (eg. additional parameters, etc.).
+	 * Dedicated to be displayed in a large UI area.
 	 * 
 	 * @return
 	 */
 	public abstract String getDetails();
 
 	/**
-	 * Gets the user name if exists otherwise, the lazy name if exists, otherwise
-	 * the simple name.
+	 * Gets the user name if exists otherwise, the lazy name if exists, otherwise the simple name.
 	 * 
 	 * @return the current name
 	 */
 	public String getCurrentName() {
 		if (!this.userName.isEmpty()) {
 			return this.userName;
-		} else if (this.lazyName != null && !this.lazyName.isEmpty()) {
+		}
+		else if (this.lazyName != null && !this.lazyName.isEmpty()) {
 			return this.lazyName;
-		} else {
+		}
+		else {
 			return this.getSimpleName();
 		}
 	}
 
+
 	/**
-	 * Convenience method to get a shared name when the result is empty (not yet
-	 * computed).
-	 * 
+	 * Convenience method to get a shared name when the result is empty (not yet computed).
 	 * @return the string "..."
 	 */
-	public String getEmptyName() {
+	public String getEmptyName()	{
 		return "..."; //$NON-NLS-1$
 	}
 
-	// /**
-	// * Returns a string representation of an unique ID for the result.
-	// *
-	// * @return
-	// */
-	// public String getUUID() {
-	// return this.uniqueID;
-	// }
+//	/**
+//	 * Returns a string representation of an unique ID for the result.
+//	 * 
+//	 * @return
+//	 */
+//	public String getUUID() {
+//		return this.uniqueID;
+//	}
 
 	/**
-	 * Gets a string representing the result that can be used as a file name (eg.
-	 * for exporting in file).
+	 * Gets a string representing the result that can be used as a file name (eg. for exporting in file).
 	 * 
 	 * @return a valid filename without unexpected characters
 	 */
@@ -1831,8 +1796,7 @@
 	}
 
 	/**
-	 * Gets a string representing the concatenation of the simple names of the
-	 * branch of this result.
+	 * Gets a string representing the concatenation of the simple names of the branch of this result.
 	 * 
 	 * @return the full path
 	 */
@@ -1877,30 +1841,27 @@
 	public TXMResult clone() {
 		return clone(null, true);
 	}
-
+	
 	public TXMResult clone(boolean all) {
 		return clone(null, all);
 	}
-
 	/**
 	 * recursive method to clone a result
-	 * 
-	 * @param newParent
-	 *            necessary for cloning children in the right clone parent
+	 * @param newParent necessary for cloning children in the right clone parent
 	 * @param all
 	 * @return
 	 */
 	protected TXMResult clone(TXMResult newParent, boolean all) {
 		TXMResult clone = null;
 		try {
-			String newNodePath = this.getProject().getParametersNodeRootPath() + createUUID() + "_" + this.getClass().getSimpleName();
+			String newNodePath = this.getProject().getParametersNodeRootPath()+ createUUID() + "_" + this.getClass().getSimpleName();
 			TXMPreferences.cloneNode(this.getParametersNodePath(), newNodePath);
-
+			
 			if (newParent != null) { // change the cloned node parent preference
 				TXMPreferences.put(newNodePath, TXMPreferences.PARENT_PARAMETERS_NODE_PATH, newParent.getParametersNodePath());
 			}
-			clone = this.getClass().getDeclaredConstructor(String.class).newInstance(newNodePath);
-
+			clone =  this.getClass().getDeclaredConstructor(String.class).newInstance(newNodePath);
+			
 			if (all) {
 				for (TXMResult child : this.children) {
 					child.clone(clone, all);
@@ -1921,8 +1882,7 @@
 	 * @return true if no parameter read occured
 	 * @throws CqiClientException
 	 */
-	// public abstract boolean setParameters(TXMParameters parameters) throws
-	// Exception;
+	//public abstract boolean setParameters(TXMParameters parameters) throws Exception;
 
 	// this.parameters = parameters;
 	// if (this.parameters == null) {
@@ -1972,6 +1932,7 @@
 		}
 	}
 
+
 	/**
 	 * 
 	 * @return
@@ -1981,6 +1942,7 @@
 		return this.compute(new LogMonitor("Computing " + this));
 	}
 
+
 	/**
 	 * 
 	 * @param monitor
@@ -1991,9 +1953,12 @@
 		return this.compute(monitor, true);
 	}
 
+
 	/**
-	 * Computes the result if it can be computed it is dirty the TXMResult
-	 * constructor has been called
+	 * Computes the result if 
+	 * it can be computed 
+	 * it is dirty 
+	 * the TXMResult constructor has been called
 	 * 
 	 * @param watcher
 	 * 
@@ -2007,24 +1972,20 @@
 	protected boolean compute(IProgressMonitor monitor, boolean deepComputing) {
 
 		// no changes to do
-		// FIXME: SJ: we need to do do some actions even if the object is frozen, eg.
-		// updating parameters, saving parameters, etc.
-		// FIXME MD: nope the parameters must not move and will be saved in the current
-		// state
+		// FIXME: SJ: we need to do do some actions even if the object is frozen, eg. updating parameters, saving parameters, etc.
+		// FIXME MD: nope the parameters must not move and will be saved in the current state
 		if (hasBeenComputedOnce && frozen) {
 			return true;
 		}
-
+		
+		
 		try {
 
 			Log.finest("*** TXMResult.compute(): " + this.getClass().getSimpleName() + ": starting computing process...");
 
-			// FIXME: see if this skipComputing tests is still useful? is it possible to
-			// directly return instead?
-			// en fait voir ChartResult.compute() if(super.compute(monitor, true, false)),
-			// je pense que le prob vient du fait que si on retourne false dans
-			// TXMResult.compute() alors renderChart() ne sera pas appelé
-			// il faudrait retourner un état: skipped, computed, error, etc.
+			// FIXME: see if this skipComputing tests is still useful? is it possible to directly return instead?
+			// en fait voir ChartResult.compute() if(super.compute(monitor, true, false)), je pense que le prob vient du fait que si on retourne false dans TXMResult.compute() alors renderChart() ne sera pas appelé
+			// il faudrait retourner un état: skipped, computed, error, etc. 
 			boolean skipComputing = false;
 
 			this.monitor = monitor;
@@ -2049,7 +2010,7 @@
 				skipComputing = true;
 			}
 
-			if (!skipComputing) {
+			if(!skipComputing)	{
 
 				// Debug
 				Log.finest("+++ TXMResult.compute(): " + this.getClass().getSimpleName() + ": computing result of type " + this.getClass() + "...");
@@ -2067,18 +2028,19 @@
 				}
 			}
 
-			// clear the lazy name, no more needed since the object has been computed and
-			// getSimpleName() can now work
+			// clear the lazy name, no more needed since the object has been computed and getSimpleName() can now work
 			this.lazyName = null;
 
 			// store last used parameters
 			this.updateLastParameters();
 
-			if (!skipComputing) {
 
+			if(!skipComputing)	{
+
 				// store last used parameters
-				// this.updateLastParameters();
+//				this.updateLastParameters();
 
+				
 				if (!this.autoSaveParametersFromAnnotations()) {
 					Log.severe("TXMResult.compute(): " + this.getClass().getSimpleName() + ": failed to save parameters from annotations for " + this.getName() + ".");
 				}
@@ -2093,12 +2055,6 @@
 
 				this.dirty = false; // the computing was successful, the result is no more dirty
 				this.hasBeenComputedOnce = true;
-				
-//				for (TXMResultListener l : listeners) {
-//					if (!l.isDisposed())
-//						l.updateFromResult(true);
-//				}
-				
 				if (altered) {
 					System.out.println(NLS.bind("Warning {0} modifications have been lost.", this.getSimpleName()));
 				}
@@ -2119,17 +2075,17 @@
 						this.children.get(i).compute(monitor, deepComputing);
 					}
 
-					// FIXME: SJ: this code generates concurrent modification exceptions when deep
-					// computing
+					// FIXME: SJ: this code generates concurrent modification exceptions when deep computing
 					// here for tests purpose, the code above does not generates exceptions
-					// for (TXMResult child : this.getChildren()) {
-					// // recompute only children that has been opened once
-					// child.compute(monitor, deepComputing);
-					// }
+					//				for (TXMResult child : this.getChildren()) {
+					//					// recompute only children that has been opened once
+					//					child.compute(monitor, deepComputing);
+					//				}
 
 				}
 			}
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 			Log.severe(TXMCoreMessages.bind("TXMResult.compute(): Exception occurs during computing: {0}.", e));
@@ -2146,31 +2102,22 @@
 	 * @throws Exception
 	 */
 	protected abstract boolean _compute() throws Exception;
-//
-//	public void addResultListener(TXMResultListener listener) {
-//		listeners.add(listener);
-//	}
-//
-//	public void removeResultListener(TXMResultListener listener) {
-//		listeners.remove(listener);
-//	}
 
+
 	/***
-	 * Checks if the result must be persisted according to the persistence global
-	 * preference or the user persistable state.
-	 * 
+	 * Checks if the result must be persisted according to the persistence global preference or the user persistable state.
 	 * @return
 	 */
-	// public boolean mustBePersisted() {
-	// if (this.internalPersistable
-	// || this.userPersistable) {
-	// return true;
-	// }
-	// return false;
-	// }
+	//	public boolean mustBePersisted()	{
+	//		if (this.internalPersistable
+	//				|| this.userPersistable)	{
+	//			return true;
+	//		}
+	//		return false;
+	//	}
 
 	// FIXME: need to prove this code
-	public boolean mustBePersisted() {
+	public boolean mustBePersisted()	{
 		return this.internalPersistable || this.userPersistable;
 	}
 
@@ -2186,7 +2133,6 @@
 
 	/**
 	 * Checks if the monitor is canceled.
-	 * 
 	 * @return true if the monitor has been canceled by the user
 	 */
 	public boolean isCanceled() {
@@ -2234,11 +2180,13 @@
 	// FIXME: should be moved in an exporter extension
 	public abstract boolean toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws Exception;
 
+
+
+
 	/**
 	 * Increments the progress of the specified amount of work.
 	 * 
-	 * @param amount
-	 *            of work
+	 * @param amount of work
 	 */
 	public void worked(int amount) {
 		if (monitor != null) {
@@ -2248,8 +2196,7 @@
 	}
 
 	/**
-	 * Increments the progress of the specified amount of work and displays a
-	 * message.
+	 * Increments the progress of the specified amount of work and displays a message.
 	 * 
 	 * @param amount
 	 * @param message
@@ -2310,7 +2257,6 @@
 
 	/**
 	 * Gets the user defined name.
-	 * 
 	 * @return the user name
 	 */
 	public String getUserName() {
@@ -2318,14 +2264,14 @@
 	}
 
 	/**
-	 * Gets the result type. Should be localized (eg. CA => AFC, Word cloud => Nuage
-	 * de mots). This method can be used for logging or UI. This method can also be
-	 * used to sort the result by type (alphanumeric order).
-	 * 
+	 * Gets the result type. Should be localized (eg. CA => AFC, Word cloud => Nuage de mots).
+	 * This method can be used for logging or UI.
+	 * This method can also be used to sort the result by type (alphanumeric order).
 	 * @return
 	 */
 	public abstract String getResultype();
 
+
 	@Override
 	public int compareTo(TXMResult o) {
 		// Compare node weights
@@ -2339,40 +2285,33 @@
 	 * @return
 	 */
 	public static int compare(TXMResult e1, TXMResult e2) {
-		if (e1 == null && e2 == null)
-			return 0;
-		if (e1 == null)
-			return 1;
+		if (e1 == null && e2 == null) return 0;
+		if (e1 == null) return 1;
 
 		return e1.getParametersNodePath().compareTo(e2.getParametersNodePath());
 	}
 
 	/**
-	 * Sets a boolean state to define if the result has already been computed at
-	 * least once or not.
-	 * 
-	 * @param hasBeenComputedOnce
-	 *            the hasBeenComputedOnce to set
+	 * Sets a boolean state to define if the result has already been computed at least once or not. 
+	 * @param hasBeenComputedOnce the hasBeenComputedOnce to set
 	 */
 	public void setHasBeenComputedOnce(boolean hasBeenComputedOnce) {
 		this.hasBeenComputedOnce = hasBeenComputedOnce;
 	}
 
 	/**
-	 * Gets a boolean state defining if the result has already been computed at
-	 * least once or not.
+	 * Gets a boolean state defining if the result has already been computed at least once or not.
 	 * 
 	 * true if the result has already been lazy LOADED...........
-	 * 
 	 * @return
 	 */
 	public boolean hasBeenComputedOnce() {
 		return hasBeenComputedOnce;
 	}
 
+
 	/**
-	 * Gets the internal persistable state.
-	 * 
+	 * Gets the internal persistable state. 
 	 * @return the persistable
 	 */
 	public boolean isInternalPersistable() {
@@ -2380,21 +2319,16 @@
 	}
 
 	/**
-	 * Sets the internal persistable state. Results internally persisted will not be
-	 * deleted when quitting, event if the user set them as non persistable.
-	 * 
-	 * @param persistable
-	 *            the persistable to set
+	 * Sets the internal persistable state. Results internally persisted will not be deleted when quitting, event if the user set them as non persistable.
+	 * @param persistable the persistable to set
 	 */
 	public void setInternalPersistable(boolean persistable) {
 		this.internalPersistable = persistable;
 	}
 
 	/**
-	 * Gets the lazy name. Since some result names need computed data, this name is
-	 * dedicated to display the result name even if it has not been recomputed after
-	 * being loaded.
-	 * 
+	 * Gets the lazy name.
+	 * Since some result names need computed data, this name is dedicated to display the result name even if it has not been recomputed after being loaded.
 	 * @return the lazyName
 	 */
 	public String getLazyName() {
@@ -2403,7 +2337,6 @@
 
 	/**
 	 * Gets the user defined persistable state of the result.
-	 * 
 	 * @return the state
 	 */
 	public boolean isUserPersistable() {
@@ -2415,8 +2348,7 @@
 	 * 
 	 * propagate persistence to parent if necessary
 	 * 
-	 * @param userPersistable
-	 *            the state to set
+	 * @param userPersistable the state to set
 	 */
 	public void setUserPersistable(boolean userPersistable) {
 		this.userPersistable = userPersistable;
@@ -2428,34 +2360,34 @@
 				child.setUserPersistable(userPersistable);
 			}
 		}
-
+		
 		// directly save and flush the preference
-		try {
-			if (this.isUserPersistable()) {
-				this.autoSaveParametersFromAnnotations();
-				this.saveParameters();
-				TXMPreferences.flush(this);
-			}
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
+        try {
+            if (this.isUserPersistable())    {
+                this.autoSaveParametersFromAnnotations();
+                this.saveParameters();
+                TXMPreferences.flush(this);
+            }
+        }
+        catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } 
 		// Debug
-		// Log.finest("TXMResult.setUserPersistable(): " + userPersistable);
+		//		Log.finest("TXMResult.setUserPersistable(): " + userPersistable);
 	}
 
 	/**
-	 * Swaps the user persistable state.
+	 * Swaps the user persistable state. 
 	 * 
 	 * propagate persistence to parent if necessary
 	 */
-	public void swapUserPersistableState() {
+	public void swapUserPersistableState()	{
 		this.setUserPersistable(!this.userPersistable);
 	}
 
 	/**
 	 * Gets the project of the result.
-	 * 
 	 * @return the project of the result
 	 */
 	public final Project getProject() {
@@ -2464,7 +2396,6 @@
 
 	/**
 	 * Gets the parameters node path.
-	 * 
 	 * @return the parametersNodePath
 	 */
 	public String getParametersNodePath() {
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMMultiPageEditor.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMMultiPageEditor.java	(revision 1428)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMMultiPageEditor.java	(revision 1429)
@@ -63,53 +63,45 @@
 	/** The names. */
 	protected List<String> names;
 
-	/**
-	 * Instantiates a new generic multi page editor.
-	 */
-	public TXMMultiPageEditor() {
-		// TODO Auto-generated constructor stub
-		super();
-	}
+//
+//
+//	/* (non-Javadoc)
+//	 * @see org.eclipse.ui.part.MultiPageEditorPart#createPages()
+//	 */
+//	@Override
+//	protected void createPages() {
+//
+//		IEditorInput input = getEditorInput();
+//		if (!(input instanceof IProvidingMultiPageEditorInput)) {
+//			throw new IllegalArgumentException(NLS.bind(TXMUIMessages.theInputP0CannotBeDisplayed, input.getName()));
+//		}
+//
+//		editors = ((IProvidingMultiPageEditorInput) input).getEditors();
+//		inputs = ((IProvidingMultiPageEditorInput) input).getEditorInputs();
+//		names = ((IProvidingMultiPageEditorInput) input).getNames();
+//
+//		if (editors.size() != inputs.size()) {
+//			throw new IllegalArgumentException(NLS.bind(TXMUIMessages.theNumberOfEditorsP0AndNumberOfInputsP1MustBeEqual, editors.size(), inputs.size()));
+//		}
+//
+//		for (int i = 0; i < editors.size(); i++) {
+//
+//			int editorIndex = 0;
+//			try {
+//				
+//				editorIndex = addPage(editors.get(i), inputs.get(i));
+//			} catch (PartInitException e) {
+//				// TODO Auto-generated catch block
+//				org.txm.rcp.utils.Logger.printStackTrace(e);
+//			}
+//			this.setPageText(editorIndex, names.get(i));
+//		}
+//		this.setPartName(getEditorInput().getName());
+//
+//		this.setActivePage(LAST_EDITOR_USED);
+//	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.MultiPageEditorPart#createPages()
-	 */
-	@Override
-	protected void createPages() {
-
-		IEditorInput input = getEditorInput();
-		if (!(input instanceof IProvidingMultiPageEditorInput)) {
-			throw new IllegalArgumentException(NLS.bind(
-					TXMUIMessages.theInputP0CannotBeDisplayed, input.getName()));
-		}
-
-		editors = ((IProvidingMultiPageEditorInput) input).getEditors();
-		inputs = ((IProvidingMultiPageEditorInput) input).getEditorInputs();
-		names = ((IProvidingMultiPageEditorInput) input).getNames();
-
-		if (editors.size() != inputs.size()) {
-			throw new IllegalArgumentException(NLS.bind(
-					TXMUIMessages.theNumberOfEditorsP0AndNumberOfInputsP1MustBeEqual, editors.size(), inputs.size()));
-		}
-
-		for (int i = 0; i < editors.size(); i++) {
-
-			int editorIndex = 0;
-			try {
-				
-				editorIndex = addPage(editors.get(i), inputs.get(i));
-			} catch (PartInitException e) {
-				// TODO Auto-generated catch block
-				org.txm.rcp.utils.Logger.printStackTrace(e);
-			}
-			setPageText(editorIndex, names.get(i));
-		}
-		setPartName(getEditorInput().getName());
-
-		setActivePage(LAST_EDITOR_USED);
-	}
-
-	/* (non-Javadoc)
 	 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	@Override
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/listeners/ComputeSelectionListener.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/listeners/ComputeSelectionListener.java	(revision 1428)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/listeners/ComputeSelectionListener.java	(revision 1429)
@@ -17,7 +17,7 @@
 public class ComputeSelectionListener extends BaseAbstractComputeListener implements SelectionListener, ISelectionChangedListener {
 
 	/**
-	 * If autocompute is true then the computing will be done even if the global auto-computing preference is false.
+	 * If autocompute is set to true then the computing will be done even if the global auto-computing preference is false.
 	 * @param editor
 	 * @param autoCompute
 	 */
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 1428)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java	(revision 1429)
@@ -146,9 +146,9 @@
 	protected Group extendedParametersGroup;
 
 	/**
-	 * 
+	 * The SWT parent Composite.
 	 */
-	private Composite parent;
+	protected Composite parent;
 
 	/**
 	 * contains the default bottom toolbars widget
@@ -193,11 +193,26 @@
 		return 1;
 	}
 	
+	/**
+	 * 
+	 */
+	public TXMEditor() {
+		super();
+	}
+	
+	/**
+	 * Creates an editor and an editor input containing the specified result.
+	 * @param result
+	 */
+	public TXMEditor(TXMResult result) {
+		this();
+		this.setInput(new TXMResultEditorInput<TXMResult>(result));
+	}
 	@Override
 	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
 		this.setSite(site);
 		this.setInput(input);
-		this.result = getEditorInput().getResult(); // store result for debug purpose
+		this.result = this.getEditorInput().getResult(); // store result for debug purpose
 //		this.result.addResultListener(this);
 		// FIXME: see how to use the Adapters and AdapterFactory to define image and title of Editor in the contributing plug-ins
 		// another way is to use editors extension in plug-ins and redefine icon and name, using this solution the problem is that the name (which is also editor title) can not be dynamic according to the result data
@@ -205,20 +220,29 @@
 		this.setPartName(input.getName());
 
 		// fetch extensions
+		this.initExtensions();
+	}
+
+	
+	/**
+	 * Initializes plug-ins extensions.
+	 */
+	public void initExtensions()	{
+		
 		IConfigurationElement[] config = Platform.getExtensionRegistry().getConfigurationElementsFor(TXMEditorExtension.EXTENSION_ID);
-		Log.warning("Installing TXMEditorExtension..."); //$NON-NLS-1$
-		Log.warning(Arrays.toString(config));
+		Log.finest("Installing TXMEditorExtension..."); //$NON-NLS-1$
+		Log.finest(Arrays.toString(config));
 
 		for (IConfigurationElement e : config) {
 			try {
-				Log.warning(" "+e.getName()+" from "+e.getContributor().getName()); //$NON-NLS-1$ //$NON-NLS-2$
+				Log.finest(" "+e.getName()+" from "+e.getContributor().getName()); //$NON-NLS-1$ //$NON-NLS-2$
 				final Object o = e.createExecutableExtension("class"); //$NON-NLS-1$
 				if (o instanceof TXMEditorExtension) {
 					ISafeRunnable runnable = new ISafeRunnable() {
 
 						@Override
 						public void handleException(Throwable exception) {
-							System.out.println("Error while installing: "+o+": "+ exception.getLocalizedMessage()); //$NON-NLS-1$ //$NON-NLS-2$
+							Log.severe("Error while installing: "+o+": "+ exception.getLocalizedMessage()); //$NON-NLS-1$ //$NON-NLS-2$
 						}
 
 						@Override
@@ -232,7 +256,7 @@
 					SafeRunner.run(runnable);
 				}
 			} catch (Exception ex) {
-				System.out.println("Exception while installing "+e.getName()+": "+ex.getLocalizedMessage()); //$NON-NLS-1$ //$NON-NLS-2$
+				Log.severe("Exception while installing " + e.getName() + ": " + ex.getLocalizedMessage()); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		}
 
@@ -259,6 +283,7 @@
 
 			@Override
 			public void partActivated(IWorkbenchPartReference partRef) {
+				// FIXME: SJ: why? when opening a new Editor the view will be refreshed twice... 
 				CorporaView.refresh();
 			}
 
@@ -283,7 +308,7 @@
 		};
 		this.getEditorSite().getPage().addPartListener(pl);
 	}
-
+	
 	/**
 	 * the composite containing the main parameters, the top toolbar and eventually other top toolbars
 	 * @return
@@ -374,7 +399,7 @@
 
 
 			this.notifyExtensions("notifyStartOfCreatePartControl"); //$NON-NLS-1$
-			this._createPartControl(); // child editor create its parameters and display widgets
+			this._createPartControl(); // child editor creates its parameters and displays widgets
 			this.notifyExtensions("notifyEndOfCreatePartControl"); //$NON-NLS-1$
 
 			// remove empty toolbar
@@ -396,34 +421,35 @@
 
 			
 			// disable the compute button, it will be re-enable or not later when the UI will check if the editor is dirty or not
-			ToolItem computeButton = this.topToolBar.getItemByContributionId(TOP_TOOLBAR_COMPUTE_BUTTON_ID); //$NON-NLS-1$
+			ToolItem computeButton = this.topToolBar.getItemByContributionId(TOP_TOOLBAR_COMPUTE_BUTTON_ID);
 			computeButton.setEnabled(false);
 
 			
 		} catch(Throwable e) {
-			Log.severe("TXMEditor.createPartControl(): can not create the editor for result " + this.getResult() + "."); //$NON-NLS-1$  //$NON-NLS-2$
+			Log.severe(TXMCoreMessages.bind("TXMEditor.createPartControl(): can not create the editor for result {0}.", this.getResult())); //$NON-NLS-1$
 			e.printStackTrace();
 			createPartControlDoneSucessfully = false;
 		}
 	}
 
 	/**
-	 * shortcut to call the notify* methods of all extension 
+	 * shortcut to call the notify* methods of all extension
 	 * 
 	 * notify the extension of editors updates
 	 * 
-	 * notifyStartOfCreatePartControl,
-notifyEndOfCreatePartControl,
-notifyStartOfCompute,
-notifyEndOfCompute,
-notifyStartOfRefresh,
-notifyEndOfRefresh
-notifyDispose
-notifyDoSave
+	 * notifyStartOfCreatePartControl
+	 * notifyEndOfCreatePartControl
+	 * notifyStartOfCompute
+	 * notifyEndOfCompute
+	 * notifyStartOfRefresh
+	 * notifyEndOfRefresh
+	 * notifyDispose
+	 * notifyDoSave
 	 * 
-	 * @param step the method to call
-	 * @throws SecurityException 
-	 * @throws NoSuchMethodException 
+	 * @param step
+	 *            the method to call
+	 * @throws SecurityException
+	 * @throws NoSuchMethodException
 	 */
 	protected void notifyExtensions(final String step) {
 		if (!step.startsWith("notify")) return; //$NON-NLS-1$
@@ -520,7 +546,14 @@
 		return this.extendedParametersGroup;
 	}
 
+
 	@Override
+	public boolean isSaveAsAllowed() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	@Override
 	public void doSave(final IProgressMonitor monitor) {
 		// FIXME: SJ: to discuss. A this moment the save is automatically done or not in TXMResult.compute() according to a preference of the TBX
 		//		if (TBXPreferences.getInstance().getBoolean(TBXPreferences.AUTO_SAVE_RESULTS)) { // ?
@@ -614,12 +647,6 @@
 	}
 
 	@Override
-	public boolean isSaveAsAllowed() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
 	public void setFocus() {
 		// FIXME SJ: this code leads to a bug, the focus must not be regiven to the main parameter after each computing
 //		if (mainParametersComposite != null && !mainParametersComposite.isDisposed()) {
@@ -699,6 +726,23 @@
 
 
 	/**
+	 * Synchronizes the result data from the editor data.
+	 */
+	public void synchronizeResultFromEditor()	{
+		// FIXME: DEbug
+		Log.finest("TXMEditor.syncrhonizeResultFromEditor(): " + this.getClass().getSimpleName() + ": manually updating result from editor."); //$NON-NLS-1$
+		this.updateResultFromEditor(); // subclasses manual result updating from editor fields
+		// FIXME: DEbug
+		Log.finest("TXMEditor.syncrhonizeResultFromEditor(): " + this.getClass().getSimpleName() + ": auto updating result from editor."); //$NON-NLS-1$
+		
+		this.autoUpdateResultFromEditorParameters(); // auto updating result from Parameter annotations in result <=> editor
+
+		// Stores the last parameters before the computing to later auto-update the Widgets only if some parameters have changed 
+		setLastComputingParameters(this.getResult().getLastParametersFromHistory());
+
+	}
+	
+	/**
 	 * Computes the TXMResult if all necessary parameters are set then refreshes the editor UI.
 	 * Also loads and savesd some parameters from result to Widgets fields and from Widgets fields to result.
 	 * 
@@ -734,16 +778,18 @@
 									}
 								}
 								
-								// FIXME: DEbug
-								Log.finest("TXMEditor.compute(): " + TXMEditor.this.getClass().getSimpleName() + ": manually updating result from editor."); //$NON-NLS-1$
-								updateResultFromEditor(); // subclasses manual result updating from editor fields
-								// FIXME: DEbug
-								Log.finest("TXMEditor.compute(): " + TXMEditor.this.getClass().getSimpleName() + ": auto updating result from editor."); //$NON-NLS-1$
+								synchronizeResultFromEditor();
 								
-								autoUpdateResultFromEditorParameters(); // auto updating result from Parameter annotations in result <=> editor
-
-								// Stores the last parameters before the computing to later auto-update the Widgets only if some parameters have changed 
-								setLastComputingParameters(TXMEditor.this.getResult().getLastParametersFromHistory());
+//								// FIXME: DEbug
+//								Log.finest("TXMEditor.compute(): " + TXMEditor.this.getClass().getSimpleName() + ": manually updating result from editor."); //$NON-NLS-1$
+//								updateResultFromEditor(); // subclasses manual result updating from editor fields
+//								// FIXME: DEbug
+//								Log.finest("TXMEditor.compute(): " + TXMEditor.this.getClass().getSimpleName() + ": auto updating result from editor."); //$NON-NLS-1$
+//								
+//								autoUpdateResultFromEditorParameters(); // auto updating result from Parameter annotations in result <=> editor
+//
+//								// Stores the last parameters before the computing to later auto-update the Widgets only if some parameters have changed 
+//								setLastComputingParameters(TXMEditor.this.getResult().getLastParametersFromHistory());
 							}
 						}
 					});
@@ -775,27 +821,9 @@
 								
 								refresh(update);
 								
-//								// refresh all opened editors
-//								// FIXME: update all open editors of the children result
-//								// FIXME: prob here is that updateEditorFromResult() doesn't enough because the compute() method does some other stuff
-//								// so the cascade computing may be done here rather than in TXMResult.compute() or we need to move some stuff from TXMEditor.compute() to
-//								// TXMEditor.updateEditorFromResult(), eg. the chart loading
-//								// WARNING: At This moment, with this code, TXMResult.compute() of the children is called twice
-//								for (IEditorReference reference : PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences()) {
-//									IEditorPart editor = reference.getEditor(false);
-//									if(editor != null && editor instanceof TXMEditor)	{
-//										TXMEditor txmEditor = ((TXMEditor)editor);
-//										//if (txmEditor.getResult().getParent() == this.getResult())	{
-//											Log.finest("TXMEditor.refresh(): updating editor for result: " + txmEditor.getResult().getSimpleName());
-//											//txmEditor.compute(false);
-//											//txmEditor.updateEditorFromResult(false);
-//											txmEditor.refresh(false);
-//										//}
-//									}
-//								}
-								
 								// focus in the main widget 
 								setFocus();
+
 							} catch (Exception e) {
 								Log.finest("TXMEditor.compute(): " + TXMEditor.this.getClass().getSimpleName() + ": Error while refreshing the editor: " + e); //$NON-NLS-1$
 								Log.printStackTrace(e);
@@ -831,6 +859,7 @@
 
 	/**
 	 * Opens an editor specified by its id, computes the specified result then refreshes the editor components.
+	 * If the editor was already opened, the computing is skipped and the focus is given to the editor.
 	 * 
 	 * @param result
 	 * @param editorPartId
@@ -842,6 +871,7 @@
 
 	/**
 	 * Opens an editor specified by its id, computes the result stored in the specified editor input then refreshes the editor components.
+	 * If the editor was already opened, the computing is skipped and the focus is given to the editor.
 	 * @param editorInput
 	 * @param editorId
 	 * @return
@@ -854,11 +884,11 @@
 			boolean wasAlreadyOpened = SWTEditorsUtils.isOpenEditor(editorInput, editorId);
 			// opening the editor
 			editor = (TXMEditor) page.openEditor(editorInput, editorId, true, IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID);
-			//editor.refresh(true);
 			// computing the result only if the editor wasn't already opened
 			if (!wasAlreadyOpened)	{
 				editor.compute(false);
-			} else {
+			}
+			else {
 				editor.setFocus();
 			}
 		}
@@ -870,7 +900,7 @@
 	}
 
 	/**
-	 * Synchronizes the editor with the result and refreshes the corpus view.
+	 * Synchronizes the editor from the result and refreshes the corpus view.
 	 * Also fires a dirty property change.
 	 * @param update
 	 * @throws Exception 
@@ -919,8 +949,61 @@
 		this.setDirty(false);
 
 		
-		
+		// FIXME: update all open editors of the children result
+		// FIXME: prob here is that updateEditorFromResult() doesn't enough because the compute() method does some other stuff
+		// so the cascade computing may be done here rather than in TXMResult.compute() or we need to move some stuff from TXMEditor.compute() to
+		// TXMEditor.updateEditorFromResult(), eg. the chart loading
+		// WARNING: At This moment, with this code, TXMResult.compute() of the children is called twice
+								for (IEditorReference reference : PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences()) {
+									IEditorPart editor = reference.getEditor(false);
 
+									// TXMEditor
+									if(editor != null && editor instanceof TXMEditor && editor != this)	{
+										TXMEditor txmEditor = ((TXMEditor)editor);
+										if(this.getResult().isChild(txmEditor.getResult()))	{
+											
+											
+											
+//											Log.finest("TXMEditor.refresh(): updating editor for result: " + txmEditor.getResult().getSimpleName());
+//											Log.finest("TXMEditor.refresh(): " + txmEditor.getClass().getSimpleName() + ": manually updating result from editor."); //$NON-NLS-1$
+//											txmEditor.updateResultFromEditor(); // subclasses manual result updating from editor fields
+//											// FIXME: DEbug
+//											Log.finest("TXMEditor.refresh(): " + txmEditor.getClass().getSimpleName() + ": auto updating result from editor."); //$NON-NLS-1$
+//											txmEditor.autoUpdateResultFromEditorParameters(); // auto updating result from Parameter annotations in result <=> editor
+											
+											txmEditor.synchronizeResultFromEditor();
+											
+											//txmEditor.compute(false);
+											//txmEditor.updateEditorFromResult(true);
+											txmEditor.refresh(true);
+										}
+									}
+									// TXMMultiPageEditor
+//									else if(editor != null && editor instanceof TXMMultiPageEditor && editor != this)	{
+//										TXMMultiPageEditor txmMultipageEditor = ((TXMMultiPageEditor)editor);
+//										for (int i = 0; i < txmMultipageEditor.getEditors().size(); i++) {
+//											if(txmMultipageEditor.getEditors().get(i) instanceof TXMEditor && txmMultipageEditor.getEditors().get(i) != this)	{
+//												TXMEditor txmEditor = ((TXMEditor)txmMultipageEditor.getEditors().get(i));
+//												if(this.getResult().isChild(txmEditor.getResult()))	{
+////													Log.finest("TXMEditor.refresh(): updating editor for result: " + txmEditor.getResult().getSimpleName());
+////													Log.finest("TXMEditor.refresh(): " + txmEditor.getClass().getSimpleName() + ": manually updating result from editor."); //$NON-NLS-1$
+////													txmEditor.updateResultFromEditor(); // subclasses manual result updating from editor fields
+////													// FIXME: DEbug
+////													Log.finest("TXMEditor.refresh(): " + txmEditor.getClass().getSimpleName() + ": auto updating result from editor."); //$NON-NLS-1$
+////													txmEditor.autoUpdateResultFromEditorParameters(); // auto updating result from Parameter annotations in result <=> editor
+////													//txmEditor.compute(false);
+////													//txmEditor.updateEditorFromResult(true);
+//													
+//													txmEditor.synchronizeResultFromEditor();
+//													
+//													//txmEditor.refresh(true);
+//												}
+//											}
+//										}
+//										
+//									}
+								}
+
 		notifyExtensions("notifyEndOfRefresh"); //$NON-NLS-1$
 	}
 
@@ -1098,7 +1181,7 @@
 
 				// FIXME: debug
 				if(object != null)	{
-					String message = "TXMEditor.autoUpdateEditorFieldsFromResult(): setting editor parameter " + parameter.key() + " = " + value; //$NON-NLS-1$ //$NON-NLS-2$
+					String message = "TXMEditor.autoUpdateEditorFieldsFromResult(): " + this.getClass().getSimpleName() + ": setting editor parameter " + parameter.key() + " = " + value; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 					if(value != null) {
 						message += " (" + value.getClass() + " to object " + object + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 					}
Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditor.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditor.java	(revision 1428)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditor.java	(revision 1429)
@@ -303,7 +303,9 @@
 	 */
 	public void activateContext()	{
 		IContextService contextService = (IContextService)getSite().getService(IContextService.class);
-		this.contextActivationToken = contextService.activateContext(CONTEXT_ID_CHART_EDITOR);
+		if(contextService != null)	{
+			this.contextActivationToken = contextService.activateContext(CONTEXT_ID_CHART_EDITOR);
+		}
 	}
 	
 
@@ -638,7 +640,7 @@
 	public ChartComposite getChartComposite() {
 		return chartComposite;
 	}
-
+	
 	/**
 	 * Gets the chart toolbar.
 	 * @return the chartToolBar
@@ -648,7 +650,6 @@
 	}
 
 	
-	
 	@Override
 	public T getResult()	{
 		return (T) this.getEditorInput().getResult();
Index: tmp/org.txm.ahc.core/src/org/txm/ahc/core/functions/AHC.java
===================================================================
--- tmp/org.txm.ahc.core/src/org/txm/ahc/core/functions/AHC.java	(revision 1428)
+++ tmp/org.txm.ahc.core/src/org/txm/ahc/core/functions/AHC.java	(revision 1429)
@@ -663,8 +663,12 @@
 		return numberOfClusters;
 	}
 
+	/**
+	 * Gets the parent lexical table.
+	 * @return the parent lexical table
+	 */
 	public LexicalTable getLexicalTable() {
-		return getParent().getLexicalTable();
+		return this.getParent().getLexicalTable();
 	}
 
 
@@ -676,21 +680,27 @@
 		//		buffer.append(this.method);
 		//		buffer.append(this.metric);
 		//		buffer.append(this.numberOfClusters);
-		return this.getName();
+		if(this.hasBeenComputedOnce)	{
+			return this.getName();	
+		}
+		else	{
+			return this.getEmptyName();
+		}
+		
 	}
 
 	@Override
-	public String getDetails() {
-		return NLS.bind(this.getName()+"\ncomputed with the {0} method and the {1} metric.", method, metric);
+	public String getName() {
+		return NLS.bind("{0} clusters of {1}", this.getNumberOfClusters(), this.columnsComputing ? "columns" : "rows");
 	}
 
+	
 	@Override
-	public String getName() {
-		return NLS.bind("{0} clusters of  ", this.getNumberOfClusters(), this.columnsComputing?"columns":"rows");
+	public String getDetails() {
+		return NLS.bind(this.getName() + "\ncomputed with the {0} method and the {1} metric.", method, metric);
 	}
 
 
-
 	/**
 	 * Gets the 2D rendering state.
 	 * If false, the rendering will be done in 3D.
@@ -714,9 +724,13 @@
 		return AHCCoreMessages.RESULT_TYPE;
 	}
 
+	/**
+	 * Gets the parent lexical table unit property.
+	 * @return the parent lexical table unit property
+	 */
 	public Property getUnitProperty() {
-		if (getLexicalTable() != null) {
-			return getLexicalTable().getProperty();
+		if (this.getLexicalTable() != null) {
+			return this.getLexicalTable().getProperty();
 		}
 		return null;
 	}
Index: tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/handlers/ComputeCA.java
===================================================================
--- tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/handlers/ComputeCA.java	(revision 1428)
+++ tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/handlers/ComputeCA.java	(revision 1429)
@@ -107,25 +107,6 @@
 						return null;
 					}
 
-					// FIXME: old version using dialog box for parameters
-					// ask property and Fmins and Vmax
-					//				String title = TXMUIMessages.bind(CAUIMessages.ComputeCorrespondanceAnalysisDialog_0, partition.getName());
-					//				CAParametersDialog d = new CAParametersDialog(window.getShell(), partition.getParent(), title);
-					//
-					//				if (d.open() == MessageDialog.OK) {
-					//					WordProperty property = d.getProperty();
-					//					int fMin = d.getFmin();
-					//					int vMax = d.getMaxLines();
-					//
-					//					Log.info(NLS.bind(CAUIMessages.computingCorrespondenceAnalysisOnP0WithPropertyP1, partition, property));
-					//
-					//					LexicalTable lexicalTable = new LexicalTable(partition);
-					//					lexicalTable.setParameters(property, fMin, vMax, null);
-					//					ca = new CA(lexicalTable);
-					//				} else { // aborted
-					//					return null;
-					//				}
-
 					// FIXME: SJ: temporary version before we fix the problems listed below
 					lexicalTable = new LexicalTable(partition);
 					lexicalTable.setParameters((WordProperty) partition.getCorpus().getDefaultProperty(), 20, 200, null);
@@ -133,7 +114,8 @@
 
 					// FIXME: SJ: new version, creating a, empty LT and an empty CA
 					// does not work at this time because of some problems in CAEditor (refreshing and components creation + eigenvalues computing)
-					//				ca = new CA(new LexicalTable(partition));
+//					lexicalTable = new LexicalTable(partition);
+//					ca = new CA(lexicalTable);
 				}
 				else if (selection instanceof PartitionIndex) {
 					PartitionIndex index = (PartitionIndex) selection;
Index: tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/CAEditor.java
===================================================================
--- tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/CAEditor.java	(revision 1428)
+++ tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/CAEditor.java	(revision 1429)
@@ -27,17 +27,12 @@
 //
 package org.txm.ca.rcp.editors;
 
-import java.awt.Component;
-import java.awt.event.ComponentEvent;
-import java.awt.event.ComponentListener;
-import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TableViewer;
@@ -46,7 +41,6 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.FormAttachment;
@@ -64,23 +58,19 @@
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.part.EditorPart;
 import org.txm.ca.core.chartsengine.base.CAChartCreator;
-import org.txm.ca.core.chartsengine.base.Utils;
 import org.txm.ca.core.functions.CA;
 import org.txm.ca.core.functions.Eigenvalues;
 import org.txm.ca.rcp.messages.CAUIMessages;
 import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
-import org.txm.chartsengine.rcp.editors.ChartEditorInput;
 import org.txm.chartsengine.rcp.editors.ChartEditor;
+import org.txm.chartsengine.rcp.editors.ChartEditorInput;
 import org.txm.core.results.TXMResult;
+import org.txm.rcp.editors.ITablableEditorInput;
 import org.txm.rcp.editors.SplitedGenericMultiPageEditor;
-import org.txm.rcp.editors.TXMEditor;
 import org.txm.rcp.editors.TXMMultiPageEditor;
 import org.txm.rcp.editors.TXMResultEditorInput;
-import org.txm.rcp.editors.ITablableEditorInput;
 import org.txm.rcp.editors.input.AbstractTablableEditorInput;
 import org.txm.rcp.messages.TXMUIMessages;
-import org.txm.statsengine.core.StatException;
-import org.txm.utils.logger.Log;
 
 // TODO: Auto-generated Javadoc
 /**
@@ -91,8 +81,6 @@
  */
 public class CAEditor extends TXMMultiPageEditor implements SplitedGenericMultiPageEditor {
 
-	/** The self. */
-	CAEditor self;
 
 	/** The ca. */
 	private CA ca;
@@ -103,9 +91,9 @@
 	protected EditorPart mainEditor;
 
 
-	private static String SEPARATOR = "SEPARATOR"; //$NON-NLS-1$
+	public static String SEPARATOR = "SEPARATOR"; //$NON-NLS-1$
 
-	private static String COL_TYPE = "Double"; //$NON-NLS-1$
+	public static String COL_TYPE = "Double"; //$NON-NLS-1$
 
 	/** The names. */
 	private List<String> names = Arrays.asList(new String[] {
@@ -121,7 +109,6 @@
 	 */
 	@Override
 	protected void createPages() {
-		self = this;
 		Composite container = this.getContainer();
 		final Composite parentContainer = container.getParent();
 
@@ -130,7 +117,7 @@
 		parentContainer.setLayout(new FormLayout());// change layout
 		final Sash sash = new Sash(parentContainer, SWT.VERTICAL);
 
-		Composite caChartComposite = new Composite(parentContainer, SWT.NONE);
+		Composite mainEditorComposite = new Composite(parentContainer, SWT.NONE);
 
 		FormData containerData = new FormData();
 		containerData.left = new FormAttachment(sash, 0);
@@ -158,29 +145,29 @@
 			}
 		});
 
-		FormData AFCgraphData = new FormData();
-		AFCgraphData.left = new FormAttachment(0, 0);
-		AFCgraphData.right = new FormAttachment(sash, 0);
-		AFCgraphData.top = new FormAttachment(0, 0);
-		AFCgraphData.bottom = new FormAttachment(100, 0);
-		caChartComposite.setLayoutData(AFCgraphData);// set new layout data
-		caChartComposite.setLayout(new FillLayout());
+		FormData CAFactorialMapChartFormData = new FormData();
+		CAFactorialMapChartFormData.left = new FormAttachment(0, 0);
+		CAFactorialMapChartFormData.right = new FormAttachment(sash, 0);
+		CAFactorialMapChartFormData.top = new FormAttachment(0, 0);
+		CAFactorialMapChartFormData.bottom = new FormAttachment(100, 0);
+		mainEditorComposite.setLayoutData(CAFactorialMapChartFormData);// set new layout data
+		mainEditorComposite.setLayout(new FillLayout());
 		// /////////////////////
 
 
 		editors = new ArrayList<EditorPart>();
 		inputs = new ArrayList<IEditorInput>();
 
-		TXMResultEditorInput cainput = (TXMResultEditorInput) getEditorInput();
-		this.ca = (CA) cainput.getResult();
+		TXMResultEditorInput caInput = (TXMResultEditorInput) getEditorInput();
+		this.ca = (CA) caInput.getResult();
 
-		setPartName(this.ca.getName());
+		//this.setPartName(this.ca.getName());
 
 		// Initialize the editor parts and editor inputs
 		this.initCAFactorialMapEditor();
-		this.initCASingularValuesTableEditor();
-		this.initRowsTableEditor();
-		this.initColumnsTableEditor();
+	//	this.initCASingularValuesTableEditor();
+//		this.initRowsTableEditor();
+//		this.initColumnsTableEditor();
 		this.initCASingularValuesBarChartEditor();
 
 
@@ -194,52 +181,52 @@
 			final CAFactorialMapChartEditor caFactorialMapEditorPart = (CAFactorialMapChartEditor) editors.get(0); 
 			this.mainEditor = caFactorialMapEditorPart;
 
-			IEditorSite site = createSite(caFactorialMapEditorPart);
+			IEditorSite site = this.createSite(caFactorialMapEditorPart);
 			// call init first so that if an exception is thrown, we have created no new widgets
-			caFactorialMapEditorPart.init(site, editors.get(0).getEditorInput());
+			caFactorialMapEditorPart.init(site, caFactorialMapEditorPart.getEditorInput());
 
 			// Set the parent multi pages editor of the CA factorial map editor to activate it from the child editor
 			caFactorialMapEditorPart.setParentMultiPagesEditor(this);
 
-			caFactorialMapEditorPart.createPartControl(caChartComposite);
+			caFactorialMapEditorPart.createPartControl(mainEditorComposite);
 			caFactorialMapEditorPart.refresh(false);
 
 			caFactorialMapEditorPart.addPropertyListener(new IPropertyListener() {
 				@Override
 				public void propertyChanged(Object source, int propertyId) {
-					self.handlePropertyChange(propertyId);
+					handlePropertyChange(propertyId);
 				}
 			});
 
-			// Axis unit square ratio constraint
-			caFactorialMapEditorPart.getComposite().getChartComponent().setSquareOffEnabled(true);
-			caFactorialMapEditorPart.getComposite().getChartComponent().squareOff();
-			Component chartComponent = (Component) caFactorialMapEditorPart.getComposite().getChartComponent();
-			// Axis unit square ratio constraint on resize
-			chartComponent.addComponentListener(new ComponentListener() {
+//			// Axis unit square ratio constraint
+//			caFactorialMapEditorPart.getComposite().getChartComponent().setSquareOffEnabled(true);
+//			caFactorialMapEditorPart.getComposite().getChartComponent().squareOff();
+//			Component chartComponent = (Component) caFactorialMapEditorPart.getComposite().getChartComponent();
+//			// Axis unit square ratio constraint on resize
+//			chartComponent.addComponentListener(new ComponentListener() {
+//
+//				@Override
+//				public void componentShown(ComponentEvent arg0) {
+//					// TODO Auto-generated method stub
+//				}
+//
+//				@Override
+//				public void componentResized(ComponentEvent e) {
+//					caFactorialMapEditorPart.getComposite().getChartComponent().squareOff();
+//				}
+//
+//				@Override
+//				public void componentMoved(ComponentEvent arg0) {
+//					// TODO Auto-generated method stub
+//				}
+//
+//				@Override
+//				public void componentHidden(ComponentEvent arg0) {
+//					// TODO Auto-generated method stub
+//				}
+//			});
 
-				@Override
-				public void componentShown(ComponentEvent arg0) {
-					// TODO Auto-generated method stub
-				}
 
-				@Override
-				public void componentResized(ComponentEvent e) {
-					caFactorialMapEditorPart.getComposite().getChartComponent().squareOff();
-				}
-
-				@Override
-				public void componentMoved(ComponentEvent arg0) {
-					// TODO Auto-generated method stub
-				}
-
-				@Override
-				public void componentHidden(ComponentEvent arg0) {
-					// TODO Auto-generated method stub
-				}
-			});
-
-
 		}
 		catch (Exception e1) {
 			org.txm.rcp.utils.Logger.printStackTrace(e1);
@@ -263,63 +250,62 @@
 
 
 		// Selection changed listener to highlight CA chart points from table lines selection
-		ISelectionChangedListener selectionChangedListener = new ISelectionChangedListener() {
+//		ISelectionChangedListener selectionChangedListener = new ISelectionChangedListener() {
+//
+//			@Override
+//			public void selectionChanged(SelectionChangedEvent e) {
+//				// Highlight points from table lines
+//				Table table = (Table) ((TableViewer) e.getSource()).getTable();
+//				String[] selectedLabels = new String[table.getSelectionCount()];
+//				TableItem[] selection = table.getSelection();
+//
+//				for (int i = 0; i < selection.length; i++)	{
+//					selectedLabels[i] = selection[i].getText();
+//				}
+//
+//				CAFactorialMapChartEditor chartEditor = (CAFactorialMapChartEditor) editors.get(0);
+//				((CAChartCreator) chartEditor.getResult().getChartCreator()).updateChartCAFactorialMapHighlightPoints(chartEditor.getChart(), (e.getSource() == getRowsInfosEditor().getViewer()), selectedLabels);
+//			}
+//		};
+//
+//		// Add selection listener to rows table to link editor with factorial map chart
+//		this.getRowsInfosEditor().getViewer().addSelectionChangedListener(selectionChangedListener);
+//		// Add selection listener to cols table to link editor with factorial map chart
+//		this.getColsInfosEditor().getViewer().addSelectionChangedListener(selectionChangedListener);
+//
+//		// Selection listeners to change chart items selection order from table sorting
+//		SelectionListener selectionListener = new SelectionListener() {
+//
+//			@Override
+//			public void widgetSelected(SelectionEvent e) {
+//				// Change chart items selection order
+//				CAFactorialMapChartEditor chartEditor = (CAFactorialMapChartEditor) editors.get(0); 
+//				((CAChartCreator) chartEditor.getResult().getChartCreator()).updateChartCAFactorialMapSetLabelItemsSelectionOrder(chartEditor.getChart(), getRowsInfosEditor().getOrdererLabels(), getColsInfosEditor().getOrdererLabels());
+//			}
+//
+//			@Override
+//			public void widgetDefaultSelected(SelectionEvent e) {
+//				// TODO Auto-generated method stub
+//
+//			}
+//		};
+//		// Add listener to column to link chart items selection order with table sorting order
+//		for(int i = 0; i < this.getRowsInfosEditor().getViewer().getTable().getColumnCount(); i++) {
+//			this.getRowsInfosEditor().getViewer().getTable().getColumn(i).addSelectionListener(selectionListener);
+//		}
+//		// Add listener to column to link chart items selection order with table sorting order
+//		for(int i = 0; i < this.getColsInfosEditor().getViewer().getTable().getColumnCount(); i++) {
+//			this.getColsInfosEditor().getViewer().getTable().getColumn(i).addSelectionListener(selectionListener);
+//		}
+//
+//
+//
+//		// Sets the parent multi pages editor of the singular values barplot to activate it from the child editor
+//		((ChartEditor)editors.get(4)).setParentMultiPagesEditor(this);
+//
+//
+//		this.setActivePage(LAST_EDITOR_USED);
 
-			@Override
-			public void selectionChanged(SelectionChangedEvent e) {
-				// Highlight points from table lines
-				Table table = (Table) ((TableViewer) e.getSource()).getTable();
-				String[] selectedLabels = new String[table.getSelectionCount()];
-				TableItem[] selection = table.getSelection();
-
-				for (int i = 0; i < selection.length; i++)	{
-					selectedLabels[i] = selection[i].getText();
-				}
-
-				CAFactorialMapChartEditor chartEditor = (CAFactorialMapChartEditor) editors.get(0);
-				((CAChartCreator) chartEditor.getResult().getChartCreator()).updateChartCAFactorialMapHighlightPoints(chartEditor.getChart(), (e.getSource() == getRowsInfosEditor().getViewer()), selectedLabels);
-			}
-		};
-
-		// Add selection listener to rows table to link editor with factorial map chart
-		this.getRowsInfosEditor().getViewer().addSelectionChangedListener(selectionChangedListener);
-		// Add selection listener to cols table to link editor with factorial map chart
-		this.getColsInfosEditor().getViewer().addSelectionChangedListener(selectionChangedListener);
-
-		// Selection listeners to change chart items selection order from table sorting
-		SelectionListener selectionListener = new SelectionListener() {
-
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				// Change chart items selection order
-				CAFactorialMapChartEditor chartEditor = (CAFactorialMapChartEditor) editors.get(0); 
-				((CAChartCreator) chartEditor.getResult().getChartCreator()).updateChartCAFactorialMapSetLabelItemsSelectionOrder(chartEditor.getChart(), getRowsInfosEditor().getOrdererLabels(), getColsInfosEditor().getOrdererLabels());
-			}
-
-			@Override
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// TODO Auto-generated method stub
-
-			}
-		};
-		// Add listener to column to link chart items selection order with table sorting order
-		for(int i = 0; i < this.getRowsInfosEditor().getViewer().getTable().getColumnCount(); i++) {
-			this.getRowsInfosEditor().getViewer().getTable().getColumn(i).addSelectionListener(selectionListener);
-		}
-		// Add listener to column to link chart items selection order with table sorting order
-		for(int i = 0; i < this.getColsInfosEditor().getViewer().getTable().getColumnCount(); i++) {
-			this.getColsInfosEditor().getViewer().getTable().getColumn(i).addSelectionListener(selectionListener);
-		}
-
-
-
-		// Sets the parent multi pages editor of the singular values barplot to activate it from the child editor
-		((ChartEditor)editors.get(4)).setParentMultiPagesEditor(this);
-
-
-
-		this.setActivePage(LAST_EDITOR_USED);
-
 		this.setPartName(this.getEditorInput().getName());
 	}
 
@@ -336,6 +322,14 @@
 		// Editor input
 		inputs.add(caFactorialMapEditorPart.getEditorInput());
 
+//		try {
+//			this.addPage(caFactorialMapEditorPart, caFactorialMapEditorPart.getEditorInput());
+//		}
+//		catch (PartInitException e) {
+//			// TODO Auto-generated catch block
+//			e.printStackTrace();
+//		}
+		
 	}
 
 	/**
@@ -350,8 +344,10 @@
 		}
 		
 		// Editor part
-		EigenvaluesChartEditor eigenvaluesEditor = new EigenvaluesChartEditor(SWTChartsComponentsProvider.getCurrent().createChartEditorInput(eigenvalues));
-		eigenvaluesEditor.compute(false);
+		//EigenvaluesChartEditor eigenvaluesEditor = new EigenvaluesChartEditor(SWTChartsComponentsProvider.getCurrent().createChartEditorInput(eigenvalues));
+		EigenvaluesChartEditor eigenvaluesEditor = new EigenvaluesChartEditor(new ChartEditorInput<Eigenvalues>(eigenvalues));
+		
+		//eigenvaluesEditor.compute(false);
 		editors.add(eigenvaluesEditor);
 
 		// Editor input
@@ -363,64 +359,9 @@
 	 */
 	public void initCASingularValuesTableEditor()	{
 		// Editor part
-		editors.add(new SingularValuesEditor());
-
-		// Editor input
-		ITablableEditorInput table = new AbstractTablableEditorInput() {
-			@Override
-			public String[] getColumnTitles() {
-				return new String[] {
-						CAUIMessages.CorrespondanceAnalysisEditorInput_4,
-						CAUIMessages.eigenvalue,
-						"%", CAUIMessages.CorrespondanceAnalysisEditorInput_11, "", ""}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-			}
-
-			@Override
-			public String[] getColumnTypes() {
-				return new String[] {
-						TXMUIMessages.integer,
-						COL_TYPE,
-						COL_TYPE,
-						COL_TYPE,
-						COL_TYPE,
-						SEPARATOR};
-			}
-
-			@Override
-			public IStructuredContentProvider getContentProvider() {
-				return new IStructuredContentProvider() {
-					@Override
-					public Object[] getElements(Object inputElement) {
-						CA ca = (CA) inputElement;
-						List<List<Object>> tabledata = ca.getSingularValuesInfos();
-						return tabledata.toArray();
-					}
-
-					@Override
-					public void dispose() {
-						// TODO Auto-generated method stub
-					}
-
-					@Override
-					public void inputChanged(Viewer viewer, Object oldInput,
-							Object newInput) {
-						// TODO Auto-generated method stub
-					}
-				};
-			}
-
-			@Override
-			public Object getInput() {
-				return ca;
-			}
-
-			@Override
-			public LabelProvider getLabelProvider() {
-				return new CASingularValueLabelProvider();
-			}
-		};
-
-		inputs.add(table);
+		SingularValuesEditor editor = new SingularValuesEditor(ca); 
+		editors.add(editor);
+		inputs.add(editor.getEditorInput());
 	}
 
 	/**
@@ -485,8 +426,7 @@
 					}
 
 					@Override
-					public void inputChanged(Viewer viewer, Object oldInput,
-							Object newInput) {
+					public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 						// TODO Auto-generated method stub
 					}
 				};
@@ -587,58 +527,8 @@
 		inputs.add(table);
 	}
 
-	/**
-	 * The Class CASingularValueLabelProvider.
-	 */
-	private class CASingularValueLabelProvider extends LabelProvider implements	ITableLabelProvider {
 
-		/**
-		 * Percent values number format.
-		 */
-		protected DecimalFormat percentValuesNumberFormat = new DecimalFormat(new String("0.00")); //$NON-NLS-1$
 
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
-		 */
-		@Override
-		public Image getColumnImage(Object element, int columnIndex) {
-			// TODO Auto-generated method stub
-			return null;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
-		 */
-		@Override
-		@SuppressWarnings("unchecked") //$NON-NLS-1$
-		public String getColumnText(Object element, int columnIndex) {
-			DecimalFormat f;
-			Object o = ((List<Object>) element).get(columnIndex);
-			switch (columnIndex) {
-			case 0: // factor
-				return o.toString();
-			case 1: // eigenvalue
-				if ((Double) o < 1) {
-					if ((Double) o < 0.0001)
-						f = new DecimalFormat("0.0000E00"); //$NON-NLS-1$
-					else
-						f = new DecimalFormat("0.0000"); //$NON-NLS-1$
-				} else {
-					f = new DecimalFormat("##########0.0000"); //$NON-NLS-1$
-				}
-				// FIXME: printf syntax tests
-				//return String.format("%.4f", o);
-				return f.format(o);
-			case 2: // percent
-			case 3: // cumul
-				return percentValuesNumberFormat.format(o);
-			default:
-				return ""; //$NON-NLS-1$
-			}
-		}
-	}
-
 	/**
 	 * Gets the CA.
 	 *
Index: tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/SingularValuesEditor.java
===================================================================
--- tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/SingularValuesEditor.java	(revision 1428)
+++ tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/SingularValuesEditor.java	(revision 1429)
@@ -27,31 +27,37 @@
 //
 package org.txm.ca.rcp.editors;
 
+import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.part.EditorPart;
+import org.txm.ca.core.functions.CA;
+import org.txm.ca.rcp.messages.CAUIMessages;
+import org.txm.core.results.TXMResult;
 import org.txm.rcp.StatusLine;
 import org.txm.rcp.editors.ITablableEditorInput;
+import org.txm.rcp.editors.TXMEditor;
 import org.txm.rcp.editors.TableKeyListener;
 import org.txm.rcp.editors.TableSorter;
+import org.txm.rcp.editors.input.AbstractTablableEditorInput;
 import org.txm.rcp.messages.TXMUIMessages;
 // TODO: Auto-generated Javadoc
 /**
@@ -59,19 +65,18 @@
  *
  * @author mdecorde
  */
-public class SingularValuesEditor extends EditorPart {
+public class SingularValuesEditor extends TXMEditor<CA> {
 
+
+
 	/** The ID. */
 	static public String ID = "org.txm.rcp.editors.TableEditor"; //$NON-NLS-1$
 
 	/** The viewer. */
 	private TableViewer viewer;
 
-	/** The i editor input. */
-	private IEditorInput iEditorInput;
-
 	/** The table input. */
-	private ITablableEditorInput tableInput;
+	//private ITablableEditorInput tableInput;
 
 	/** The columns. */
 	List<TableViewerColumn> columns = new ArrayList<TableViewerColumn>();
@@ -79,73 +84,147 @@
 	/** The table sorter. */
 	private TableSorter tableSorter;
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	@Override
-	public void doSave(IProgressMonitor monitor) {
-		// TODO Auto-generated method stub
-	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
+
+	/**
+	 * 
+	 * @param result
 	 */
-	@Override
-	public void doSaveAs() {
-		// TODO Auto-generated method stub
-	}
+	public SingularValuesEditor(TXMResult result) {
+		super(result);
+		
+//		// Editor input
+//		ITablableEditorInput table = new AbstractTablableEditorInput() {
+//			@Override
+//			public String[] getColumnTitles() {
+//				return new String[] {
+//						CAUIMessages.CorrespondanceAnalysisEditorInput_4,
+//						CAUIMessages.eigenvalue,
+//						"%", CAUIMessages.CorrespondanceAnalysisEditorInput_11, "", ""}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+//			}
+//
+//			@Override
+//			public String[] getColumnTypes() {
+//				return new String[] {
+//						TXMUIMessages.integer,
+//						CAEditor.COL_TYPE,
+//						CAEditor.COL_TYPE,
+//						CAEditor.COL_TYPE,
+//						CAEditor.COL_TYPE,
+//						CAEditor.SEPARATOR};
+//			}
+//
+//			@Override
+//			public IStructuredContentProvider getContentProvider() {
+//				return new IStructuredContentProvider() {
+//					@Override
+//					public Object[] getElements(Object inputElement) {
+//						CA ca = (CA) inputElement;
+//						List<List<Object>> tabledata = ca.getSingularValuesInfos();
+//						return tabledata.toArray();
+//					}
+//
+//					@Override
+//					public void dispose() {
+//						// TODO Auto-generated method stub
+//					}
+//
+//					@Override
+//					public void inputChanged(Viewer viewer, Object oldInput,
+//							Object newInput) {
+//						// TODO Auto-generated method stub
+//					}
+//				};
+//			}
+//
+//			@Override
+//			public Object getInput() {
+//				return SingularValuesEditor.this.getResult();
+//			}
+//
+//			@Override
+//			public LabelProvider getLabelProvider() {
+//				return new CASingularValueLabelProvider();
+//			}
+//		};
+//
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
-	 */
-	@Override
-	public void init(IEditorSite site, IEditorInput input)
-			throws PartInitException {
-		setSite(site);
-		setInput(input);
-		this.iEditorInput = input;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.EditorPart#isDirty()
+	
+	/**
+	 * The Class CASingularValueLabelProvider.
 	 */
-	@Override
-	public boolean isDirty() {
-		// TODO Auto-generated method stub
-		return false;
-	}
+	private class CASingularValueLabelProvider extends LabelProvider implements	ITableLabelProvider {
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
-	 */
-	@Override
-	public boolean isSaveAsAllowed() {
-		// TODO Auto-generated method stub
-		return false;
+		/**
+		 * Percent values number format.
+		 */
+		protected DecimalFormat percentValuesNumberFormat = new DecimalFormat(new String("0.00")); //$NON-NLS-1$
+
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+		 */
+		@Override
+		public Image getColumnImage(Object element, int columnIndex) {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+		 */
+		@Override
+		@SuppressWarnings("unchecked") //$NON-NLS-1$
+		public String getColumnText(Object element, int columnIndex) {
+			DecimalFormat f;
+			Object o = ((List<Object>) element).get(columnIndex);
+			switch (columnIndex) {
+			case 0: // factor
+				return o.toString();
+			case 1: // eigenvalue
+				if ((Double) o < 1) {
+					if ((Double) o < 0.0001)
+						f = new DecimalFormat("0.0000E00"); //$NON-NLS-1$
+					else
+						f = new DecimalFormat("0.0000"); //$NON-NLS-1$
+				} else {
+					f = new DecimalFormat("##########0.0000"); //$NON-NLS-1$
+				}
+				// FIXME: printf syntax tests
+				//return String.format("%.4f", o);
+				return f.format(o);
+			case 2: // percent
+			case 3: // cumul
+				return percentValuesNumberFormat.format(o);
+			default:
+				return ""; //$NON-NLS-1$
+			}
+		}
 	}
+	
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
-	 */
 	@Override
-	public void createPartControl(Composite parent) {
-		parent.setLayout(new FillLayout());
+	public void _createPartControl() throws Exception {
+		
+		this.parent.setLayout(new FillLayout());
 
-		if (!(iEditorInput instanceof ITablableEditorInput)) {
-			throw new IllegalArgumentException(TXMUIMessages.wrongInput);
-		}
-		tableInput = (ITablableEditorInput) iEditorInput;
+		//tableInput = (ITablableEditorInput) this.getEditorInput();
 
-		viewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL
-				| SWT.MULTI | SWT.FULL_SELECTION);
+		viewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION);
 		viewer.getTable().addKeyListener(new TableKeyListener(viewer));
 
 		Table table = viewer.getTable();
 		table.setHeaderVisible(true);
 		table.setLinesVisible(true);
 
-		String[] titles = tableInput.getColumnTitles();
+		String[] titles = new String[] {
+				CAUIMessages.CorrespondanceAnalysisEditorInput_4,
+				CAUIMessages.eigenvalue,
+				"%", CAUIMessages.CorrespondanceAnalysisEditorInput_11, "", ""}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$;
 
+		
 		for (int i = 0; i < titles.length; i++) {
 			final int index = i;
 			final TableViewerColumn column;
@@ -166,8 +245,7 @@
 
 			column.getColumn().addSelectionListener(new SelectionAdapter() {
 				@Override
-				public void widgetSelected(SelectionEvent e)
-				{
+				public void widgetSelected(SelectionEvent e) {
 					StatusLine.setMessage(TXMUIMessages.sortingColumn);
 					tableSorter.setColumn(index);
 					int dir = viewer.getTable().getSortDirection();
@@ -213,13 +291,52 @@
 		    });
 
 
+		
+		
 
-		viewer.setContentProvider(tableInput.getContentProvider());
-		viewer.setLabelProvider(tableInput.getLabelProvider());
-		viewer.setInput(tableInput.getInput());
+		//viewer.setContentProvider(tableInput.getContentProvider());
+		
+		
+		viewer.setContentProvider(ArrayContentProvider.getInstance());
+//		viewer.setContentProvider(new IStructuredContentProvider() {
+//			@Override
+//			public Object[] getElements(Object inputElement) {
+//				return ((CA) inputElement).getSingularValuesInfos().toArray();
+//			}
+//
+//			@Override
+//			public void dispose() {
+//				// TODO Auto-generated method stub
+//			}
+//
+//			@Override
+//			public void inputChanged(Viewer viewer, Object oldInput,
+//					Object newInput) {
+//				// TODO Auto-generated method stub
+//			}
+//		}
+//);
+		
+		
+		viewer.setLabelProvider(new CASingularValueLabelProvider());
+		
+		
+		
 
 		tableSorter = new TableSorter();
-		tableSorter.setColumnTypes(tableInput.getColumnTypes());
+		
+		//tableSorter.setColumnTypes(tableInput.getColumnTypes());
+		
+		
+		tableSorter.setColumnTypes(new String[] {
+				TXMUIMessages.integer,
+				CAEditor.COL_TYPE,
+				CAEditor.COL_TYPE,
+				CAEditor.COL_TYPE,
+				CAEditor.COL_TYPE,
+				CAEditor.SEPARATOR});
+		
+		
 		viewer.setSorter(tableSorter);
 
 		viewer.refresh();
@@ -234,6 +351,8 @@
 		}
 		viewer.getTable().setSortDirection(dir);
 		viewer.getTable().setSortColumn(columns.get(0).getColumn());
+
+		
 		viewer.refresh();
 
 		// Pack the columns except the bar plot column
@@ -242,8 +361,36 @@
 				viewer.getTable().getColumn(i).pack();
 			}
 		}
+		
 	}
 
+
+	@Override
+	public void setFocus() {
+		viewer.getControl().setFocus();
+	}
+
+
+	@Override
+	public void updateResultFromEditor() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public void updateEditorFromResult(boolean update) throws Exception {
+
+		try {
+			this.viewer.setInput(((CA)this.getResult()).getSingularValuesInfos().toArray());
+		}
+		catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			this.viewer.setInput(null);
+		}
+	}
+	
+	
 	/**
 	 * Creates the context menu.
 	 *
@@ -261,11 +408,4 @@
 		getSite().setSelectionProvider(tableViewer);
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
-	 */
-	@Override
-	public void setFocus() {
-		viewer.getControl().setFocus();
-	}
 }
\ No newline at end of file
Index: tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/CAFactorialMapChartEditor.java
===================================================================
--- tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/CAFactorialMapChartEditor.java	(revision 1428)
+++ tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/CAFactorialMapChartEditor.java	(revision 1429)
@@ -1,5 +1,9 @@
 package org.txm.ca.rcp.editors;
 
+import java.awt.Component;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CLabel;
 import org.eclipse.swt.events.SelectionEvent;
@@ -239,19 +243,49 @@
 		};
 		plansCombo.addSelectionListener(listener);
 
-		// advanced parameters
+		// parent parameters
 		// thresholds
-		if (!getResult().isParentVisible()) {
+		if (!this.getResult().isParentVisible()) {
 			ThresholdsGroup thresholdsGroup = new ThresholdsGroup(this.getExtendedParametersGroup(), SWT.NONE, this, true, false);
 			this.fMinSpinner = thresholdsGroup.getFMinSpinner();
 			this.vMaxSpinner = thresholdsGroup.getVMaxSpinner();
 			this.vMaxSpinner.setMinimum(1);
 		}
+		
 	}
 
 	@Override
 	public void updateEditorFromChart(boolean update) {
-		// nothing to do
+//		if(!update)	{
+//		// Axis unit square ratio constraint
+//		this.getComposite().getChartComponent().setSquareOffEnabled(true);
+//		this.getComposite().getChartComponent().squareOff();
+//		Component chartComponent = (Component) this.getComposite().getChartComponent();
+//		// Axis unit square ratio constraint on resize
+//		chartComponent.addComponentListener(new ComponentListener() {
+//
+//			@Override
+//			public void componentShown(ComponentEvent arg0) {
+//				// TODO Auto-generated method stub
+//			}
+//
+//			@Override
+//			public void componentResized(ComponentEvent e) {
+//				getComposite().getChartComponent().squareOff();
+//			}
+//
+//			@Override
+//			public void componentMoved(ComponentEvent arg0) {
+//				// TODO Auto-generated method stub
+//			}
+//
+//			@Override
+//			public void componentHidden(ComponentEvent arg0) {
+//				// TODO Auto-generated method stub
+//			}
+//		});
+//		}
+
 	}
 
 }
\ No newline at end of file
