Index: tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesEditor.java
===================================================================
--- tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesEditor.java	(revision 1153)
+++ tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesEditor.java	(revision 1154)
@@ -41,6 +41,7 @@
 import org.eclipse.swt.widgets.TableColumn;
 import org.txm.Toolbox;
 import org.txm.core.messages.TXMCoreMessages;
+import org.txm.core.preferences.TXMPreferences;
 import org.txm.core.results.Parameter;
 import org.txm.rcp.editors.TXMEditor;
 import org.txm.rcp.editors.TableKeyListener;
@@ -82,7 +83,7 @@
 	/**
 	 * Unit property.
 	 */
-	@Parameter(key=SpecificitiesPreferences.UNIT_PROPERTY)
+	@Parameter(key=TXMPreferences.UNIT_PROPERTY)
 	protected PropertiesComboViewer unitPropertyComboViewer;
 	
 	/**
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 1153)
+++ tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 1154)
@@ -144,7 +144,7 @@
 	/**
 	 * To keep track of the parameters used for the last computing and to determine if the result is dirty. 
 	 */
-	protected HashMap<String, Object> lastParameters = new HashMap<String, Object>();
+	//protected HashMap<String, Object> lastParameters = new HashMap<String, Object>();
 
 	// 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.
@@ -204,7 +204,7 @@
 		}
 		else	{
 			try {
-				this.uniqueID = parametersNodePath.substring(parametersNodePath.lastIndexOf("/") + 1);
+				this.uniqueID = parametersNodePath.substring(parametersNodePath.lastIndexOf("/") + 1); //$NON-NLS-1$
 			}
 			// FIXME: essentially for the UUID "ROOT" defined in the Workspace class, see if we can do in another way
 			catch (Exception e) {
@@ -277,6 +277,7 @@
 		}
 		
 		try {
+			this.parametersHistory.add(new HashMap<String, Object>());
 			this.updateLastParameters();
 		}
 		catch (Exception e) {
@@ -411,10 +412,28 @@
 	 * @throws Exception
 	 */
 	protected void updateLastParameters(int parameterType) throws Exception {
+		this.updateLastParameters(parameterType, false);
+	}
 
-		// FIXME: SJ store in the history stack
-		HashMap<String, Object> lastParametersHistory = new HashMap<>();
+
+	/**
+	 * Stores the parameters of the specified type used for last computing.
+	 * @param parameterType
+	 * @param appendToLastParameters
+	 * @throws Exception
+	 */
+	protected void updateLastParameters(int parameterType, boolean appendToLastParameters) throws Exception {
+
+		// FIXME: SJ: store in the history stack
+		HashMap<String, Object> lastParameters;
 		
+		if(appendToLastParameters)	{
+			lastParameters = this.getLastParametersFromHistory();
+		}
+		else	{
+			lastParameters = new HashMap<>();
+		}
+		
 		List<Field> fields = this.getAllFields();
 
 		for (Field f : fields) {
@@ -432,15 +451,23 @@
 			}
 
 			f.setAccessible(true);
-			this.lastParameters.put(name, f.get(this));
-			
-			lastParametersHistory.put(name, f.get(this));
+			lastParameters.put(name, f.get(this));
 		}
 		
-		this.parametersHistory.add(lastParametersHistory);
+		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)	{
+			this.parametersHistory.remove(0);
+			this.parametersHistory.remove(0);
+			this.parametersHistory.remove(0);
+		}
+		
 	}
