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 3517)
+++ TXM/trunk/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesEditor.java	(revision 3518)
@@ -204,8 +204,8 @@
 			TXMEditor.initContextMenu(this.specificitesTable, this.getSite(), this.viewer);
 			
 			// adjust UI to the original sorting
-			specificitesTable.setSortColumn(unitColumn);
-			specificitesTable.setSortDirection(SWT.UP);
+			//specificitesTable.setSortColumn(unitColumn);
+			//specificitesTable.setSortDirection(SWT.UP);
 			
 			if (!this.getResult().isParentVisible()) {
 				
Index: TXM/trunk/org.txm.analec.feature/feature.xml
===================================================================
--- TXM/trunk/org.txm.analec.feature/feature.xml	(revision 3517)
+++ TXM/trunk/org.txm.analec.feature/feature.xml	(revision 3518)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <feature
       id="org.txm.annotation.urs.feature"
-      label="URS Annotation (Unité-Relation-Schéma)"
+      label="URS Annotation (Unit-Relation-Schema)"
       version="1.0.0.qualifier"
       provider-name="Textometrie.org"
       license-feature="org.txm.rcp.feature"
@@ -33,7 +33,9 @@
 http://www.gnu.org/licenses
    </copyright>
 
-   <license url="http://www.example.com/license"> -</license>
+   <license url="http://www.example.com/license">
+      -
+   </license>
 
    <requires>
       <import plugin="org.eclipse.ui"/>
Index: TXM/trunk/org.txm.perl.core/src/org/txm/perl/core/PerlScriptEngine.java
===================================================================
--- TXM/trunk/org.txm.perl.core/src/org/txm/perl/core/PerlScriptEngine.java	(revision 3517)
+++ TXM/trunk/org.txm.perl.core/src/org/txm/perl/core/PerlScriptEngine.java	(revision 3518)
@@ -27,7 +27,29 @@
 
 	@Override
 	public boolean isRunning() {
-		return true;
+		
+		String path = PerlPreferences.getInstance().getString(PerlPreferences.HOME);
+		String perlRunner = PerlPreferences.getInstance().getString(PerlPreferences.EXECUTABLE_NAME);
+		
+		if (perlRunner.isEmpty()) return false;
+		
+//		if (false && (OSDetector.isFamilyUnix() || OSDetector.isFamilyMac())) {
+//			if (path != null && path.length() > 0) {
+//				cmd.add(0, new File(path, perlRunner).getAbsolutePath());
+//			} else {
+//				cmd.add(0, perlRunner);
+//			}
+//			
+//			String code = "'"+StringUtils.join(cmd, "' '")+"'";
+//			cmd = new ArrayList(Arrays.asList("bash", "-c", code));
+//		} else {
+			if (path != null && path.length() > 0) {
+				return new File(path, perlRunner).canExecute();
+			} else {
+				//return new File(perlRunner).canExecute();
+				return !perlRunner.isEmpty();
+			}
+//		}
 	}
 
 	@Override
@@ -59,10 +81,8 @@
 		ArrayList<String> cmd = new ArrayList<String>();
 		cmd.add("-c");
 		cmd.add(str);
-		System.out.println("Running Perl code...");
-		
-			return runPerl(cmd, env);
-		
+		//System.out.println("Running Perl code...");
+		return runPerl(cmd, env);		
 	}
 	
 	public boolean canExecute(File script) {
Index: TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages_fr.properties
===================================================================
--- TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages_fr.properties	(revision 3517)
+++ TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages_fr.properties	(revision 3518)
@@ -5,6 +5,7 @@
 _3=3. 
 _default=par défaut
 _default_2=Défaut
+openingP0etc=Ouverture de {0}...
 aBinaryCorpusIsATXMFileExtensionTxmOrZip=Un corpus TXM au format binaire est soit un fichier d'extension .txm ou .zip, soit un dossier composé des sous-dossiers 'html', 'data', 'registry', 'txm'
 abort=Annuler
 abortingLoadingOfPOACorpusWithTheSameCQPIDAlreadyExists=Un corpus avec le même identifiant {1} existe déjà. Abandon du chargement de {0}.
Index: TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/messages/TXMUIMessages.java
===================================================================
--- TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/messages/TXMUIMessages.java	(revision 3517)
+++ TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/messages/TXMUIMessages.java	(revision 3518)
@@ -1482,6 +1482,8 @@
 	public static String YouReGoingToLostThoseModificationsIfNotAlreadyExportedContinue;
 
 	public static String defaultReferences;
+
+	public static String openingP0etc;
 	
 	static {
 		// initialize resource bundle
Index: TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages.properties
===================================================================
--- TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages.properties	(revision 3517)
+++ TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/messages/messages.properties	(revision 3518)
@@ -5,6 +5,7 @@
 _3=3. 
 _default=by default
 _default_2=Default
+openingP0etc=Opening {0}...
 aBinaryCorpusIsATXMFileExtensionTxmOrZip=A TXM corpus in binary format is either a file with an extension .txm or .zip, or a compressed folder composed of sub-folders 'html', 'data', 'registry', 'txm'
 abort=Abort
 abortingLoadingOfPOACorpusWithTheSameCQPIDAlreadyExists=A corpus with the same identifier {1} already exists. Aborting loading of {0}.
Index: TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java
===================================================================
--- TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java	(revision 3517)
+++ TXM/trunk/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java	(revision 3518)
@@ -125,6 +125,8 @@
 	
 	public static final int MAX_NAME_LENGTH = 40;
 	
+	public static final int NMAXLINESTOTEST = 30;
+	
 	/**
 	 * The editor main tool bar, positioned at the top of the editor.
 	 */
@@ -1074,15 +1076,13 @@
 	@SuppressWarnings("unchecked")
 	public static <T extends TXMResult> TXMEditor<T> openEditor(TXMResultEditorInput<T> editorInput, String editorId) {
 		
-		
-		
 		TXMEditor<T> editor = null;
 		IWorkbenchWindow window = TXMWindows.getActiveWindow();
 		IWorkbenchPage page = window.getActivePage();
 		try {
 			boolean wasAlreadyOpened = SWTEditorsUtils.isOpenEditor(editorInput, editorId);
 			if (!wasAlreadyOpened) {
-				try {StatusLine.setMessage(NLS.bind("Opening {0}...", editorInput.getResult().getSimpleName())); } catch(Exception e) {}
+				try {StatusLine.setMessage(NLS.bind(TXMUIMessages.openingP0etc, editorInput.getResult().getSimpleName())); } catch(Exception e) {}
 			}
 			// since some editor fields need some values of their parent,
 			// ensure the parents branch is ready (e.g. Sub-corpus properties in Cooccurrence editor, etc.)
@@ -1765,6 +1765,8 @@
 		TableColumn[] columns = viewer.getTable().getColumns();
 		TableColumn sortedColumn = viewer.getTable().getSortColumn();
 		int ncolumns = columns.length;
+		int nlinestotest = viewer.getTable().getItemCount();
+		if (nlinestotest > NMAXLINESTOTEST) nlinestotest = NMAXLINESTOTEST;
 		
 		Font font = viewer.getTable().getFont();
 		FontData fd = font.getFontData()[0];
@@ -1776,12 +1778,11 @@
 			TableColumn col = columns[i];
 			int refMax = col.getText().length();
 			
-			
-			for (TableItem item : viewer.getTable().getItems()) {
+			for (int j = 0 ; j < nlinestotest ; j++) { // get lines one per one to avoid loading the full table lines
+				TableItem item = viewer.getTable().getItem(j);
 				if (refMax < item.getText(i).length()) refMax = item.getText(i).length();
 			}
 			
-			
 			int w = 2 * (int) (refMax * W);
 			if (col.equals(sortedColumn)) { // the sorted column has an extra marker to show
 				w += 30;
Index: TXM/trunk/org.txm.tigersearch.rcp/src/org/txm/function/tigersearch/TIGERSearch.java
===================================================================
--- TXM/trunk/org.txm.tigersearch.rcp/src/org/txm/function/tigersearch/TIGERSearch.java	(revision 3517)
+++ TXM/trunk/org.txm.tigersearch.rcp/src/org/txm/function/tigersearch/TIGERSearch.java	(revision 3518)
@@ -9,21 +9,16 @@
 import org.apache.commons.lang.StringUtils;
 import org.txm.concordance.core.preferences.ConcordancePreferences;
 import org.txm.core.results.TXMParameters;
-import org.txm.objects.CorpusBuild;
-import org.txm.searchengine.core.IQuery;
-import org.txm.searchengine.core.SearchEnginesManager;
 import org.txm.searchengine.core.Selection;
 import org.txm.searchengine.cqp.CQPSearchEngine;
 import org.txm.searchengine.cqp.corpus.CQPCorpus;
 import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
 import org.txm.searchengine.cqp.corpus.WordProperty;
 import org.txm.searchengine.ts.TIGERQuery;
-import org.txm.searchengine.ts.TIGERSearchEngine;
 import org.txm.searchengine.ts.TSCorpus;
 import org.txm.searchengine.ts.TSCorpusManager;
 import org.txm.searchengine.ts.TSMatch;
 import org.txm.searchengine.ts.TSResult;
-import org.txm.tigersearch.preferences.TigerSearchPreferences;
 import org.txm.tigersearch.rcp.Messages;
 import org.txm.treesearch.function.TreeSearch;
 import org.txm.treesearch.function.TreeSearchSelector;
@@ -31,7 +26,6 @@
 import org.txm.utils.logger.Log;
 
 import ims.tiger.index.reader.Index;
-import ims.tiger.index.reader.IndexException;
 
 public class TIGERSearch extends TreeSearch {
 	
Index: TXM/trunk/org.txm.core/src/java/org/txm/core/engines/ScriptEngine.java
===================================================================
--- TXM/trunk/org.txm.core/src/java/org/txm/core/engines/ScriptEngine.java	(revision 3517)
+++ TXM/trunk/org.txm.core/src/java/org/txm/core/engines/ScriptEngine.java	(revision 3518)
@@ -37,7 +37,7 @@
 	}
 	
 	public IStatus executeScript(File script) {
-		return executeScript(script);
+		return executeScript(script, null, null);
 	}
 
 	public IStatus executeScript(File script, HashMap<String, Object> env) {
Index: TXM/trunk/org.txm.connlu.core/groovy/org/txm/scripts/importer/conllu/conll2tiger-ud.pl
===================================================================
--- TXM/trunk/org.txm.connlu.core/groovy/org/txm/scripts/importer/conllu/conll2tiger-ud.pl	(revision 3517)
+++ TXM/trunk/org.txm.connlu.core/groovy/org/txm/scripts/importer/conllu/conll2tiger-ud.pl	(revision 3518)
@@ -164,7 +164,7 @@
 
 my $id = my $form = my $lemma = my $plemma = my $pos = my $ppos = my $feat = my $pfeat = my $head = my $phead = my $deprel = my $pdeprel = my $edition_id = "";
 
-my $timestamp = `date`;
+my $timestamp = gmtime();
 chomp($timestamp);
 
 my $infile = $ARGV[0];
@@ -176,7 +176,7 @@
 $suffix = sprintf( "%05d", $counter );
 $infilename = basename($infile);
 
-$foo = `if [ ! -d $outdir ];then mkdir $outdir;fi`;
+mkdir("$outdir");
 open( XML, ">$outdir/$infilename-$suffix.xml" )
   or die "\nopen file error of $outdir/$infilename-$suffix.xml\n";
 open( LOG, ">$outdir/conversion.log" )
@@ -523,17 +523,17 @@
 	print XML "  </graph>\n";
 	print XML "</s>\n";
 	if ( $. % 100 == 0 ) {
-		print STDERR "\b\b\b\b\b\b\b\b";
-		printf STDERR "%08d", $.;
+		#print STDERR "\b\b\b\b\b\b\b\b";
+		#printf STDERR "%08d", $.;
 	}
 }    # main
 print XML "</subcorpus>\n";
-print STDERR "\n$CMD: $. sentences converted. Results in $outdir. Log in $outdir/conversion.log.\n";
-print STDERR "   Hint 1: on OS X convert master file to MacRoman, e.g  iconv -f latin1 -t macroman\n";
-print STDERR "   Hint 2: use tiger.pl -c <Tiger XML file> to detect unbound nodes.\n";
-print STDERR "   Hint 3: build reliable feature declarations using tiger.sh\n";
-print STDERR "           tiger.sh -a \"lemma word pos ppos\"  (for terminals)\n";
-print STDERR "           tiger.sh -A \"lemma word pos ppos\"  (for non-terminals)\n";
+#print STDERR "\n$CMD: $. sentences converted. Results in $outdir. Log in $outdir/conversion.log.\n";
+#print STDERR "   Hint 1: on OS X convert master file to MacRoman, e.g  iconv -f latin1 -t macroman\n";
+#print STDERR "   Hint 2: use tiger.pl -c <Tiger XML file> to detect unbound nodes.\n";
+#print STDERR "   Hint 3: build reliable feature declarations using tiger.sh\n";
+#print STDERR "           tiger.sh -a \"lemma word pos ppos\"  (for terminals)\n";
+#print STDERR "           tiger.sh -A \"lemma word pos ppos\"  (for non-terminals)\n";
 
 if ( $noroot > 0 ) {
 	print STDERR "$noroot sentences ignored: root not found (see log file)\n";
Index: TXM/trunk/org.txm.connlu.core/groovy/org/txm/scripts/importer/conllu/CoNLLUImport.groovy
===================================================================
--- TXM/trunk/org.txm.connlu.core/groovy/org/txm/scripts/importer/conllu/CoNLLUImport.groovy	(revision 3517)
+++ TXM/trunk/org.txm.connlu.core/groovy/org/txm/scripts/importer/conllu/CoNLLUImport.groovy	(revision 3518)
@@ -19,18 +19,19 @@
 import org.txm.scripts.importer.tigersearch.TSImport
 import org.txm.utils.*
 import org.txm.searchengine.ts.TIGERSearchEngine
+import org.txm.tigersearch.preferences.TigerSearchPreferences
 import org.txm.conllu.core.CallUD2TigerPerlScript
 
 class CoNLLUImport extends XTZImport {
-
+	
 	public CoNLLUImport(Project params) {
 		super(params);
 	}
-
+	
 	@Override
 	public void init(Project p) {
 		super.init(p);
-
+		
 		importer = new CoNLLUImporter(this);
 		compiler = new XTZCompiler(this)
 		annotater = null; // no annotater step to do
@@ -46,31 +47,41 @@
 		super.start(); // call the usual XTZ import
 		
 		// build the TIGER-XML file
-		new CallUD2TigerPerlScript().convertCoNLLUFiles(this.sourceDirectory.getAbsolutePath(), this.binaryDirectory.getAbsolutePath())
+		CallUD2TigerPerlScript cutps = new CallUD2TigerPerlScript();
 		
-		File tigerXMLDirectory = new File(this.binaryDirectory, "tiger-xml")
-		
-		File xslfile1 = BundleUtils.getFile("org.txm.conllu.core", "groovy", "/org/txm/scripts/importer/conllu/", "tigerXml-commentOutLongSentences.xsl")
-		File xslfile2 = BundleUtils.getFile("org.txm.conllu.core", "groovy", "/org/txm/scripts/importer/conllu/", "tigerXml-sortBfmByDate.xsl")
-		
-		ApplyXsl2 a1 = new ApplyXsl2(xslfile1);
-		ApplyXsl2 a2 = new ApplyXsl2(xslfile2);
-		for (File xmlFile : tigerXMLDirectory.listFiles()) {
-			if (!xmlFile.getName().endsWith(".xml")) continue;
-			File xmlFileTmp = new File(xmlFile.getAbsolutePath()+".tmp")
-			if (!(a1.process(xmlFile, xmlFileTmp) && xmlFile.delete() && xmlFileTmp.renameTo(xmlFile))) {
-				println "Error while applying $xslfile1 to $xmlFile"
+		if (cutps.canBuildTSFiles()) {
+			cutps.convertCoNLLUFiles(this.sourceDirectory.getAbsolutePath(), this.binaryDirectory.getAbsolutePath())
+			
+			File tigerXMLDirectory = new File(this.binaryDirectory, "tiger-xml")
+			String driverFilename = TigerSearchPreferences.getInstance().getString(TigerSearchPreferences.DRIVER_FILENAME);
+			File xslfile1 = BundleUtils.getFile("org.txm.conllu.core", "groovy", "/org/txm/scripts/importer/conllu/", "tigerXml-commentOutLongSentences.xsl")
+			File xslfile2 = BundleUtils.getFile("org.txm.conllu.core", "groovy", "/org/txm/scripts/importer/conllu/", "tigerXml-sortBfmByDate.xsl")
+			
+			println "Post-processing TIGER-XML files..."
+			ApplyXsl2 a1 = new ApplyXsl2(xslfile1);
+			ApplyXsl2 a2 = new ApplyXsl2(xslfile2);
+			for (File xmlFile : tigerXMLDirectory.listFiles()) {
+				
+				if (!xmlFile.getName().endsWith(".xml")) continue;
+				if (xmlFile.getName().equals(driverFilename)) continue;
+				
+				File xmlFileTmp = new File(xmlFile.getAbsolutePath()+".tmp")
+				if (!(a1.process(xmlFile, xmlFileTmp) && xmlFile.delete() && xmlFileTmp.renameTo(xmlFile))) {
+					println "Error while applying $xslfile1 to $xmlFile"
+				}
+				
+				if (!(a2.process(xmlFile, xmlFileTmp) && xmlFile.delete() && xmlFileTmp.renameTo(xmlFile))) {
+					println "Error while applying $xslfile2 to $xmlFile"
+				}
 			}
 			
-			if (!(a2.process(xmlFile, xmlFileTmp) && xmlFile.delete() && xmlFileTmp.renameTo(xmlFile))) {
-				println "Error while applying $xslfile2 to $xmlFile"
+			// build TIGER indexes
+			if (isSuccessful) {
+				// read from the 'tiger-xml' and write to the 'tiger' directory
+				TIGERSearchEngine.buildTIGERCorpus(tigerXMLDirectory, this.binaryDirectory, corpusName);
 			}
+		} else {
+			println "Skipping TIGER conversion step."
 		}
-		
-		// build TIGER indexes
-		if (isSuccessful) {
-			// read from the 'tiger-xml' and write to the 'tiger' directory
-			TIGERSearchEngine.buildTIGERCorpus(tigerXMLDirectory, this.binaryDirectory, corpusName);
-		}
 	}
 }
\ No newline at end of file
Index: TXM/trunk/org.txm.connlu.core/src/org/txm/conllu/core/CallUD2TigerPerlScript.java
===================================================================
--- TXM/trunk/org.txm.connlu.core/src/org/txm/conllu/core/CallUD2TigerPerlScript.java	(revision 3517)
+++ TXM/trunk/org.txm.connlu.core/src/org/txm/conllu/core/CallUD2TigerPerlScript.java	(revision 3518)
@@ -11,15 +11,29 @@
 import org.txm.tigersearch.preferences.TigerSearchPreferences;
 import org.txm.utils.*;
 import org.txm.utils.io.IOUtils;
+import org.txm.utils.logger.Log;
 
 public class CallUD2TigerPerlScript {
 	
+	public boolean canBuildTSFiles() {
+		ScriptEngine engine = ScriptEnginesManager.getPerlEngine();
+		if (engine == null) {
+			Log.warning("No Perl script engine installed in TXM");
+			return false;
+		}
+		if (!engine.isRunning()) {
+			Log.warning("No Perl script engine ready in TXM. See Perl preferences.");
+			return false;
+		}
+		return true;
+	}
+	
 	public boolean convertCoNLLUFiles(String input_directory_path, String output_directory) throws IOException {
 		
 		File input_directory = new File(input_directory_path);
 		
 		if (input_directory_path.length() == 0 && input_directory.canRead()) {
-			System.out.println("** impossible to access directory $input_directory. Aborting.");
+			System.out.println("** impossible to access directory "+input_directory+". Aborting.");
 			return false;
 		}
 		
@@ -49,22 +63,25 @@
 				//System.out.println("$f... "+"perl '$perlScript' -s 10000 -o '$tigerXMLDirectory' '$f'");
 				ScriptEngine engine = ScriptEnginesManager.getPerlEngine();
 				if (!engine.canExecute(perlScript)) {
-					System.out.println("Error: Perl engine not correctly set to run $perlScript");
+					System.out.println("Error: Perl engine not correctly set to run: "+perlScript);
 					return false;
 				}
 				ArrayList<String> cmd = new ArrayList<String>();
 				cmd.addAll(Arrays.asList("-s", "10000", "-o", tigerXMLDirectory.getAbsolutePath(), f.getAbsolutePath()));
-				System.out.println("calling perl with: "+cmd);
+				System.out.println("Calling perl with: "+perlScript+" and "+cmd);
 				IStatus status = engine.executeScript(perlScript, cmd);
 				for (String line : IOUtils.getLines(mainFile, "UTF-8")) {
-					if (line.contains("<subcorpus ")) subcorpusList += line+"\n";
+					if (line.contains("<subcorpus ")) {
+						subcorpusList += line+"\n";
+					}
 				}
-			} catch (Throwable t) { System.out.println("Error: $t"); }
+			} catch (Throwable t) { System.out.println("Error: "+t+" at "+t.getStackTrace()[0]); }
 		}
 		
 		//	println "subcorpus-list: "+subcorpusList
 		String content = IOUtils.getText(mainFile, "UTF-8");
-		content = content.replaceAll("<subcorpus .+/>", subcorpusList+"\n<body/>"); // get the last main.xml content and patch it with the subcorpus tags
+		content = content.replaceAll("<subcorpus .+\n", "");
+		content = content.replaceAll("<body>", "<body>\n"+subcorpusList+"\n"); // get the last main.xml content and patch it with the subcorpus tags
 		IOUtils.setText(mainFullFile, content, "UTF-8");
 		//mainFullFile.setText(mainFile.getText().replaceAll("<body/>", subcorpusList+"\n<body/>"));
 		
