Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/base/JFCTheme.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/base/JFCTheme.java	(revision 582)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/base/JFCTheme.java	(revision 583)
@@ -19,6 +19,7 @@
 import org.jfree.chart.LegendItemSource;
 import org.jfree.chart.StandardChartTheme;
 import org.jfree.chart.plot.CategoryPlot;
+import org.jfree.chart.plot.PiePlot;
 import org.jfree.chart.plot.Plot;
 import org.jfree.chart.plot.SpiderWebPlot;
 import org.jfree.chart.plot.XYPlot;
@@ -34,11 +35,9 @@
 import org.jfree.chart.renderer.xy.XYStepRenderer;
 import org.jfree.chart.title.LegendTitle;
 import org.txm.chartsengine.core.ChartsEngine;
-import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
 import org.txm.chartsengine.core.results.ChartResult;
 import org.txm.chartsengine.jfreechart.core.JFCChartsEngine;
 import org.txm.chartsengine.jfreechart.core.renderers.XYCardinalSplineRenderer;
-import org.txm.core.results.TXMResult;
 
 public class JFCTheme extends StandardChartTheme {
 
@@ -392,6 +391,7 @@
         		renderer.setSeriesPaint(i, palette.get(i));
 			}
     	}
+    	// SpiderPlot
     	else if(plot instanceof SpiderWebPlot)	{
     		SpiderWebPlot typedPlot = (SpiderWebPlot)plot;
     		palette = this.chartsEngine.getTheme().getPaletteFor(itemsColorsRenderingMode, typedPlot.getDataset().getRowCount());
@@ -399,6 +399,14 @@
         		typedPlot.setSeriesPaint(i, palette.get(i));
 			}
     	}
+    	// PiePlot
+    	else if(plot instanceof PiePlot)	{
+    		PiePlot typedPlot = (PiePlot)plot;
+    		palette = this.chartsEngine.getTheme().getPaletteFor(itemsColorsRenderingMode, typedPlot.getDataset().getItemCount());
+    		for(int i = 0; i < palette.size(); i++) {
+    			typedPlot.setSectionPaint(i, palette.get(i));
+    		}
+    	}
     	return palette;
     }
 
Index: tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/handlers/ComputeSpecifities.java
===================================================================
--- tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/handlers/ComputeSpecifities.java	(revision 582)
+++ tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/handlers/ComputeSpecifities.java	(revision 583)
@@ -87,10 +87,6 @@
 			else	{
 				LexicalTable lexicalTable = null;
 				
-				final Integer maxScore = TXMPreferences.getInt(SpecificitiesPreferences.MAX_SCORE, SpecificitiesPreferences.PREFERENCES_NODE);
-				int fMin = TXMPreferences.getInt(LexicalTablePreferences.F_MIN, LexicalTablePreferences.PREFERENCES_NODE);
-				int vMax = TXMPreferences.getInt(LexicalTablePreferences.V_MAX, LexicalTablePreferences.PREFERENCES_NODE);
-	
 				// creating from Partition
 				if (selection instanceof Partition) {
 					Partition partition = (Partition) selection;
@@ -113,7 +109,7 @@
 					Log.severe("Cannot compute Specificities with " + selection);
 					return null;
 				}
-				specificities = new Specificities(lexicalTable, maxScore);
+				specificities = new Specificities(lexicalTable);
 				
 			}
 			
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 582)
+++ tmp/org.txm.specificities.core/src/org/txm/specificities/core/functions/Specificities.java	(revision 583)
@@ -45,6 +45,7 @@
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.specificities.core.messages.SpecificitiesCoreMessages;
+import org.txm.specificities.core.preferences.SpecificitiesPreferences;
 import org.txm.specificities.core.statsengine.r.function.SpecificitiesR;
 import org.txm.statsengine.core.StatException;
 import org.txm.statsengine.core.data.Vector;
@@ -109,7 +110,7 @@
 	
 	
 	
-	@Parameter
+	@Parameter(key=SpecificitiesPreferences.MAX_SCORE)
 	protected int maxScore;
 	
 	