-
-
+	
 	/**
 	 * Stores the last parameters used for computing.
 	 * @throws Exception
@@ -473,7 +500,8 @@
 			}
 
 			f.setAccessible(true);
-			this.lastParameters.remove(name);
+			//this.lastParameters.remove(name);
+			this.getLastParametersFromHistory().remove(name);
 		}
 
 	}
@@ -489,13 +517,23 @@
 	}
 
 
-	public HashMap<String, Object> getLastParameters() {
-		return lastParameters;
+//	public HashMap<String, Object> getLastParameters() {
+//		return lastParameters;
+//	}
+//
+
+	/**
+	 * 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) {
+		return this.hasParameterChanged(key, this.parametersHistory.get(this.parametersHistory.size() - 2));
 	}
 
-
-
-
 	/**
 	 * Checks if a parameter value has changed since last computing.
 	 * @param key
@@ -503,7 +541,7 @@
 	 * @return
 	 */
 	public boolean hasParameterChanged(String key) {
-		return this.hasParameterChanged(key, this.lastParameters);
+		return this.hasParameterChanged(key, this.getLastParametersFromHistory());
 	}
 
 	/**
@@ -653,8 +691,6 @@
 	 */
 	public final boolean isDirtyFromHistory() throws Exception {
 		
-		//if (hasBeenComputedOnce) return false; // can't be dirty from history if the result has never been computed
-		
 		Class clazz = this.getClass();
 
 		Field[] fields = clazz.getDeclaredFields();
@@ -677,7 +713,14 @@
 			}
 
 			f.setAccessible(true); // to be able to test the field values
-			Object previousValue = this.lastParameters.get(name);
+			
+			
+			// FIXME: old version
+			//Object previousValue = this.lastParameters.get(name);
+			// FIXME: new version with stack
+			Object previousValue = this.getLastParametersFromHistory().get(name);
+			
+			
 			Object newValue = f.get(this);
 
 			// FIXME: debug
@@ -691,8 +734,13 @@
 		return this.dirty;
 	}
 
+	
+	public HashMap<String, Object> getLastParametersFromHistory()	{
+		return this.parametersHistory.get(this.parametersHistory.size() - 1);
+	}
+	
 	/**
-	 * Gets the dirty states.
+	 * Gets the dirty state.
 	 * 
 	 * @return
 	 */
@@ -701,8 +749,8 @@
 	}
 
 	/**
-	 * Marks the result as dirty so editors or others will know the TXMResult
-	 * needs to be recomputed.
+	 * 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.dirty = true;
Index: tmp/org.txm.core/src/java/org/txm/core/results/TXMParameters.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/results/TXMParameters.java	(revision 1153)
+++ tmp/org.txm.core/src/java/org/txm/core/results/TXMParameters.java	(revision 1154)
@@ -29,7 +29,7 @@
 		super();
 	}
 
-	//FIXME: use super.toString()? -> MD: nope super.toString() don't break lines
+	//FIXME: SJ: use super.toString()? -> MD: nope super.toString() don't break lines
 	public void dump()	{
 		Set<String> keys = this.keySet();
 		Iterator<String> it = keys.iterator();
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 1153)
+++ tmp/org.txm.ca.core/src/org/txm/ca/core/functions/CA.java	(revision 1154)
@@ -43,6 +43,7 @@
 import org.txm.core.results.Parameter;
 import org.txm.core.results.TXMParameters;
 import org.txm.lexicaltable.core.functions.LexicalTable;
+import org.txm.searchengine.cqp.corpus.Property;
 import org.txm.statsengine.core.StatException;
 import org.txm.utils.logger.Log;
 
@@ -964,4 +965,13 @@
 	}
 
 	
+	/**
+	 * Gets the unit property.
+	 * @return the unitProperty
+	 */
+	public Property getUnitProperty() {
+		return this.getLexicalTable().getProperty();
+	}
+
+	
 }
Index: tmp/org.txm.ca.core/src/org/txm/ca/core/chartsengine/jfreechart/themes/highcharts/chartcreators/JFCCAChartCreator.java
===================================================================
--- tmp/org.txm.ca.core/src/org/txm/ca/core/chartsengine/jfreechart/themes/highcharts/chartcreators/JFCCAChartCreator.java	(revision 1153)
+++ tmp/org.txm.ca.core/src/org/txm/ca/core/chartsengine/jfreechart/themes/highcharts/chartcreators/JFCCAChartCreator.java	(revision 1154)
@@ -87,15 +87,15 @@
 
 		
 		// recreate the dataset if the unit property has changed
