Index: tmp/org.txm.ahc.rcp/src/org/txm/ahc/rcp/editors/AHCChartEditor.java
===================================================================
--- tmp/org.txm.ahc.rcp/src/org/txm/ahc/rcp/editors/AHCChartEditor.java	(revision 1081)
+++ tmp/org.txm.ahc.rcp/src/org/txm/ahc/rcp/editors/AHCChartEditor.java	(revision 1082)
@@ -105,7 +105,7 @@
 	@Override
 	public void updateEditorFromChart(boolean update) {
 		
-		// Update the maximum value of the number of clusters spinner according to the new CAH configuration 
+		// Update the maximum value of the number of clusters spinner according to the new AHC configuration 
 		this.numberOfClusters.setMaximum(this.getResult().getMaxClustersCount());
 
 		// Updates the current value of the number of clusters spinner
Index: tmp/org.txm.ahc.rcp/src/org/txm/ahc/rcp/handlers/ComputeAHC.java
===================================================================
--- tmp/org.txm.ahc.rcp/src/org/txm/ahc/rcp/handlers/ComputeAHC.java	(revision 1081)
+++ tmp/org.txm.ahc.rcp/src/org/txm/ahc/rcp/handlers/ComputeAHC.java	(revision 1082)
@@ -65,7 +65,6 @@
 	@Override
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 
-
 		if(!this.checkStatsEngine()) {
 			return null;
 		}
@@ -85,15 +84,7 @@
 		// creates from LexicalTable
 		else if (selection instanceof LexicalTable) {
 			LexicalTable lexicaltable = (LexicalTable) selection;
-			
-			try {
-				ahc = new AHC(new CA(lexicaltable));
-			} catch (StatException e) {
-				Log.severe("Failed to build the CA with lexical table " + lexicaltable + ": " + e);
-				Log.printStackTrace(e);
-			}
-			lexicaltable.addChild(ahc);
-			
+			ahc = new AHC(new CA(lexicaltable));
 		}
 		// creates from Partition
 		else if (selection instanceof Partition) {
@@ -120,8 +111,9 @@
 					
 					LexicalTable lexicaltable = new LexicalTable(partition, property, fMin, vMax); // use the CAPreferencePage Fmin
 					ahc = new AHC(new CA(lexicaltable));
-				} else {
-					// canceled
+				}
+				// canceled
+				else {
 					return null;
 				}
 			} catch (Exception e) {
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 1081)
+++ tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 1082)
@@ -1642,7 +1642,7 @@
 			// SJ: other way, test the object itself
 			if (parent != null && !parent.hasBeenComputedOnce()) { 
 				if (!this.parent.compute(monitor, false, updateLastParameters)) {
-					Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": failed to compute parent result.");
+					Log.severe("TXMResult.compute(): " + this.getClass().getSimpleName() + ": failed to compute parent result.");
 
 					//return false;
 				}