@@ -123,10 +124,9 @@
 	 * @throws CqiClientException the cqi client exception
 	 * @throws StatException the stat exception
 	 */
-	public Specificities(LexicalTable lexicalTable, int maxScore)	throws CqiClientException, StatException {
+	public Specificities(LexicalTable lexicalTable)	throws CqiClientException, StatException {
 		super(lexicalTable);
 		this.lexicalTable = lexicalTable;
-		this.maxScore = maxScore;
 	}
 	
 	@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 582)
+++ tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/results/ChartResult.java	(revision 583)
@@ -38,7 +38,7 @@
 	/**
 	 * To keep track of the parameters used for the last computing and to determine if the chart result is dirty. 
 	 */
-	protected HashMap<String, Object> lastRenderingParameters = new HashMap<String, Object>();
+	//protected HashMap<String, Object> lastRenderingParameters = new HashMap<String, Object>();
 
 	
 	/**
@@ -139,29 +139,29 @@
 
 	
 	
-	/**
-	 * Checks if a parameter value has changed since last rendering. 
-	 * @param key
-	 * @return
-	 */
-	public boolean hasRenderingParameterChanged(String key) {
-		if (key.isEmpty()) {
-			return false;
-		}
-		Object lastValue = this.lastRenderingParameters.get(key);
-		Object newValue = this.getRenderingParameter(key);
-		if (lastValue == null) {
-			if(newValue != null)	{
-				return true;
-			}
-			else	{
-				return false;
-			}
-		}
-		else {
-			return !lastValue.equals(newValue);
-		}
-	}
+//	/**
+//	 * Checks if a parameter value has changed since last rendering. 
+//	 * @param key
+//	 * @return
+//	 */
+//	public boolean hasRenderingParameterChanged(String key) {
+//		if (key.isEmpty()) {
+//			return false;
+//		}
+//		Object lastValue = this.lastRenderingParameters.get(key);
+//		Object newValue = this.getRenderingParameter(key);
+//		if (lastValue == null) {
+//			if(newValue != null)	{
+//				return true;
+//			}
+//			else	{
+//				return false;
+//			}
+//		}
+//		else {
+//			return !lastValue.equals(newValue);
+//		}
+//	}
 
 
 
@@ -252,68 +252,23 @@
 	
 	/**
 	 * Updates the parameters used for last rendering.
-	 * Loop through all inherited fields/parameters except those of the TXMResult class.
+	 * 
 	 * @throws Exception
 	 */
 	protected void updateLastRenderingParameters() throws Exception {
-
-		List<Field> fields = new ArrayList<Field>();
-		Class<?> clazz = this.getClass();
-		while (clazz != TXMResult.class) {
-			fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
-			clazz = clazz.getSuperclass();
-		}
-		
-		for (Field f : fields) {
-			Parameter parameter = f.getAnnotation(Parameter.class);
-			if (parameter == null || parameter.type() != Parameter.RENDERING) {
-				continue;
-			}
-			
-			String name;
-			if(!"".equals(parameter.key()))	{
-				name = parameter.key();
-			}
-			else	{
-				name = f.getName();
-			}
-			
-			f.setAccessible(true);
-			this.lastRenderingParameters.put(name, f.get(this));
-		}
+		this.updateLastParameters(Parameter.RENDERING);
 	}
 	
 	/**
-	 * 
+	 * Checks if a rendering parameter value has changed since last computing. 
 	 * @param key
 	 * @return
 	 */