-//		if(ca.getLexicalTable().hasParameterChanged(TXMPreferences.UNIT_PROPERTY))	{
-//			try {
-//				chart.getXYPlot().setDataset(new CAXYDataset(ca));
-//			}
-//			catch (Exception e) {
-//				// TODO Auto-generated catch block
-//				e.printStackTrace();
-//			} 
-//		}
+		if(ca.getLexicalTable().hasParameterChanged(TXMPreferences.UNIT_PROPERTY, true))	{
+			try {
+				chart.getXYPlot().setDataset(new CAXYDataset(ca));
+			}
+			catch (Exception e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} 
+		}
 
 		
 		CAItemSelectionRenderer renderer = (CAItemSelectionRenderer) chart.getXYPlot().getRenderer(); 
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 1153)
+++ tmp/org.txm.ahc.core/src/org/txm/ahc/core/functions/AHC.java	(revision 1154)
@@ -195,7 +195,7 @@
 			this.target = this.ca.getSymbol();
 
 			// 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))	{
+			if(this.hasParameterChanged(AHCPreferences.COLUMNS_COMPUTING))	{
 				this.numberOfClusters = AHCPreferences.getInstance().getInt(AHCPreferences.N_CLUSTERS);
 			}
 
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 1153)
+++ tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/CAFactorialMapChartEditor.java	(revision 1154)
@@ -5,16 +5,22 @@
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.ToolItem;
 import org.txm.ca.core.functions.CA;
 import org.txm.ca.core.preferences.CAPreferences;
 import org.txm.ca.rcp.messages.CAUIMessages;
 import org.txm.chartsengine.rcp.editors.ChartEditor;
 import org.txm.chartsengine.rcp.editors.ChartEditorInput;
+import org.txm.core.messages.TXMCoreMessages;
+import org.txm.core.preferences.TXMPreferences;
 import org.txm.core.results.Parameter;
 import org.txm.rcp.IImageKeys;
 import org.txm.rcp.editors.listeners.ComputeSelectionListener;
+import org.txm.rcp.swt.GLComposite;
+import org.txm.rcp.swt.widget.structures.PropertiesComboViewer;
+import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
+import org.txm.searchengine.cqp.corpus.CQPCorpus;
 
 /**
  * Correspondence analysis factorial map chart editor.
@@ -58,7 +64,15 @@
 	protected ToolItem showPointShapes;
 	
 	
+	/**
+	 * Unit property.
+	 */
+	@Parameter(key=TXMPreferences.UNIT_PROPERTY)
+	protected PropertiesComboViewer unitPropertyComboViewer;
 	
