Index: TXM/trunk/org.txm.python.core/src/org/txm/python/core/PythonScriptEngine.java
===================================================================
--- TXM/trunk/org.txm.python.core/src/org/txm/python/core/PythonScriptEngine.java	(revision 3582)
+++ TXM/trunk/org.txm.python.core/src/org/txm/python/core/PythonScriptEngine.java	(revision 3583)
@@ -17,6 +17,7 @@
 import org.python.util.PythonInterpreter;
 import org.txm.Toolbox;
 import org.txm.core.engines.ScriptEngine;
+import org.txm.utils.logger.Log;
 
 public class PythonScriptEngine extends ScriptEngine {
 
@@ -74,21 +75,36 @@
 
 	private static IStatus runJython(ArrayList<String> cmd, HashMap<String, Object> env) {
 
-		PySystemState sys = Py.getSystemState();
-		sys.path.append(new PyString(Toolbox.getTxmHomePath()+"/scripts/python"));
-		sys.prefix = new PyString(Toolbox.getTxmHomePath()+"/scripts/python");
-		PythonInterpreter interpreter = new PythonInterpreter(null, sys);
-		
-		for (String s : env.keySet()) {
-			interpreter.set(s, env.get(s));
+		try {
+			PySystemState sys = Py.getSystemState();
+			//if (sys.path == null || !sys.path.asString().contains(Toolbox.getTxmHomePath()+"/scripts/python")) {
+			File sysdir = new File(Toolbox.getTxmHomePath()+"/scripts/python");
+			sysdir.mkdirs();
+				sys.path.append(new PyString(Toolbox.getTxmHomePath()+"/scripts/python"));
+			//}
+			//if (!sys.prefix.asString().equals(Toolbox.getTxmHomePath()+"/scripts/python")) {
+				sys.prefix = new PyString(Toolbox.getTxmHomePath()+"/scripts/python");
+			//}
+			
+			PythonInterpreter interpreter = new PythonInterpreter();
+			
+			for (String s : env.keySet()) {
+				interpreter.set(s, env.get(s));
+			}
+			if (cmd.get(0).equals("-c")) {
+				interpreter.exec(cmd.get(1));
+			} else {
+				interpreter.execfile(cmd.get(0));
+			}
+			interpreter.close();
+			return Status.OK_STATUS;
 		}
-		if (cmd.get(0).equals("-c")) {
-			interpreter.exec(cmd.get(1));
-		} else {
-			interpreter.execfile(cmd.get(0));
+		catch (Throwable e) {
+			Log.warning("Jython error: "+e);
+			e.printStackTrace();
+			return Status.CANCEL_STATUS;
 		}
-		interpreter.close();
-		return Status.OK_STATUS;
+		
 	}
 
 	private static IStatus runPython(ArrayList<String> cmd, HashMap<String, Object> env) {
@@ -131,7 +147,8 @@
 			}
 			System.out.println("Done.");
 		} catch (Exception e) {
-			e.printStackTrace();
+			Log.warning("Python error: "+e);
+			Log.printStackTrace(e);
 			return Status.CANCEL_STATUS;
 		}
 		return Status.OK_STATUS;
Index: TXM/trunk/org.txm.specificities.rcp/src/org/txm/specificities/rcp/handlers/ComputeSpecifictiesSelectionChart.java
===================================================================
--- TXM/trunk/org.txm.specificities.rcp/src/org/txm/specificities/rcp/handlers/ComputeSpecifictiesSelectionChart.java	(revision 3582)
+++ TXM/trunk/org.txm.specificities.rcp/src/org/txm/specificities/rcp/handlers/ComputeSpecifictiesSelectionChart.java	(revision 3583)
@@ -16,6 +16,7 @@
 import org.txm.specificities.core.functions.SpecificitiesSelection;
 import org.txm.specificities.rcp.editors.SpecifLine;
 import org.txm.specificities.rcp.editors.SpecificitiesEditor;
+import org.txm.utils.logger.Log;
 
 
 
@@ -40,6 +41,7 @@
 		if (selection instanceof SpecificitiesSelection && CorporaView.isActive()) { // test if the corpora view is active (otherwise, if a SpecificitiesSelection is selected, the creation from table
 																					 // lines bugs )
 			specificitiesSelection = (SpecificitiesSelection) selection;
+			open(specificitiesSelection);
 		}
 		// Creates from SpecificitiesEditor selected table lines
 		else {
@@ -48,34 +50,11 @@
 				IWorkbenchPage iwp = iww.getActivePage();
 				IEditorPart editor = iwp.getActiveEditor();
 				if (!(editor instanceof SpecificitiesEditor)) {
-					System.out.println("Editor is not a SpecificitiesEditor: " + editor.getClass());
+					Log.warning("Editor is not a SpecificitiesEditor: " + editor.getClass());
 					return null;
 				}
 				
-				Specificities specificities = ((SpecificitiesEditor) editor).getResult();
-				
-				IStructuredSelection tableSelection = (IStructuredSelection) ((SpecificitiesEditor) editor).getTableSelection();
-				Object[] tableLines = tableSelection.toArray();
-				
-				// no line selected
-				if (tableSelection.isEmpty()) {
-					return null;
-				}
-				
-				final String[] selectedTypeNames = new String[tableLines.length];
-				String[] partNames = specificities.getColumnsNames();
-				final double[][] selectedSpecificitiesIndices = new double[tableLines.length][partNames.length];
-				for (int i = 0; i < tableLines.length; i++) {
-					Object o = tableLines[i];
-					SpecifLine line = (SpecifLine)o;
-					selectedTypeNames[i] = line.name;
-					selectedSpecificitiesIndices[i] = line.specifs;
-				}
-				
-				specificitiesSelection = new SpecificitiesSelection(specificities);
-				
-				// Set the data to focus on
-				specificitiesSelection.setSelectedTypeNames(Arrays.asList(selectedTypeNames));
+				open((SpecificitiesEditor) editor);
 			}
 			catch (Exception e) {
 				System.out.println("Error while computing specificities bar chart: " + e.getLocalizedMessage());
@@ -83,10 +62,50 @@
 			}
 		}
 		
+		return null;
+	}
+	
+	public static void open(SpecificitiesEditor editor) {
 		
-		ChartEditor.openEditor(specificitiesSelection);
+		try {
+			
+			Specificities specificities = editor.getResult();
+			
+			IStructuredSelection tableSelection = (IStructuredSelection) ((SpecificitiesEditor) editor).getTableSelection();
+			Object[] tableLines = tableSelection.toArray();
+			
+			// no line selected
+			if (tableSelection.isEmpty()) {
+				return;
+			}
+			
+			final String[] selectedTypeNames = new String[tableLines.length];
+			String[] partNames = specificities.getColumnsNames();
+			final double[][] selectedSpecificitiesIndices = new double[tableLines.length][partNames.length];
+			for (int i = 0; i < tableLines.length; i++) {
+				Object o = tableLines[i];
+				SpecifLine line = (SpecifLine)o;
+				selectedTypeNames[i] = line.name;
+				selectedSpecificitiesIndices[i] = line.specifs;
+			}
+			
+			SpecificitiesSelection specificitiesSelection = new SpecificitiesSelection(specificities);
+			
+			// Set the data to focus on
+			specificitiesSelection.setSelectedTypeNames(Arrays.asList(selectedTypeNames));
+			
+			open(specificitiesSelection);
+		}
+		catch (Exception e) {
+			System.out.println("Error while computing specificities bar chart: " + e.getLocalizedMessage());
+			org.txm.utils.logger.Log.printStackTrace(e);
+		}
 		
-		return null;
 	}
 	
