Index: TXM/trunk/org.txm.partition.core/src/org/txm/partition/core/functions/PartitionDimensions.java
===================================================================
--- TXM/trunk/org.txm.partition.core/src/org/txm/partition/core/functions/PartitionDimensions.java	(revision 3361)
+++ TXM/trunk/org.txm.partition.core/src/org/txm/partition/core/functions/PartitionDimensions.java	(revision 3362)
@@ -4,6 +4,7 @@
 package org.txm.partition.core.functions;
 
 import java.io.File;
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -20,6 +21,7 @@
 import org.txm.searchengine.cqp.corpus.Part;
 import org.txm.searchengine.cqp.corpus.Partition;
 import org.txm.utils.TXMProgressMonitor;
+import org.txm.utils.io.IOUtils;
 
 /**
  * Partition dimensions.
@@ -231,8 +233,14 @@
 	
 	
 	@Override
-	public boolean _toTxt(File arg0, String arg1, String arg2, String arg3) throws Exception {
-		// TODO Auto-generated method stub
+	public boolean _toTxt(File file, String encoding, String colseparator, String txtseparator) throws Exception {
+		PrintWriter writer = IOUtils.getWriter(file, encoding);
+		
+		for (Part b : this.parts) {
+			writer.println(txtseparator+b.getName().replaceAll(txtseparator, txtseparator+txtseparator)+txtseparator+colseparator+txtseparator+b.getSize()+txtseparator);
+		}
+		
+		writer.close();
 		return false;
 	}
 	
Index: TXM/trunk/org.txm.utils/src/org/txm/utils/logger/Log.java
===================================================================
--- TXM/trunk/org.txm.utils/src/org/txm/utils/logger/Log.java	(revision 3361)
+++ TXM/trunk/org.txm.utils/src/org/txm/utils/logger/Log.java	(revision 3362)
@@ -222,6 +222,10 @@
 	 * @param message
 	 */
 	public static void severe(String message) {
+		
+		if (message.length() > 1000) { // cut if too long
+			message = message.substring(0, 1000) + "[...]";
+		}
 
 		if (Level.SEVERE.intValue() >= txm.getLevel().intValue()) {
 			System.out.println(message);
@@ -285,6 +289,11 @@
 	 * @param message
 	 */
 	public static void warning(String message) {
+		
+		if (message.length() > 1000) { // cut if too long
+			message = message.substring(0, 1000) + "[...]";
+		}
+		
 		if (Level.WARNING.intValue() >= txm.getLevel().intValue()) {
 			System.out.println(message);
 			// System.out.print("AT: ");
@@ -330,6 +339,11 @@
 	 *            where to print the message
 	 */
 	public static void info(String message, boolean newline) {
+		
+		if (message.length() > 1000) { // cut if too long
+			message = message.substring(0, 1000) + "[...]";
+		}
+		
 		if (Level.INFO.intValue() >= txm.getLevel().intValue()) {
 			if (newline) System.out.println(message);
 			else  System.out.print(message);
Index: TXM/trunk/org.txm.progression.core/src/org/txm/progression/core/functions/Progression.java
===================================================================
--- TXM/trunk/org.txm.progression.core/src/org/txm/progression/core/functions/Progression.java	(revision 3361)
+++ TXM/trunk/org.txm.progression.core/src/org/txm/progression/core/functions/Progression.java	(revision 3362)
@@ -684,13 +684,6 @@
 		}
 	}
 	
-	@Override
-	public boolean _toTxt(File outfile, String encoding, String colseparator,
-			String txtseparator) throws Exception {
-		return toTxt(outfile, encoding);
-	}
-	
-	
 	/**
 	 * 
 	 * @param outfile
@@ -698,7 +691,8 @@
 	 * @return
 	 * @throws IOException
 	 */
-	public boolean toTxt(File outfile, String encoding) throws IOException {
+	public boolean _toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws IOException {
+		
 		// NK: writer declared as class attribute to perform a clean if the operation is interrupted
 		tryAcquireSemaphore();
 		this.writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfile),
Index: TXM/trunk/org.txm.specificities.core/src/org/txm/specificities/core/functions/SpecificitiesSelection.java
===================================================================
--- TXM/trunk/org.txm.specificities.core/src/org/txm/specificities/core/functions/SpecificitiesSelection.java	(revision 3361)
+++ TXM/trunk/org.txm.specificities.core/src/org/txm/specificities/core/functions/SpecificitiesSelection.java	(revision 3362)
@@ -4,10 +4,13 @@
 package org.txm.specificities.core.functions;
 
 import java.io.File;
+import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.lang.StringUtils;
+import org.jfree.chart.renderer.category.GroupedStackedBarRenderer;
 import org.txm.chartsengine.core.results.ChartResult;
 import org.txm.core.messages.TXMCoreMessages;
 import org.txm.core.results.Parameter;
@@ -17,6 +20,7 @@
 import org.txm.specificities.core.preferences.SpecificitiesPreferences;
 import org.txm.statsengine.core.StatException;
 import org.txm.utils.TXMProgressMonitor;
+import org.txm.utils.io.IOUtils;
 
 /**
  * A selection from a Specificities result dedicated to export or chart creation.
@@ -304,8 +308,25 @@
 	@Override
 	@Deprecated
 	public boolean _toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws Exception {
-		// TODO Auto-generated method stub
-		return false;
+		PrintWriter writer = IOUtils.getWriter(outfile);
+		
+		Specificities specificities = this.getParent();
+		String[] partNames = specificities.getColumnsNames();
+		
+		writer.println(txtseparator+"Lines"+txtseparator+colseparator+txtseparator+StringUtils.join(partNames, txtseparator+colseparator+txtseparator)+txtseparator); // all parts
+		
+		for (int i = 0 ; i < selectedTypeNames.size() ; i++) {
+			Double[] values = new Double[selectedSpecificitiesIndex[i].length];
+			for (int d = 0 ; d < selectedSpecificitiesIndex[i].length ; d++) {
+				values[d] = selectedSpecificitiesIndex[i][d];
+			}
+			
+			writer.println(txtseparator+selectedTypeNames.get(i)+txtseparator+
+					colseparator+txtseparator+StringUtils.join(values, txtseparator+colseparator+txtseparator)+txtseparator);
+		}
+		
+		writer.close();
+		return true;
 	}
 	
 	
Index: TXM/trunk/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java
===================================================================
--- TXM/trunk/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java	(revision 3361)
+++ TXM/trunk/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java	(revision 3362)
@@ -269,12 +269,26 @@
 	
 	public Object evaluate(String code) {
 		if (Log.getLevel().intValue() <= Level.FINEST.intValue()) System.out.println(code);
-		return getBrowser().evaluate(code);
+		try {
+			return getBrowser().evaluate(code);
+		} catch(Exception e) {
+			String error = e.getMessage();
+			Log.severe("Browser evaluate error: "+e);
+			Log.printStackTrace(e);
+		}
+		return null;
 	}
 	
 	public boolean execute(String code) {
 		if (Log.getLevel().intValue() <= Level.FINEST.intValue()) System.out.println(code);
-		return getBrowser().execute(code);
+		try {
+			return getBrowser().execute(code);
+		} catch(Exception e) {
+			String error = e.getMessage();
+			Log.severe("Browser execute error: "+e);
+			Log.printStackTrace(e);
+		}
+		return false;
 	}
 	
 	public EditionPanel(SynopticEditionEditor synopticEditionEditor, Composite parent, int style, String editionName) {
@@ -316,7 +330,7 @@
 					new EditionLink(synopticEditionEditor, getBrowser());
 				}
 				
-				Log.finest("EditionPanel " + currentEdition.getName() + " reload " + getCurrentPage().getName());
+				
 				Object rez = evaluate("return typeof sheet;"); //$NON-NLS-1$
 				if ("undefined".equals(rez)) { //$NON-NLS-1$
 					Object loadResult = evaluate(functions);
@@ -354,67 +368,71 @@
 				
 				
 				buffer = new StringBuilder();
-				
-				String firstWord = currentPage.getWordId();
-				Page nextPage = currentEdition.getNextPage(currentPage);
-				String lastWord = "w_999999999"; //$NON-NLS-1$
-				while (nextPage != null && currentPage != nextPage) {
-					lastWord = nextPage.getWordId();
-					if (!("w_0".equals(lastWord))) { // this is a word id
-						break; // ok
-					}
-					Page p = currentEdition.getNextPage(nextPage);
-					if (p == nextPage) { // end of pages
-						lastWord = "w_999999999";
-						break;
-					}
-					nextPage = p;
-				}
-				// System.out.println("firstWord="+firstWord+" lastWord="+lastWord);
-				// int n = 0;
-				// long start = System.currentTimeMillis();
-				
-				for (String wordid : highlightedColorPerWordIDS.keySet()) {
-					// Log.finest("words to highlight: "+highlightedColorPerWordIDS);
-					if (highlightedColorPerWordIDS.get(wordid).size() == 0) continue; // error
+				Log.finest("EditionPanel " + currentEdition + " reload " + currentPage);
+				if (currentPage != null && currentEdition != null) { // avoid null pointer
 					
-					// if (!slowWordHighLight) { //TODO: this code must be replaced with word position instead of word id comparaison
-					if (Edition.isFirstGTthanSecond(wordid, firstWord) < 0) continue; // skip the word to highlight
-					if (Edition.isFirstGTthanSecond(lastWord, wordid) < 0) continue; // skip the word to highlight
-					// }
-					// n++;
-					RGBA composite = new RGBA(0, 0, 0, 0f);
-					int size = highlightedColorPerWordIDS.get(wordid).size();
 					
-					for (RGBA color : highlightedColorPerWordIDS.get(wordid)) {
-						composite.r += color.r;
-						composite.g += color.g;
-						composite.b += color.b;
-						composite.a += color.a;
+					String firstWord = currentPage.getWordId();
+					Page nextPage = currentEdition.getNextPage(currentPage);
+					String lastWord = "w_999999999"; //$NON-NLS-1$
+					while (nextPage != null && currentPage != nextPage) {
+						lastWord = nextPage.getWordId();
+						if (!("w_0".equals(lastWord))) { // this is a word id
+							break; // ok
+						}
+						Page p = currentEdition.getNextPage(nextPage);
+						if (p == nextPage) { // end of pages
+							lastWord = "w_999999999";
+							break;
+						}
+						nextPage = p;
 					}
+					// System.out.println("firstWord="+firstWord+" lastWord="+lastWord);
+					// int n = 0;
+					// long start = System.currentTimeMillis();
 					
-					composite.r /= size;
-					composite.g /= size;
-					composite.b /= size;
-					
-					String s = null;
-					if (!fastWordHighLight) {
-						// s = String.format(highlightscriptRule, wordid, composite.r, composite.g, composite.b, composite.a);
-						s = "try { document.getElementById(\"" + wordid + "\").style.backgroundColor=\"rgba(" + composite.r + "," + composite.g + "," + composite.b + "," + composite.a + ")\";" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
-								+
-								// "elt.style.paddingLeft=\"3px\";" + //$NON-NLS-1$
-								// "elt.style.paddingRight=\"3px\";" + //$NON-NLS-1$
-								// "elt.style.paddingTop=\"1px\";" + //$NON-NLS-1$
-								// "elt.style.paddingBottom=\"1px\";" + //$NON-NLS-1$
-								"} catch (e) { };"; //$NON-NLS-1$
+					for (String wordid : highlightedColorPerWordIDS.keySet()) {
+						// Log.finest("words to highlight: "+highlightedColorPerWordIDS);
+						if (highlightedColorPerWordIDS.get(wordid).size() == 0) continue; // error
+						
+						// if (!slowWordHighLight) { //TODO: this code must be replaced with word position instead of word id comparaison
+						if (Edition.isFirstGTthanSecond(wordid, firstWord) < 0) continue; // skip the word to highlight
+						if (Edition.isFirstGTthanSecond(lastWord, wordid) < 0) continue; // skip the word to highlight
+						// }
+						// n++;
+						RGBA composite = new RGBA(0, 0, 0, 0f);
+						int size = highlightedColorPerWordIDS.get(wordid).size();
+						
+						for (RGBA color : highlightedColorPerWordIDS.get(wordid)) {
+							composite.r += color.r;
+							composite.g += color.g;
+							composite.b += color.b;
+							composite.a += color.a;
+						}
+						
+						composite.r /= size;
+						composite.g /= size;
+						composite.b /= size;
+						
+						String s = null;
+						if (!fastWordHighLight) {
+							// s = String.format(highlightscriptRule, wordid, composite.r, composite.g, composite.b, composite.a);
+							s = "try { document.getElementById(\"" + wordid + "\").style.backgroundColor=\"rgba(" + composite.r + "," + composite.g + "," + composite.b + "," + composite.a + ")\";" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+									+
+									// "elt.style.paddingLeft=\"3px\";" + //$NON-NLS-1$
+									// "elt.style.paddingRight=\"3px\";" + //$NON-NLS-1$
+									// "elt.style.paddingTop=\"1px\";" + //$NON-NLS-1$
+									// "elt.style.paddingBottom=\"1px\";" + //$NON-NLS-1$
+									"} catch (e) { };"; //$NON-NLS-1$
+						}
+						else {
+							// TODO: replace this line with the next one for TXM 0.7.9
+							s = String.format(highlightscriptRuleFast, wordid.replace(" ", "\\ "), composite.r, composite.g, composite.b, composite.a); //$NON-NLS-1$ //$NON-NLS-2$
+							// s = String.format(highlightscriptRuleFast, wordid, composite.r, composite.g, composite.b, composite.a);
+						}
+						
+						buffer.append(s + "\n"); //$NON-NLS-1$
 					}
-					else {
-						// TODO: replace this line with the next one for TXM 0.7.9
-						s = String.format(highlightscriptRuleFast, wordid.replace(" ", "\\ "), composite.r, composite.g, composite.b, composite.a); //$NON-NLS-1$ //$NON-NLS-2$
-						// s = String.format(highlightscriptRuleFast, wordid, composite.r, composite.g, composite.b, composite.a);
-					}
-					
-					buffer.append(s + "\n"); //$NON-NLS-1$
 				}
 				
 				if (buffer.length() > 0) {
Index: TXM/trunk/org.txm.rcp/rcpapplication.product
===================================================================
--- TXM/trunk/org.txm.rcp/rcpapplication.product	(revision 3361)
+++ TXM/trunk/org.txm.rcp/rcpapplication.product	(revision 3362)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.5"?>
 
-<product name="TXM" uid="org.txm.rcp.app" id="org.txm.rcp.product" application="org.txm.rcp.Application" version="0.8.2.qualifier" useFeatures="true" includeLaunchers="true">
+<product name="TXM 0.8.2" uid="org.txm.rcp.app" id="org.txm.rcp.product" application="org.txm.rcp.Application" version="0.8.2.qualifier" useFeatures="true" includeLaunchers="true">
 
    <aboutInfo>
       <image path="/org.txm.rcp/icons/logo/about TXM.png"/>
@@ -79,7 +79,6 @@
       </win>
    </launcher>
 
-
    <vm>
       <linux include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7</linux>
       <macos include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7</macos>
Index: TXM/trunk/org.txm.ahc.core/src/org/txm/ahc/core/functions/AHC.java
===================================================================
--- TXM/trunk/org.txm.ahc.core/src/org/txm/ahc/core/functions/AHC.java	(revision 3361)
+++ TXM/trunk/org.txm.ahc.core/src/org/txm/ahc/core/functions/AHC.java	(revision 3362)
@@ -336,8 +336,7 @@
 	 * @return
 	 */
 	// FIXME: SJ: to extract to future exporter extension
-	@Deprecated
-	public boolean toTxt(File outfile, String encoding) {
+	public boolean _toTxt(File outfile, String encoding, String colsep, String txtsep) {
 		boolean ret = true;
 		acquireSemaphore();
 		RWorkspace rw;
@@ -357,14 +356,7 @@
 		}
 		return true;
 	}
-	
-	// FIXME: SJ: to extract to future exporter extension
-	@Override
-	@Deprecated
-	public boolean _toTxt(File outfile, String encoding, String colsep, String txtsep) {
-		return toTxt(outfile, encoding);
-	}
-	
+		
 	/**
 	 * Gets the default method.
 	 *