+
+	
+	
 	/**
 	 *
 	 * @param chartEditorInput
@@ -71,44 +85,63 @@
 	@Override
 	public void __createPartControl() {
 
-		// Extend the chart editor tool bar
-		new ToolItem(this.chartToolBar, SWT.SEPARATOR);
-
 		
-		// Show/hide columns
-		showIndividuals = new ToolItem(this.chartToolBar, SWT.CHECK);
-		// FIXME: keep this for offering an option "large icons" with text in buttons ?
-		//showColumns.setText(SWTComponentsProviderMessages.SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_COLUMS_LABEL);
-		showIndividuals.setToolTipText(CAUIMessages.CHART_TOOLBAR_BUTTON_SHOW_COLUMS_TOOLTIP);
-		showIndividuals.setImage(IImageKeys.getImage(CAFactorialMapChartEditor.class, "icons/show_columns.png")); //$NON-NLS-1$
-		showIndividuals.addSelectionListener(new ComputeSelectionListener(this));
+		try {
+			// Main parameters
+			GLComposite mainParametersArea = this.getMainParametersComposite();
+			mainParametersArea.getLayout().numColumns = 2;
+			
+			// unit property
+			new Label(mainParametersArea, SWT.NONE).setText(TXMCoreMessages.common_property);
+			this.unitPropertyComboViewer = new PropertiesComboViewer(mainParametersArea, this, true,
+					CQPCorpus.getFirstParentCorpus(this.getResult()).getOrderedProperties(),
+					this.getResult().getUnitProperty(), false);
 
-		// Show/hide rows
-		showVariables = new ToolItem(this.chartToolBar, SWT.CHECK);
-		// FIXME: keep this for offering an option "large icons" with text in buttons ?
-		//this.showRows.setText(SWTComponentsProviderMessages.SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_ROWS_LABEL);
-		showVariables.setToolTipText(CAUIMessages.CHART_TOOLBAR_BUTTON_SHOW_ROWS_TOOLTIP);
-		showVariables.setImage(IImageKeys.getImage(CAFactorialMapChartEditor.class, "icons/show_rows.png")); //$NON-NLS-1$
-		showVariables.addSelectionListener(new ComputeSelectionListener(this));
+		}
+		catch (CqiClientException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 
-		
-		// Show/hide point shapes
-		showPointShapes = new ToolItem(this.chartToolBar, SWT.CHECK);
-		// FIXME: keep this for offering an option "large icons" with text in buttons ?
-		//showPointShapes.setText(CAUIMessages.SHOW_HIDE_POINT_SHAPES);
-		showPointShapes.setToolTipText(CAUIMessages.CHART_TOOLBAR_BUTTON_SHOW_HIDE_POINT_SHAPES);
-		showPointShapes.setImage(IImageKeys.getImage(CAFactorialMapChartEditor.class, "icons/show_point_shapes.png")); //$NON-NLS-1$
-		showPointShapes.addSelectionListener(new ComputeSelectionListener(this));
+			
+			// Extend the chart editor tool bar
+			new ToolItem(this.chartToolBar, SWT.SEPARATOR);
 
-		
-		// Factors plane selection
-		CLabel factorsLabel = new CLabel(this.chartToolBar, SWT.CENTER);
-		factorsLabel.setText(CAUIMessages.CHART_TOOLBAR_AXES_SELECTION_COMBO_BOX_LABEL);
-		this.chartToolBar.addControl(factorsLabel);
-		
-	    final Combo plansCombo = new Combo(this.chartToolBar, SWT.READ_ONLY);
+			
+			// Show/hide columns
+			showIndividuals = new ToolItem(this.chartToolBar, SWT.CHECK);
+			// FIXME: keep this for offering an option "large icons" with text in buttons ?
+			//showColumns.setText(SWTComponentsProviderMessages.SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_COLUMS_LABEL);
+			showIndividuals.setToolTipText(CAUIMessages.CHART_TOOLBAR_BUTTON_SHOW_COLUMS_TOOLTIP);
+			showIndividuals.setImage(IImageKeys.getImage(CAFactorialMapChartEditor.class, "icons/show_columns.png")); //$NON-NLS-1$
+			showIndividuals.addSelectionListener(new ComputeSelectionListener(this));
 
-		// FIXME: commented because the infos panel is not ready to manage more axes
+			// Show/hide rows
+			showVariables = new ToolItem(this.chartToolBar, SWT.CHECK);
+			// FIXME: keep this for offering an option "large icons" with text in buttons ?
+			//this.showRows.setText(SWTComponentsProviderMessages.SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_ROWS_LABEL);
+			showVariables.setToolTipText(CAUIMessages.CHART_TOOLBAR_BUTTON_SHOW_ROWS_TOOLTIP);
+			showVariables.setImage(IImageKeys.getImage(CAFactorialMapChartEditor.class, "icons/show_rows.png")); //$NON-NLS-1$
+			showVariables.addSelectionListener(new ComputeSelectionListener(this));
+
+			
+			// Show/hide point shapes
+			showPointShapes = new ToolItem(this.chartToolBar, SWT.CHECK);
+			// FIXME: keep this for offering an option "large icons" with text in buttons ?
+			//showPointShapes.setText(CAUIMessages.SHOW_HIDE_POINT_SHAPES);
+			showPointShapes.setToolTipText(CAUIMessages.CHART_TOOLBAR_BUTTON_SHOW_HIDE_POINT_SHAPES);
+			showPointShapes.setImage(IImageKeys.getImage(CAFactorialMapChartEditor.class, "icons/show_point_shapes.png")); //$NON-NLS-1$
+			showPointShapes.addSelectionListener(new ComputeSelectionListener(this));
+
+			
+			// Factors plane selection
+			CLabel factorsLabel = new CLabel(this.chartToolBar, SWT.CENTER);
+			factorsLabel.setText(CAUIMessages.CHART_TOOLBAR_AXES_SELECTION_COMBO_BOX_LABEL);
+			this.chartToolBar.addControl(factorsLabel);
+			
+			final Combo plansCombo = new Combo(this.chartToolBar, SWT.READ_ONLY);
+
+			// FIXME: commented because the infos panel is not ready to manage more axes
 //		ArrayList<String> planes = null;
 //		try {
 //			int nbsv = ((CA) editorPart.getResultData()).getSingularValues().length;
@@ -127,75 +160,75 @@
 //		}
 //		String [] items = planes.toArray(new String[planes.size()]);
 
-		String items[] = { "(1,2)", "(1,3)", "(2,3)" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			String items[] = { "(1,2)", "(1,3)", "(2,3)" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 
-		// TODO : commented because the infos panel is not ready to manage more axes
-		//		if(couples != null && couples.size() > 3)	{
-		//			items = couples.toArray(new String[couples.size()]);
-		//}
+			// TODO : commented because the infos panel is not ready to manage more axes
+			//		if(couples != null && couples.size() > 3)	{
+			//			items = couples.toArray(new String[couples.size()]);
+			//}
 
 
-		plansCombo.setItems(items);
+			plansCombo.setItems(items);
 
-		// Preselect the plan from the CA data
-		if(this.getIntParameterValue(CAPreferences.FIRST_DIMENSION) == 2)	{
-			plansCombo.select(2);
-		}
-		else if(this.getIntParameterValue(CAPreferences.SECOND_DIMENSION) == 3)	{
-			plansCombo.select(1);
-		}
-		else	{
-			plansCombo.select(0);
-		}
+			// Preselect the plan from the CA data
+			if(this.getIntParameterValue(CAPreferences.FIRST_DIMENSION) == 2)	{
+				plansCombo.select(2);
+			}
+			else if(this.getIntParameterValue(CAPreferences.SECOND_DIMENSION) == 3)	{
+				plansCombo.select(1);
+			}
+			else	{
+				plansCombo.select(0);
+			}
 
 
-		this.chartToolBar.addControl(plansCombo);
-		
-		
-		
-		// Listeners
-		SelectionListener listener = new SelectionListener() {
+			this.chartToolBar.addControl(plansCombo);
 			
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-
-				boolean resetView = false;
+			
+			
+			// Listeners
+			SelectionListener listener = new SelectionListener() {
 				
-				// Change factors
-				if(e.getSource() == plansCombo)	{
+				@Override
+				public void widgetSelected(SelectionEvent e) {
 
-					Combo plans = (Combo) e.getSource();
+					boolean resetView = false;
+					
+					// Change factors
+					if(e.getSource() == plansCombo)	{
 
-					int dimension1 = 1;
-					int dimension2 = 2;
+						Combo plans = (Combo) e.getSource();
 
-					String str = plans.getItem(plans.getSelectionIndex());
-					str = str.substring(1, str.length() -1); // remove ( and )
-					String[] split = str.split(","); // 2 items //$NON-NLS-1$
-					dimension1 = Integer.parseInt(split[0]);
-					dimension2 = Integer.parseInt(split[1]);
+						int dimension1 = 1;
+						int dimension2 = 2;
 
-					getResult().setFirstDimension(dimension1);
-					getResult().setSecondDimension(dimension2);
+						String str = plans.getItem(plans.getSelectionIndex());
+						str = str.substring(1, str.length() -1); // remove ( and )
+						String[] split = str.split(","); // 2 items //$NON-NLS-1$
+						dimension1 = Integer.parseInt(split[0]);
+						dimension2 = Integer.parseInt(split[1]);
 
-					resetView = true;
+						getResult().setFirstDimension(dimension1);
+						getResult().setSecondDimension(dimension2);
+
+						resetView = true;
+					}
+					getResult().setChartDirty();
+					getResult().setNeedsToResetView(resetView);
+					compute(true);
+					// synchronize the part names
+					((CAEditor)getParentMultiPagesEditor()).setName(getResult().getName());
+					forceFocus();
 				}
-				getResult().setChartDirty();
-				getResult().setNeedsToResetView(resetView);
-				compute(true);
-				// synchronize the part names
-				((CAEditor)getParentMultiPagesEditor()).setName(getResult().getName());
-				forceFocus();
-			}
+				
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+					// TODO Auto-generated method stub
+				}
+			};
 			
-			@Override
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// TODO Auto-generated method stub
-			}
-		};
-		
-		
-		plansCombo.addSelectionListener(listener);
+			
+			plansCombo.addSelectionListener(listener);
 	
 	}
 
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 1153)
+++ tmp/org.txm.specificities.core/src/org/txm/specificities/core/functions/Specificities.java	(revision 1154)
@@ -757,7 +757,7 @@
 	 * @return the unitProperty
 	 */
 	public Property getUnitProperty() {
-		return getLexicalTable().getProperty();
+		return this.getLexicalTable().getProperty();
 	}
 
 	@Override