-	protected Object getRenderingParameter(String key) {
-		List<Field> fields = new ArrayList<Field>();
-		Class<?> clazz = this.getClass();
-		while (clazz != Object.class) {
-			fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
-			clazz = clazz.getSuperclass();
-		}
-
-		for (Field f : fields) {
-			Parameter parameter = f.getAnnotation(Parameter.class);
-			if (parameter == null || parameter.type() != Parameter.RENDERING) {
-				continue;
-			}
-			f.setAccessible(true);
-			if (parameter.key().equals(key)) {
-				try {
-					return f.get(this);
-				}
-				catch (Exception e) {
-					e.printStackTrace();
-				}
-			}
-		}
-		return null;
+	public boolean hasRenderingParameterChanged(String key) {
+		return this.hasParameterChanged(key, Parameter.RENDERING);
 	}
 	
+	
 	public final boolean isChartDirtyFromHistory() throws Exception {
 		Class clazz = this.getClass();
 
@@ -325,7 +280,7 @@
 			}
 			
 			String name;
-			if(!"".equals(parameter.key()))	{
+			if(!parameter.key().isEmpty())	{
 				name = parameter.key();
 			}
 			else	{
@@ -333,7 +288,7 @@
 			}
 			
 			f.setAccessible(true); // not to set accessible to test the field values
-			Object previousValue = this.lastRenderingParameters.get(name);
+			Object previousValue = this.lastParameters.get(name);
 			Object newValue = f.get(this);
 			this.updateChartDirty(previousValue, newValue);
 			if (this.chartDirty) {
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 582)
+++ tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 583)
@@ -92,7 +92,7 @@
 	/**
 	 * To keep track of the parameters used for the last computing and to determine if the result is dirty. 
 	 */
-	protected HashMap<String, Object> lastComputingParameters = new HashMap<String, Object>();
+	protected HashMap<String, Object> lastParameters = new HashMap<String, Object>();
 
 	
 	
@@ -131,9 +131,6 @@
 		// loads parameters from local result node, current command preferences or default command preferences
 		try {
 			this.loadGenericParameters();
-			
-			// FIXME: debug
-			System.err.println("TXMResult.TXMResult(): loading parameters into fields.");
 			this.loadParameters();
 		}
 		catch (Exception e) {
@@ -157,20 +154,40 @@
 		return this.children.size() > 0;
 	}
 
+	
 	/**
-	 * Stores the last parameters used for computing.
+	 * Returns all the member fields of the class instance.
+	 * @return
+	 */
+	protected List<Field> getAllFields()	{
+
+		List<Field> fields = new ArrayList<Field>();
+		Class<?> clazz = this.getClass();
+		while (clazz != Object.class) {
+			fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
+			clazz = clazz.getSuperclass();
+		}
+
+		return fields;
+		
+	}
+	
+	/**
+	 * Stores the parameters of the specified type used for last computing.
 	 * @throws Exception
 	 */
-	protected void updateLastComputingParameters() throws Exception {
-		Field[] fields = this.getClass().getDeclaredFields();
+	protected void updateLastParameters(int parameterType) throws Exception {
+		
+		List<Field> fields = this.getAllFields();
+		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
-			if (parameter == null || parameter.type() != Parameter.COMPUTING) {
+			if (parameter == null || parameter.type() != parameterType) {
 				continue;
 			}
 			
 			String name;
-			if(!"".equals(parameter.key()))	{
+			if(!parameter.key().isEmpty())	{
 				name = parameter.key();
 			}
 			else	{
@@ -178,34 +195,47 @@
 			}
 			
 			f.setAccessible(true);
-			this.lastComputingParameters.put(name, f.get(this));
+			this.lastParameters.put(name, f.get(this));
 		}
 	}
 
+	
+	/**
+	 * Stores the last parameters used for computing.
+	 * @throws Exception
+	 */
+	protected void updateLastParameters() throws Exception {
+		this.updateLastParameters(Parameter.COMPUTING);
+	}
+	
 	// FIXME: not used?
-	public HashMap<String, Object> getLastComputingParameters() {
-		return lastComputingParameters;
+	public HashMap<String, Object> getLastParameters() {
+		return lastParameters;
 	}
 
 
 	
 	/**
-	 * Gets a current parameter specified by its annotation "key" attribute.
+	 * Gets a current parameter specified by its annotation "key" attribute and its annotation "type" attribute.
 	 * @param key
+	 * @param parameterType
 	 * @return
 	 */
-	protected Object getParameter(String key) {
-		Field[] fields = this.getClass().getDeclaredFields();
+	protected Object getParameter(String key, int parameterType) {
+
+		List<Field> fields = this.getAllFields();
+		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
-			if (parameter == null || parameter.type() != Parameter.COMPUTING) {
+			if (parameter == null || parameter.type() != parameterType) {
 				continue;
 			}
 			f.setAccessible(true);
 			if (parameter.key().equals(key)) {
 				try {
 					return f.get(this);
-				} catch (Exception e) {
+				}
+				catch (Exception e) {
 					e.printStackTrace();
 				}
 			}
@@ -213,19 +243,45 @@
 		return null;
 	}
 
+	
 	/**
-	 * Checks if a parameter value has changed since last computing. 
+	 * Gets a current computing parameter specified by its annotation "key" attribute.
 	 * @param key
 	 * @return
 	 */
+	protected Object getParameter(String key) {
+		return this.getParameter(key, Parameter.COMPUTING);
+	}
+
+	
+	/**
+	 * Checks if a computing parameter value has changed since last computing. 
+	 * @param key
+	 * @return
+	 */
 	public boolean hasParameterChanged(String key) {
+		return this.hasParameterChanged(key, Parameter.COMPUTING);
+	}
+	
+	/**
+	 * Checks if a parameter value has changed since last computing.
+	 * @param key
+	 * @param parameterType
+	 * @return
+	 */
+	public boolean hasParameterChanged(String key, int parameterType) {
 		if (key.isEmpty()) {
 			return false;
 		}
-		Object lastValue = this.lastComputingParameters.get(key);
-		Object newValue = getParameter(key);
-		if (lastValue == null && newValue != null) {
-			return true;
+		Object lastValue = this.lastParameters.get(key);
+		Object newValue = this.getParameter(key, parameterType);
+		if (lastValue == null) {
+			if(newValue != null)	{
+				return true;
+			}
+			else	{
+				return false;
+			}
 		}
 		else {
 			return !lastValue.equals(newValue);
@@ -233,6 +289,24 @@
 	}
 
 	
+//
+//		
+//		
+//		
+//		if (key.isEmpty()) {
+//			return false;
+//		}
+//		Object lastValue = this.lastComputingParameters.get(key);
+//		Object newValue = getParameter(key);
+//		if (lastValue == null && newValue != null) {
+//			return true;
+//		}
+//		else {
+//			return !lastValue.equals(newValue);
+//		}
+//	}
+
+	
 	public String dumpPreferences()	{
 		
 		StringBuilder str = new StringBuilder();
@@ -344,7 +418,7 @@
 			}
 			
 			f.setAccessible(true); // not to set accessible to test the field values
-			Object previousValue = this.lastComputingParameters.get(name);
+			Object previousValue = this.lastParameters.get(name);
 			Object newValue = f.get(this);
 			
 			// FIXME: debug
@@ -548,14 +622,9 @@
 	protected boolean loadGenericParameters(int parameterType) throws Exception {
 		
 		// FIXME: debug
-		System.err.println("TXMResult.loadGenericParameters(): loading generic parameters into fields.");
+		System.err.println("TXMResult.loadGenericParameters(): loading generic parameters into fields for " + this.getClass() + " and parameters type = " + parameterType);
 		
-		List<Field> fields = new ArrayList<Field>();
-		Class<?> clazz = this.getClass();
-		while (clazz != Object.class) {
-			fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
-			clazz = clazz.getSuperclass();
-		}
+		List<Field> fields = this.getAllFields();
 
 		for (Field f : fields) {
 		
@@ -565,16 +634,8 @@
 			}
 			String key = parameter.key();
 			
-			// FIXME:  debug
-			if(key.equals("charts_engine_show_title"))	{
-				System.out.println("TXMResult.loadGenericParameters() " + key);
-				System.out.println("TXMResult.loadGenericParameters() class = " + f.getType());
-				System.out.println("TXMResult.loadGenericParameters() test = " + f.getType().isAssignableFrom(boolean.class));
-			}
-			
-			
 			if (key.isEmpty()) {
-				continue; // no preference key defined
+				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
@@ -1227,7 +1288,7 @@
 			return false;
 		}
 
-		this.updateLastComputingParameters(); // store last used parameters
+		this.updateLastParameters(); // store last used parameters
 
 		if (!this.saveParameters()) {
 			System.out.println("Warning: failed to save parameters for " + this.getName() + ".");
