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 1157)
+++ tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 1158)
@@ -1009,6 +1009,8 @@
 				//					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);
 
 				// FIXME: Debug
@@ -1771,7 +1773,7 @@
 	 * @return
 	 * @throws Exception
 	 */
-	public boolean compute() throws Exception {
+	public boolean compute() {
 		return this.compute(null);
 	}
 
@@ -1782,7 +1784,7 @@
 	 * @return
 	 * @throws Exception
 	 */
-	public boolean compute(IProgressMonitor monitor) throws Exception {
+	public boolean compute(IProgressMonitor monitor) {
 		return this.compute(monitor, true);
 	}
 
@@ -1802,58 +1804,59 @@
 	 * @throws CqiClientExceptio
 	 * @throws IOException
 	 */
-	protected boolean compute(IProgressMonitor monitor, boolean deepComputing) throws Exception {
+	protected boolean compute(IProgressMonitor monitor, boolean deepComputing) {
 
-		// 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é 
-		boolean skipComputing = false;
+		try {
+			// 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é 
+			boolean skipComputing = false;
 
-		this.monitor = monitor;
+			this.monitor = monitor;
 
-		// TODO THIS IS FUCKING LAZY LINE CODES OH YEAH YOU MAD BRO
-		// TODO where do we put this parent compute ? :o
-		//		if (parent != null && !parent.getHasBeenComputedOnce()) { // parent must be computed at least one time
-		// SJ: other way, test the object itself
-		if (this.parent != null && !(this.parent instanceof Project)) {
-			if (!this.parent.compute(monitor, true)) {
-				Log.severe("TXMResult.compute(): " + this.getClass().getSimpleName() + ": failed to compute parent result.");
+			// TODO THIS IS FUCKING LAZY LINE CODES OH YEAH YOU MAD BRO
+			// TODO where do we put this parent compute ? :o
+			//		if (parent != null && !parent.getHasBeenComputedOnce()) { // parent must be computed at least one time
+			// SJ: other way, test the object itself
+			if (this.parent != null && !(this.parent instanceof Project)) {
+				if (!this.parent.compute(monitor, true)) {
+					Log.severe("TXMResult.compute(): " + this.getClass().getSimpleName() + ": failed to compute parent result.");
 
-				return false;
+					return false;
+				}
 			}
-		}
-		
-		boolean d0 = this.isDirty();
-		boolean d1 = this.needsFullRecomputing;
-		boolean d2 = this.isDirtyFromHistory();
-		boolean d3 = this.isDirty();
-		if (!d1 && 
-				!d2 && !d3) {
-			// needsFullRecomputing == true && isDirtyFromHistory == true && isDirty == true
-			Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": result parameters have not changed since last computing, computing skipped.");
-			skipComputing = true;
-		}
+			
+			boolean d0 = this.isDirty();
+			boolean d1 = this.needsFullRecomputing;
+			boolean d2 = this.isDirtyFromHistory();
+			boolean d3 = this.isDirty();
+			if (!d1 && 
+					!d2 && !d3) {
+				// needsFullRecomputing == true && isDirtyFromHistory == true && isDirty == true
+				Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": result parameters have not changed since last computing, computing skipped.");
+				skipComputing = true;
+			}
 
-		if(!skipComputing)	{
+			if(!skipComputing)	{
 
-			// FIXME: Debug
-			Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": computing result of type " + this.getClass() + "...");
+				// FIXME: Debug
+				Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": computing result of type " + this.getClass() + "...");
 
 
-			// Computing requirements test
-			if (!this.canCompute()) {
-				Log.severe("TXMResult.compute(): " + this.getClass().getSimpleName() + ": missing or wrong parameters, computing aborted.");
-				return false;
-			}
+				// Computing requirements test
+				if (!this.canCompute()) {
+					Log.severe("TXMResult.compute(): " + this.getClass().getSimpleName() + ": missing or wrong parameters, computing aborted.");
+					return false;
+				}
 
-			// Computing
-			if (!this._compute()) {
-				Log.severe("TXMResult.compute(): " + this.getClass().getSimpleName() + ": computing failed.");
-				return false;
+				// Computing
+				if (!this._compute()) {
+					Log.severe("TXMResult.compute(): " + this.getClass().getSimpleName() + ": computing failed.");
+					return false;
+				}
 			}
-		}
 
-		// clear the lazy name, no more needed since the object has been computed and getSimpleName() can now work
-		this.lazyName = null;
+			// 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
 //		if (updateLastParameters)	{
@@ -1873,63 +1876,69 @@
 //			TXMPreferences.flush(this);
 //		}
 
-		if(!skipComputing)	{
-			
-			// store last used parameters
-			this.updateLastParameters();
+			if(!skipComputing)	{
+				
+				// store last used parameters
+				this.updateLastParameters();
 
-			if (!this.autoSaveParametersFromAnnotations()) {
-				Log.severe("TXMResult.compute(): " + this.getClass().getSimpleName() + ": failed to save parameters from annotations for " + this.getName() + ".");
-			}
-			if (!this.saveParameters()) {
-				Log.severe("TXMResult.compute():" + this.getClass().getSimpleName() + ": failed to save parameters for " + this.getName() + ".");
-			}
+				if (!this.autoSaveParametersFromAnnotations()) {
+					Log.severe("TXMResult.compute(): " + this.getClass().getSimpleName() + ": failed to save parameters from annotations for " + this.getName() + ".");
+				}
+				if (!this.saveParameters()) {
+					Log.severe("TXMResult.compute():" + this.getClass().getSimpleName() + ": failed to save parameters for " + this.getName() + ".");
+				}
 
-			// file persistence flush
-			if (this.mustBePersisted()) {
-				TXMPreferences.flush(this);
-			}
-			
-			
-			this.dirty = false; // the computing was successful, the result is no more dirty
-			this.hasBeenComputedOnce = true; 
-			this.needsFullRecomputing = false;
-			
-			Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": computing of result type " + this.getClass() + " done.");
-			
-			// set the children as dirty since the result has changed
-			for (int i = 0; i < this.children.size(); i++) {
-				this.children.get(i).setDirty();
-			}
-			
-			// Children cascade computing ; if parent == null this is the Workspace
-			if (deepComputing && parent != null) {
-
-				Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": cascade computing of " + this.children.size() + " children.");
-
+				// file persistence flush
+				if (this.mustBePersisted()) {
+					TXMPreferences.flush(this);
+				}
 				
+				
+				this.dirty = false; // the computing was successful, the result is no more dirty
+				this.hasBeenComputedOnce = true; 
+				this.needsFullRecomputing = false;
+				
+				Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": computing of result type " + this.getClass() + " done.");
+				
+				// set the children as dirty since the result has changed
 				for (int i = 0; i < this.children.size(); i++) {
-					// FIXME: may be better to add a member needFullRecomputing in TXMResult?
-//					this.getChild(i).setDirty(); // force recomputing even if some parameters of the result itself have not changed
-					this.children.get(i).setNeedsFullRecomputing(true); // force recomputing even if some parameters of the result itself have not changed
-					
-					// recompute only children that has been opened once
-					//if (child.hasBeenComputedOnce()) {
-					this.children.get(i).compute(monitor, deepComputing);
-					//}
+					this.children.get(i).setDirty();
 				}
 				
-				// FIXME: SJ: this code generates concurrent modification excpetions when deep computing
-				// here for tests purpose
+				// Children cascade computing ; if parent == null this is the Workspace
+				if (deepComputing && parent != null) {
+
+					Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": cascade computing of " + this.children.size() + " children.");
+
+					
+					for (int i = 0; i < this.children.size(); i++) {
+						// FIXME: may be better to add a member needFullRecomputing in TXMResult?
+//					this.getChild(i).setDirty(); // force recomputing even if some parameters of the result itself have not changed
+						this.children.get(i).setNeedsFullRecomputing(true); // force recomputing even if some parameters of the result itself have not changed
+						
+						// recompute only children that has been opened once
+						//if (child.hasBeenComputedOnce()) {
+						this.children.get(i).compute(monitor, deepComputing);
+						//}
+					}
+					
+					// FIXME: SJ: this code generates concurrent modification excpetions when deep computing
+					// here for tests purpose
 //				for (TXMResult child : this.getChildren()) {
 //					child.setNeedsFullRecomputing(true); // force recomputing even if some parameters of the result itself have not changed
 //					// recompute only children that has been opened once
 //					child.compute(monitor, deepComputing);
 //				}
-				
+					
+				}
 			}
 		}