Index: tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/results/ChartResult.java
===================================================================
--- tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/results/ChartResult.java	(revision 1153)
+++ tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/results/ChartResult.java	(revision 1154)
@@ -186,12 +186,7 @@
 			return true;
 		}
 		
-		HashMap<String, Object> lastParameters = this.lastParameters;
-		if(this.parametersHistory.size() > 1)	{
-			lastParameters = this.parametersHistory.get(this.parametersHistory.size() - 2);
-		}
-		
-		return this.hasParameterChanged(key, lastParameters);
+		return super.hasParameterChanged(key);
 	}
 	
 	/**
@@ -255,10 +250,8 @@
 			// also before the call of this.updateLastParameters() to be able to check if a computing parameter has changed in the chart creators 
 			chartCreator.updateChart(this);
 			
-			this.updateLastParameters();
 			this.updateLastRenderingParameters();
 			
-			
 			this.needsToClearItemsSelection = false;
 			this.needsToResetView = false;
 			
@@ -288,7 +281,7 @@
 	 * @throws Exception
 	 */
 	protected void updateLastRenderingParameters() throws Exception {
-		this.updateLastParameters(Parameter.RENDERING);
+		this.updateLastParameters(Parameter.RENDERING, true);
 	}
 	
 	/**
@@ -325,7 +318,13 @@
 			}
 			
 			f.setAccessible(true); // not to set accessible to test the field values
-			Object previousValue = this.lastParameters.get(name);
+			
+			// FIXME: old version
+			//Object previousValue = this.lastParameters.get(name);
+			// FIXME: new version with stack
+			Object previousValue = this.getLastParametersFromHistory().get(name);
+			
+			
 			Object newValue = f.get(this);
 			this.updateChartDirty(previousValue, newValue);
 			if (this.chartDirty) {
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 1153)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java	(revision 1154)
@@ -634,7 +634,7 @@
 								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().getLastParameters());
+								setLastComputingParameters(TXMEditor.this.getResult().getLastParametersFromHistory());
 							}
 						}
 					});