Index: tmp/org.txm.specificities.core/src/org/txm/specificities/core/functions/Specificities.java
===================================================================
--- tmp/org.txm.specificities.core/src/org/txm/specificities/core/functions/Specificities.java	(revision 1081)
+++ tmp/org.txm.specificities.core/src/org/txm/specificities/core/functions/Specificities.java	(revision 1082)
@@ -198,8 +198,7 @@
 		if(this.lexicalTable.hasBeenComputedOnce())	{
 			SpecificitiesR rSpecificities = new SpecificitiesR(this.lexicalTable.getData());
 			double[][] specIndex = rSpecificities.getScores();
-	
-			
+
 			if (this.lexicalTable.getPartition() != null) {
 				init(symbol, specIndex, this.unitProperty.getName()); 
 			}
Index: tmp/org.txm.ca.core/src/org/txm/ca/core/functions/CA.java
===================================================================
--- tmp/org.txm.ca.core/src/org/txm/ca/core/functions/CA.java	(revision 1081)
+++ tmp/org.txm.ca.core/src/org/txm/ca/core/functions/CA.java	(revision 1082)
@@ -128,7 +128,7 @@
 	 * @param lexicalTable the lexical table
 	 * @throws StatException stat exception if the structure can not be created in R statistics engine.
 	 */
-	public CA(LexicalTable lexicalTable) throws StatException {
+	public CA(LexicalTable lexicalTable) {
 		this(null, lexicalTable);
 	}
 	
@@ -138,7 +138,7 @@
 	 * @param lexicalTable the lexical table
 	 * @throws StatException stat exception if the structure can not be created in R statistics engine.
 	 */
-	public CA(String uuid) throws StatException {
+	public CA(String uuid) {
 		this(uuid, null);
 	}
 	
@@ -148,7 +148,7 @@
 	 * @param lexicalTable the lexical table
 	 * @throws StatException stat exception if the structure can not be created in R statistics engine.
 	 */
-	public CA(String uuid, LexicalTable lexicalTable) throws StatException {
+	public CA(String uuid, LexicalTable lexicalTable) {
 		super(uuid, lexicalTable);
 	}
 
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 1081)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java	(revision 1082)
@@ -871,7 +871,8 @@
 					// multiple
 					if(value instanceof List || value instanceof ArrayList)	{
 						((PropertiesSelector)object).setSelectedProperties((List) value);	
-					} else if(value instanceof ReferencePattern)	{
+					}
+					else if(value instanceof ReferencePattern)	{
 						((PropertiesSelector)object).setSelectedProperties(((ReferencePattern) value).getProperties());	
 					}
 					// single
@@ -987,7 +988,8 @@
 						// multiple
 						if (resultField.getType().isAssignableFrom(List.class))	{
 							value = new ArrayList(((PropertiesSelector)object).getSelectedProperties()); // need to copy the list otherwise the properties selector modify the result itself through reference	
-						} else if (resultField.getType().isAssignableFrom(ReferencePattern.class))	{
+						}
+						else if (resultField.getType().isAssignableFrom(ReferencePattern.class))	{
 							value = new ReferencePattern(((PropertiesSelector)object).getSelectedProperties()); // need to copy the list otherwise the properties selector modify the result itself through reference	
 						}
 						// single
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 1081)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditor.java	(revision 1082)
@@ -209,7 +209,7 @@
 	
 	/**
 	 * Synchronizes the editor with the chart result. 
-	 * Dedicated to dynamically change the editor components from the stored result.
+	 * Dedicated to dynamically change the editor components values from the stored result data.
 	 */
 	public abstract void updateEditorFromChart(boolean update);
 	
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 1081)
+++ tmp/org.txm.ahc.core/src/org/txm/ahc/core/functions/AHC.java	(revision 1082)
@@ -35,7 +35,6 @@
 import org.txm.ahc.core.preferences.AHCPreferences;
 import org.txm.ca.core.functions.CA;
 import org.txm.chartsengine.core.results.ChartResult;
-import org.txm.core.preferences.TXMPreferences;
 import org.txm.core.results.Parameter;
 import org.txm.core.results.TXMParameters;
 import org.txm.lexicaltable.core.functions.LexicalTable;
@@ -185,27 +184,25 @@
 	 */
 	public AHC(String uuid, CA ca)	{
 		super(uuid, ca);
-		this.ca = ca;
 	}
 
 	@Override
 	protected boolean _compute()	{
 
-		
 		Log.info("Computing CAH...");
 		try {
 			this.table = this.ca.getLexicalTable();
 			this.target = this.ca.getSymbol();
 
-			// reset the number of clusters to default
-			if(this.hasParameterChanged(AHCPreferences.COLUMNS_COMPUTING))	{
+			// reset the number of clusters to default if columns or rows computing has changed
+			if(this.lastParameters.get(AHCPreferences.COLUMNS_COMPUTING) != null && this.hasParameterChanged(AHCPreferences.COLUMNS_COMPUTING))	{
 				this.numberOfClusters = AHCPreferences.getInstance().getInt(AHCPreferences.N_CLUSTERS);
 			}
 
-			
 			String colOrLine = "columns"; //$NON-NLS-1$
-			if (!this.columnsComputing)
+			if (!this.columnsComputing) {
 				colOrLine ="rows"; //$NON-NLS-1$
+			}
 
 			if (this.symbol == null)	{
 				this.symbol = prefixR + (ahcCounter++);
@@ -232,19 +229,35 @@
 	}
 	
 	
-	
+	/**
+	 * 
+	 * @param columns
+	 * @param metric
+	 * @param nCluster
+	 * @param method
+	 */
 	public void setParameters(Boolean columns, String metric, Integer nCluster, String method) {
-		if (columns != null) this.columnsComputing = columns;
-		if (metric != null) this.metric = metric;
-		if (nCluster != null) this.numberOfClusters = nCluster;
-		if (method != null) this.method = method;
-		dirty = true;
+		if (columns != null) {
+			this.columnsComputing = columns;
+		}
+		if (metric != null) {
+			this.metric = metric;
+		}
+		if (nCluster != null) {
+			this.numberOfClusters = nCluster;
+		}
+		if (method != null) {
+			this.method = method;
+		}
+		this.dirty = true;
 	}
 
 
 	@Override
 	public boolean loadParameters() {
-		// nothing to do
+		if(this.ca == null)	{
+			this.ca = (CA) this.getParent();
+		}
 		return true;
 	}
 
@@ -254,11 +267,10 @@
 		return true;
 	}
 
-	
-	
 	@Override
 	public boolean canCompute() {
-		return this.ca != null
+		return
+				this.ca != null
 				&& Arrays.binarySearch(AHC.getMethods(), this.method) >= 0 
 				&& Arrays.binarySearch(AHC.getMetrics(), this.metric) >= 0
 				&& this.numberOfClusters >= 2;