+	public static void open(SpecificitiesSelection specificitiesSelection) {
+		
+		ChartEditor.openEditor(specificitiesSelection);
+	}
+	
 }
Index: TXM/trunk/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesEditor.java
===================================================================
--- TXM/trunk/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesEditor.java	(revision 3582)
+++ TXM/trunk/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesEditor.java	(revision 3583)
@@ -34,6 +34,8 @@
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -61,6 +63,7 @@
 import org.txm.searchengine.cqp.corpus.WordProperty;
 import org.txm.specificities.core.functions.Specificities;
 import org.txm.specificities.core.preferences.SpecificitiesPreferences;
+import org.txm.specificities.rcp.handlers.ComputeSpecifictiesSelectionChart;
 import org.txm.specificities.rcp.messages.SpecificitiesUIMessages;
 import org.txm.statsengine.core.StatException;
 import org.txm.statsengine.r.core.messages.RCoreMessages;
@@ -191,6 +194,21 @@
 			
 			specificitesTable.setHeaderVisible(true);
 			
+			specificitesTable.addMouseListener(new MouseListener() {
+				
+				@Override
+				public void mouseUp(MouseEvent e) { }
+				
+				@Override
+				public void mouseDown(MouseEvent e) { }
+				
+				@Override
+				public void mouseDoubleClick(MouseEvent e) {
+					
+					ComputeSpecifictiesSelectionChart.open(SpecificitiesEditor.this);
+				}
+			});
+			
 			// Horizontal bar on second table takes up a little extra space.
 			// To keep vertical scroll bars in sink, force table1 to end above
 			// horizontal scrollbar