-			
+		catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			Log.severe("TXMResult.compute(): Exception occurs during computing.");
+			return false;
+		}
 
 		return true;
 	}
@@ -2244,14 +2253,4 @@
 	public ArrayList<HashMap<String, Object>> getParametersHistory() {
 		return parametersHistory;
 	}
-	
-	/**
-	 * 
-	 * @return the first parent which visible state is true
-	 */
-	public TXMResult getFirstVisibleParent() {
-		if (parent == null) return null;
-		else if (parent.isVisible()) return parent;
-		else return parent.getFirstVisibleParent();
-	}
 }
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 1157)
+++ tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/results/ChartResult.java	(revision 1158)
@@ -161,19 +161,25 @@
 	}
 	
 	@Override
-	public boolean compute(IProgressMonitor monitor) throws Exception {
+	public boolean compute(IProgressMonitor monitor) {
 
-		Log.finest("ChartResult.compute(): computing result of type " + this.getClass() + "...");
+		try {
+			Log.finest("ChartResult.compute(): computing result of type " + this.getClass() + "...");
 
-		// compute the result if needed
-		if(super.compute(monitor, true))	{
-			// compute the chart
-			return renderChart();
+			// compute the result if needed
+			if(super.compute(monitor, true))	{
+				// compute the chart
+				return renderChart();
+			}
+			else	{
+				return false;
+			}
 		}
-		else	{
+		catch (Exception e) {
+			e.printStackTrace();
+			Log.severe("ChartResult.compute(): Exception occurs during computing.");
 			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 1157)
+++ tmp/org.txm.specificities.core/src/org/txm/specificities/core/functions/Specificities.java	(revision 1158)
@@ -118,14 +118,6 @@
 	private CQPCorpus subCorpus = null;
 
 
-	
-	
-//	/**
-//	 * Unit property.
-//	 */
-//	@Parameter(key=TXMPreferences.UNIT_PROPERTY)
-//	protected Property unitProperty;
-	
 	/**
 	 * Maximum score.
 	 */
@@ -169,8 +161,7 @@
 	@Override
 	public boolean loadParameters() {
 		this.lexicalTable = (LexicalTable) this.parent;
-		//this.unitProperty = this.lexicalTable.getProperty();
-		this.lexicalTable.setVMaxFilter(Integer.MAX_VALUE);
+		this.lexicalTable.setVMaxFilter(Integer.MAX_VALUE); // FIXME: useless?
 		return true;
 	}
 
@@ -188,22 +179,11 @@
 
 		this.frequencies = null;
 
-		
-		// recompute the lexical table
-//		if(this.hasParameterChanged(TBXPreferences.UNIT_PROPERTY))	{
-//			this.lexicalTable.setUnitProperty(this.unitProperty);
-//			this.lexicalTable.compute(this);
-//		}
-		
 		// delete the specificities selection chart children since they can not be valid anymore
 		if (this.needsFullRecomputing || this.hasParameterChanged(TBXPreferences.UNIT_PROPERTY))	{
 			this.deleteChildren(SpecificitiesSelection.class);
 		}
 		
-
-		// essentially for cascade computing from the parent lexical table
-//		this.unitProperty = this.lexicalTable.getProperty();
-		
 		if (this.lexicalTable.hasBeenComputedOnce())	{
 			SpecificitiesR rSpecificities = new SpecificitiesR(this.lexicalTable.getData());
 			double[][] specIndex = rSpecificities.getScores();
Index: tmp/org.txm.rcp/OSGI-INF/l10n/bundle_fr.properties
===================================================================
--- tmp/org.txm.rcp/OSGI-INF/l10n/bundle_fr.properties	(revision 1157)
+++ tmp/org.txm.rcp/OSGI-INF/l10n/bundle_fr.properties	(revision 1158)
@@ -242,7 +242,7 @@
 command.name.3          = Convertir ancien fichier binaire
 command.name.30         = IndexToConcordances
 command.name.31         = Changer la langue
-command.name.32         = Progression
+command.name.32         = Calculer
 command.name.33         = Conserver
 command.name.34         = ExportSVG
 command.name.35         = ComputeCooccurrences
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/adapters/TXMResultAdapter.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/adapters/TXMResultAdapter.java	(revision 1157)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/adapters/TXMResultAdapter.java	(revision 1158)
@@ -63,11 +63,11 @@
 
 	@Override
     public RGB getForeground(Object element) {
-//		if(element instanceof TXMResult && !((TXMResult)element).hasBeenComputedOnce())	{
-//	    	Display display = Display.getCurrent();
-//	    	Color color = display.getSystemColor(SWT.COLOR_DARK_GRAY);
-//	    	return color.getRGB();
-//		}
+		if(TBXPreferences.getInstance().getBoolean(TBXPreferences.EXPERT_USER) && element instanceof TXMResult && !((TXMResult)element).hasBeenComputedOnce())	{
+	    	Display display = Display.getCurrent();
+	    	Color color = display.getSystemColor(SWT.COLOR_DARK_GRAY);
+	    	return color.getRGB();
+		}
 		// FIXME: DEbug
 //		else if(element instanceof TXMResult && ((TXMResult)element).isDirty())	{
 //	    	Display display = Display.getCurrent();
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 1157)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/listeners/ComputeSelectionListener.java	(revision 1158)
@@ -4,7 +4,7 @@
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
-import org.txm.core.preferences.TXMPreferences;
+import org.eclipse.swt.widgets.Spinner;
 import org.txm.core.results.TXMResult;
 import org.txm.rcp.editors.TXMEditor;
 import org.txm.rcp.preferences.RCPPreferences;
@@ -26,7 +26,10 @@
 
 	@Override
 	public void widgetSelected(SelectionEvent e) {
-		this.editor.compute(true);
+		// this method is called on a Spinner even when a key is pressed, that's not what we want, so this test breaks the behavior
+		if(!(e.getSource() instanceof Spinner) || e.stateMask != 0)	{
+			this.editor.compute(true);	
+		}
 	}
 
 	@Override
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/FloatSpinner.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/FloatSpinner.java	(revision 1157)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/FloatSpinner.java	(revision 1158)
@@ -38,8 +38,8 @@
 	 * Gets the selection as a float number.
 	 * @return
 	 */
-	public double getSelectionAsFloat() {
-		return (double) (super.getSelection() / Math.pow(10, this.getDigits()));
+	public float getSelectionAsFloat() {
+		return (float) (super.getSelection() / Math.pow(10, this.getDigits()));
 	}
 	
 	/**
Index: tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/functions/LexicalTable.java
===================================================================
--- tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/functions/LexicalTable.java	(revision 1157)
+++ tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/functions/LexicalTable.java	(revision 1158)
@@ -553,6 +553,7 @@
 			} catch (Exception e) {
 				// TODO Auto-generated catch block
 				e.printStackTrace();
+				return this.getEmptyName();
 			}
 			return strb.toString();
 			
Index: tmp/org.txm.index.core/src/org/txm/index/core/functions/Lexicon.java
===================================================================
--- tmp/org.txm.index.core/src/org/txm/index/core/functions/Lexicon.java	(revision 1157)
+++ tmp/org.txm.index.core/src/org/txm/index/core/functions/Lexicon.java	(revision 1158)
@@ -127,12 +127,6 @@
 	}
 
 	@Override
-	public CQPCorpus getParent() {
-		return (CQPCorpus)super.getParent();
-
-	}
-
-	@Override
 	public boolean loadParameters() throws Exception {
 		try {
 			String p = this.getStringParameterValue(TXMPreferences.UNIT_PROPERTY);
@@ -647,7 +641,7 @@
 		}
 		
 		// creating new Lexicon
-		if(lexicon == null || lexicon.getProperty() != property)	{
+		if(lexicon == null || !lexicon.getProperty().getFullName().equals(property.getFullName()))	{
 			lexicon = new Lexicon(corpus);
 			lexicon.setProperty(property);
 		}
@@ -701,8 +695,14 @@
 //		}
 //	}
 
+	@Override
+	public CQPCorpus getParent() {
+		return (CQPCorpus)super.getParent();
 
+	}
 
+
+
 	@Override
 	public String getResultype() {
 		return IndexCoreMessages.LEXICON_RESULT_TYPE;