Index: TXM/trunk/org.txm.groovy.core/src/java/org/txm/groovy/core/GroovyScriptedImportEngine.java
===================================================================
--- TXM/trunk/org.txm.groovy.core/src/java/org/txm/groovy/core/GroovyScriptedImportEngine.java	(revision 3582)
+++ TXM/trunk/org.txm.groovy.core/src/java/org/txm/groovy/core/GroovyScriptedImportEngine.java	(revision 3583)
@@ -132,7 +132,7 @@
 			}
 			
 			ExecTimer.start();
-			Log.info(NLS.bind("Compiling {0} import module...", project.getImportModuleName()));
+			Log.info(NLS.bind("Compiling the \"{0}\" import module scripts...", project.getImportModuleName()));
 			Script s = gse.createScript(mainScript.toURI().toURL().toString(), binding);
 			Log.info(NLS.bind(GroovyMessages.startingTheP0importModule, project.getImportModuleName()));
 			s.run(); // run the groovy import script
@@ -182,7 +182,7 @@
 		catch (Exception e) {
 			// System.out.println(NLS.bind(TXMUIMessages.errorWhileRunningScriptColonP0, e));
 			Log.printStackTrace(e);
-			Log.warning("Import failed.");
+			Log.warning("Import failed: "+e);
 			return new Status(Status.ERROR, "org.txm.groovy.core", e.getMessage());
 		}
 		finally {
Index: TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/handlers/scripts/ExecuteScript.java
===================================================================
--- TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/handlers/scripts/ExecuteScript.java	(revision 3582)
+++ TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/handlers/scripts/ExecuteScript.java	(revision 3583)
@@ -64,6 +64,7 @@
 import org.txm.rcp.messages.TXMUIMessages;
 import org.txm.rcp.preferences.RCPPreferences;
 import org.txm.rcp.swt.dialog.LastOpened;
+import org.txm.utils.logger.Log;
 // TODO: Auto-generated Javadoc
 /**
  * Execute a script. It uses the file extension to execute it as Groovy or R
@@ -200,14 +201,15 @@
 		if ("groovy".equals(ext)) { // TODO make Groovy a script engine //$NON-NLS-1$
 			return ExecuteGroovyScript.executeScript(scriptpath, page, selection);
 		} else {
-			ScriptEngine se = (ScriptEngine) Toolbox.getEngineManager(EngineType.SCRIPT).getEngine(ext);
+			ScriptEnginesManager sem = (ScriptEnginesManager) Toolbox.getEngineManager(EngineType.SCRIPT);
+			ScriptEngine se = (ScriptEngine) sem.getEngineForExtension(ext);
 			if (se != null) {
 				HashMap<String, Object> env = new HashMap<String, Object>();
 				env.put("page", page); // selection //$NON-NLS-1$
 				env.put("selection", selection); // selection //$NON-NLS-1$
 				return se.executeScript(script, env, stringArgs);
 			} else {
-				System.out.println(TXMUIMessages.noInterpreterFoundForScriptFileExtension+script.getName());
+				Log.warning(TXMUIMessages.noInterpreterFoundForScriptFileExtension+script.getName());
 			}
 		}
 		
Index: TXM/trunk/org.txm.python.rcp/src/org/txm/python/rcp/PythonPreferencesPage.java
===================================================================
--- TXM/trunk/org.txm.python.rcp/src/org/txm/python/rcp/PythonPreferencesPage.java	(revision 3582)
+++ TXM/trunk/org.txm.python.rcp/src/org/txm/python/rcp/PythonPreferencesPage.java	(revision 3583)
@@ -31,8 +31,8 @@
 		
 		this.addField(new StringFieldEditor(PythonPreferences.HOME, "HOME", this.getFieldEditorParent()));
 		
-		this.addField(new StringFieldEditor(PythonPreferences.EXECUTABLE_NAME, "PERL executable name", this.getFieldEditorParent()));
+		this.addField(new StringFieldEditor(PythonPreferences.EXECUTABLE_NAME, "PYTHON executable path", this.getFieldEditorParent()));
 		
-		this.addField(new StringFieldEditor(PythonPreferences.ADDITIONAL_PARAMETERS, "PERL executable additional parameters", this.getFieldEditorParent()));
+		this.addField(new StringFieldEditor(PythonPreferences.ADDITIONAL_PARAMETERS, "PYTHON executable additional parameters", this.getFieldEditorParent()));
 	}
 }
