Index: TXM/trunk/bundles/org.txm.chartsengine.core/src/org/txm/chartsengine/core/ChartsEngine.java
===================================================================
--- TXM/trunk/bundles/org.txm.chartsengine.core/src/org/txm/chartsengine/core/ChartsEngine.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.chartsengine.core/src/org/txm/chartsengine/core/ChartsEngine.java	(revision 3710)
@@ -5,6 +5,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
@@ -681,8 +682,8 @@
 		return this.description;
 	}
 	
-	public boolean hasAdditionalDetailsForResult(TXMResult result) {
-		return false;
+	public String hasAdditionalDetailsForResult(TXMResult result) {
+		return null;
 	}
 	
 	public String getAdditionalDetailsForResult(TXMResult result) {
Index: TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/PartitionPropertiesComputer.java
===================================================================
--- TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/PartitionPropertiesComputer.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/PartitionPropertiesComputer.java	(revision 3710)
@@ -1,35 +1,14 @@
 package org.txm.properties.core.functions;
 
-import java.text.NumberFormat;
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Locale;
 
-import org.apache.commons.lang.StringUtils;
-import org.eclipse.osgi.util.NLS;
-import org.txm.core.messages.TXMCoreMessages;
-import org.txm.objects.Project;
-import org.txm.properties.core.messages.PropertiesCoreMessages;
-import org.txm.searchengine.cqp.AbstractCqiClient;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
-import org.txm.searchengine.cqp.corpus.CorpusManager;
-import org.txm.searchengine.cqp.corpus.MainCorpus;
 import org.txm.searchengine.cqp.corpus.Part;
 import org.txm.searchengine.cqp.corpus.Partition;
-import org.txm.searchengine.cqp.corpus.Property;
-import org.txm.searchengine.cqp.corpus.QueryResult;
-import org.txm.searchengine.cqp.corpus.StructuralUnit;
-import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
-import org.txm.searchengine.cqp.corpus.WordProperty;
-import org.txm.searchengine.cqp.corpus.query.CQLQuery;
 import org.txm.utils.TXMProgressMonitor;
-import org.txm.utils.logger.Log;
 
 public class PartitionPropertiesComputer extends PropertiesComputer<Partition> {
 	
@@ -38,15 +17,15 @@
 	}
 	
 	@Override
-	public List<String> getComputableInformations() {
-		return Arrays.asList("all");
+	public LinkedHashSet<String> getComputableInformations() {
+		return new LinkedHashSet(Arrays.asList("all"));
 	}
 	
 	@Override
-	public LinkedHashMap<String, String> getInformation(String name) {
+	public String getInformation(String name) {
 		LinkedHashMap<String, String> data = new LinkedHashMap<>();
 		data.put("all", dump());
-		return data;
+		return data.get(name);
 	}
 	
 	@Override
Index: TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/CorpusPropertiesComputer.java
===================================================================
--- TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/CorpusPropertiesComputer.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/CorpusPropertiesComputer.java	(revision 3710)
@@ -35,82 +35,94 @@
 import org.txm.utils.logger.Log;
 
 public class CorpusPropertiesComputer extends PropertiesComputer<CQPCorpus> {
-	
-	ArrayList<String> computableInformations = new ArrayList<String>(Arrays.asList("all"));
-	
+
+	LinkedHashSet<String> computableInformations = new LinkedHashSet<String>(Arrays.asList("Summary Statistics", "Lexical Units properties", "Structural Units properties"));
+	//new ArrayList<String>(Arrays.asList("Statistiques Générales", "Propriétés des unités lexicales", "Propriétés des structures"));
+	// Summary Statistics, Lexical Units properties, Structural Units properties
+
+	LinkedHashMap<String, String> data = new LinkedHashMap<>();
+
 	public CorpusPropertiesComputer(Properties props, CQPCorpus result) {
 		super(props, result);
 	}
-	
+
 	@Override
-	public List<String> getComputableInformations() {
+	public LinkedHashSet<String> getComputableInformations() {
 		return computableInformations;
 	}
-	
+
 	@Override
-	public LinkedHashMap<String, String> getInformation(String name) {
-		LinkedHashMap<String, String> data = new LinkedHashMap<>();
-		data.put("all", dump(props.pMaxPropertiesToDisplay));
-		for (EngineType set : Toolbox.getEngineManagers().keySet()) {
-			EnginesManager<?> se = Toolbox.getEngineManagers().get(set);
-			for (String ename : se.getEngines().keySet()) {
-				Engine engine = se.get(ename);
-				if (engine.hasAdditionalDetailsForResult(result)) {
-					data.put(engine.getName(), dump(props.pMaxPropertiesToDisplay));
-				}
-			}
+	public String getInformation(String name) {
+
+		if ("Summary Statistics".equals(name)) {
+			return dumpGeneralStats();
+		} else if ("Lexical Units properties".equals(name)) {
+			return dumpLexicalStats();
+		} else if ("Structural Units properties".equals(name)) {
+			return dumpStrutureStats();
+		} else {
+			return data.get(name);
 		}
-		return data;
 	}
-	
+
 	@Override
-	public String getInformationHTML(String info) {
-		return htmlDump();
+	public String getInformationHTML(String name) {
+
+		if ("Summary Statistics".equals(name)) {
+			return htmlDumpGeneralStats(null);
+		} else if ("Lexical Units properties".equals(name)) {
+			return htmlDumpLexicalProperties(null);
+		} else if ("Structural Units properties".equals(name)) {
+			return htmlDumpStructureProperties(null);
+		} else {
+			return getInformation(name);
+		}
+
 	}
-	
+
 	// Numbers
 	/** The T. */
 	int numberOfWords = 0; // number of word
-	
+
 	/** The N properties. */
 	int NProperties = 0; // number of word properties
 	// HashMap<String, Integer> propertiesCounts = new HashMap<String, Integer>();
 	// // properties counts
-	
+
 	/** The properties values. */
 	HashMap<String, List<String>> propertiesValues = new HashMap<>(); // properties values
-	
+
 	/** The N structures. */
 	int NStructures = 0; // number of structures
-	
+
 	/** The structures counts. */
 	HashMap<String, Integer> structuresCounts = new HashMap<>(); // structures counts
-	
+
 	/** The internal architecture. */
 	List<String> internalArchitecture = new ArrayList<>(); // cqp structures = propertiesCounts keys but ordered
-	
+
 	/** The hierarchie counts. */
 	HashMap<String, Integer> hierarchieCounts = new HashMap<>(); // hierarchic structures counts
-	
+
 	/** The internal architecture properties. */
 	HashMap<String, HashMap<String, List<String>>> internalArchitectureProperties = new HashMap<>(); // hierarchic structures counts
-	
+
 	/** The internal architecture properties counts. */
 	HashMap<String, HashMap<String, Integer>> internalArchitecturePropertiesCounts = new HashMap<>(); // hierarchic structures counts
-	
+
 	// Annotations description
 	/** The annotations types. */
 	HashMap<String, Integer> annotationsTypes = new HashMap<>(); // for each annotation its description
-	
+
 	/** The annotations origins. */
 	HashMap<String, Integer> annotationsOrigins = new HashMap<>(); // for each annoation its origin description
-	
+
 	/** The properties. */
 	List<WordProperty> properties;
-	
+
 	/** The structures. */
 	List<StructuralUnit> structures;
-	
+
 	@Override
 	public String getName() {
 		String filename = result.getMainCorpus() + "-" + result.getName(); //$NON-NLS-1$
@@ -119,14 +131,14 @@
 		}
 		return filename;
 	}
-	
+
 	/**
 	 * Step general infos.
 	 */
 	public void stepGeneralInfos() {
 		try {
 			properties = result.getOrderedProperties();
-			
+
 			List<WordProperty> pproperties = new ArrayList<>(properties);
 			for (WordProperty p : properties) {
 				if (p.getName().equals("id")) {
@@ -134,6 +146,7 @@
 				}
 			}
 			properties = pproperties;
+
 			NProperties = properties.size();
 		}
 		catch (CqiClientException e) {
@@ -141,7 +154,7 @@
 			Log.printStackTrace(e);
 			return;
 		}
-		
+
 		try {
 			numberOfWords = result.getSize();// corpus.getLexicon(corpus.getProperty("id")).nbrOfToken();
 		}
@@ -151,15 +164,15 @@
 			return;
 		}
 	}
-	
+
 	/**
 	 * step2. randomly position are choose
 	 */
 	public void stepLexicalProperties() {
 		propertiesValues.clear();
-		
+
 		AbstractCqiClient cqiClient = CorpusManager.getCorpusManager().getCqiClient();
-		
+
 		int s = Math.min(props.pMaxPropertiesToDisplay, numberOfWords);
 		int[] positions = new int[s];
 		int n = 0;
@@ -171,7 +184,7 @@
 				positions[n++] = i;
 			}
 		}
-		
+
 		for (Property p : properties) {
 			// int size;
 			try {
@@ -183,14 +196,14 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Step structural units.
 	 */
 	public void stepStructuralUnits() {
 		try {
 			structures = result.getOrderedStructuralUnits();
-			
+
 			List<StructuralUnit> sstructures = new ArrayList<>(structures);
 			for (StructuralUnit su : structures) {
 				if (su.getName().equals("txmcorpus")) {
@@ -211,7 +224,7 @@
 			hierarchieCounts.put(su.getName(), -1);
 			internalArchitectureProperties.put(su.getName(), new HashMap<String, List<String>>());
 			internalArchitecturePropertiesCounts.put(su.getName(), new HashMap<String, Integer>());
-			
+
 			for (StructuralUnitProperty sup : su.getOrderedProperties()) {// for each of its property
 				try {
 					List<String> allvalues = sup.getValues(result);
@@ -226,7 +239,7 @@
 				}
 			}
 		}
-		
+
 		HashMap<String, org.txm.utils.Tuple<Integer>> firstPositionOfStructures = new HashMap<>();
 		for (String su : internalArchitecture) {
 			try {
@@ -247,7 +260,7 @@
 
 			@Override
 			public int compare(String arg0, String arg1) {
-				
+
 				int r = firstPositionOfStructures.get(arg0).a - firstPositionOfStructures.get(arg1).a;
 				if (r == 0) {
 					return -(firstPositionOfStructures.get(arg0).b - firstPositionOfStructures.get(arg1).b);
@@ -256,37 +269,15 @@
 			}
 		});
 	}
-	
-	/**
-	 * dump the results of the diagnostic in a String containing HTML code.
-	 *
-	 * @return the string
-	 */
-	public String htmlDump() {
-		StringBuffer buff = new StringBuffer();
-		
-		buff.append("<? version=\"1.0\" encoding=\"UTF-8\"?>\n" + //$NON-NLS-1$
-				"<html>" + //$NON-NLS-1$
-				"<head>" + //$NON-NLS-1$
-				"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>" + //$NON-NLS-1$
-				"</head>" + //$NON-NLS-1$
-				"<body>\n"); //$NON-NLS-1$
-		buff.append("<h2 style'font-family:\"Arial\";'>" + PropertiesCoreMessages.descriptionOf + this.result.getName() + " (CQP ID=" + this.result.getID() + ")</h2>\n"); //$NON-NLS-2$ //$NON-NLS-1$
-		
-		Project projet = this.result.getProject();
-		// if (projet.getCreationDate() != null) {
-		// buff.append(NLS.bind(PropertiesCoreMessages.createdTheP0, TXMResult.PRETTY_LOCALIZED_TIME_FORMAT.format(projet.getCreationDate())));
-		// }
-		// if (projet.getLastComputingDate() != null) {
-		// buff.append(NLS.bind(PropertiesCoreMessages.updatedTheP0, TXMResult.PRETTY_LOCALIZED_TIME_FORMAT.format(projet.getLastComputingDate())));
-		// }
-		//
-		// if (projet.getDescription() != null && projet.getDescription().length() > 0) {
-		// buff.append("<p><h3>Description</h3>" + projet.getDescription() + "</p>"); //$NON-NLS-1$ //$NON-NLS-2$
-		// }
-		
-		buff.append("<h3 style'font-family:\"Arial\";'>" + PropertiesCoreMessages.generalStatistics_2 + "</h3>\n"); //$NON-NLS-1$ //$NON-NLS-2$
-		
+
+	public String htmlDumpGeneralStats(StringBuffer buff) {
+
+		if (buff == null) {
+			buff = new StringBuffer();
+		}
+
+		//buff.append("<h3 style'font-family:\"Arial\";'>" + PropertiesCoreMessages.generalStatistics_2 + "</h3>\n"); //$NON-NLS-1$ //$NON-NLS-2$
+
 		// counts
 		buff.append("<ul>\n"); //$NON-NLS-1$
 		buff.append("<li>" + NLS.bind(PropertiesCoreMessages.numberOfWordsP0, NumberFormat.getInstance().format(numberOfWords)) + "</li>\n"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -294,9 +285,18 @@
 		buff.append("<li>" + NLS.bind(PropertiesCoreMessages.numberOfWordProperties, properties.size(), StringUtils.join(properties, ", ")) + "</li>\n"); //$NON-NLS-2$ //$NON-NLS-1$
 		buff.append("<li>" + NLS.bind(PropertiesCoreMessages.numberOfStructuralUnits, structures.size(), StringUtils.join(structures, ", ")) + "</li>\n"); //$NON-NLS-2$ //$NON-NLS-1$
 		buff.append("</ul>\n"); //$NON-NLS-1$
-		
+
+		return buff.toString();
+	}
+
+	public String htmlDumpLexicalProperties(StringBuffer buff) {
+
+		if (buff == null) {
+			buff = new StringBuffer();
+		}
+
 		// Propriétés d'occurrences
-		buff.append("<h3 style'font-family:\"Arial\";'>" + NLS.bind(PropertiesCoreMessages.lexicalUnitsPropertiesMaxP0Values, props.pMaxPropertiesToDisplay) + "</h3>\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		//buff.append("<h3 style'font-family:\"Arial\";'>" + NLS.bind(PropertiesCoreMessages.lexicalUnitsPropertiesMaxP0Values, props.pMaxPropertiesToDisplay) + "</h3>\n"); //$NON-NLS-1$ //$NON-NLS-2$
 		ArrayList<String> properties = new ArrayList<>(propertiesValues.keySet());
 		Collections.sort(properties);
 		buff.append("<ul>\n"); //$NON-NLS-1$
@@ -314,21 +314,30 @@
 			}
 		}
 		buff.append("</ul>\n"); //$NON-NLS-1$
-		
+
+		return buff.toString();
+	}
+
+	public String htmlDumpStructureProperties(StringBuffer buff) {
+
+		if (buff == null) {
+			buff = new StringBuffer();
+		}
+
 		// Propriété de structures
-		buff.append("<h3 style'font-family:\"Arial\";'>" + NLS.bind(PropertiesCoreMessages.structuralUnitsPropertiesMaxP0Values, props.pMaxPropertiesToDisplay) + "</h3>\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		//buff.append("<h3 style'font-family:\"Arial\";'>" + NLS.bind(PropertiesCoreMessages.structuralUnitsPropertiesMaxP0Values, props.pMaxPropertiesToDisplay) + "</h3>\n"); //$NON-NLS-1$ //$NON-NLS-2$
 		buff.append("<ul>\n"); //$NON-NLS-1$
 		for (String s : internalArchitecture) {
 			StringBuffer subbuffer = new StringBuffer();
 			if (s.equals("txmcorpus")) //$NON-NLS-1$
 				continue;// ignore the txmcorpus structure
-			
-			properties = new ArrayList<>(internalArchitectureProperties.get(s).keySet());
-			
+
+			List<String> properties = new ArrayList<>(internalArchitectureProperties.get(s).keySet());
+
 			subbuffer.append("<li> " + s + "\n<ul>\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			if (internalArchitectureProperties.get(s).keySet().size() == 0)
 				subbuffer.append("<li>" + PropertiesCoreMessages.noProperty + "</li>\n"); //$NON-NLS-1$ //$NON-NLS-2$
-			
+
 			// System.out.println("struct: "+s+" >> "+properties);
 			Collections.sort(properties);
 			// System.out.println("struct: "+s+" >sort> "+properties);
@@ -349,12 +358,12 @@
 							subbuffer.append(psv.replace("<", "&lt;")); //$NON-NLS-1$ //$NON-NLS-2$
 						else
 							subbuffer.append("\"\""); //$NON-NLS-1$
-						
+
 						if (i == values.size() - 1)
 							subbuffer.append("."); //$NON-NLS-1$
 						else
 							subbuffer.append(", "); //$NON-NLS-1$
-						
+
 						if (i >= props.pMaxPropertiesToDisplay) {
 							subbuffer.append("..."); //$NON-NLS-1$
 							break;
@@ -363,77 +372,129 @@
 					subbuffer.append("</li>\n"); //$NON-NLS-1$
 				}
 			}
-			
+
 			if (properties.size() == 0) {
 				subbuffer.append("<p>--</p>\n"); //$NON-NLS-1$
 			}
-			
+
 			subbuffer.append("</ul>\n</li>\n"); //$NON-NLS-1$
 			if (nbOfValues > 0) {
 				buff.append(subbuffer);
 			}
 		}
 		buff.append("</ul>\n"); //$NON-NLS-1$
-		buff.append("</body>\n"); //$NON-NLS-1$
-		buff.append("</html>\n"); //$NON-NLS-1$
-		
+
 		return buff.toString();
 	}
-	
+
 	/**
-	 * dump the result in the console.
+	 * dump the results of the diagnostic in a String containing HTML code.
 	 *
-	 * @param maxvalue
-	 *            the maxvalue
 	 * @return the string
 	 */
-	public String dump(int maxvalue) {
+	public String htmlDumpAll() {
 		StringBuffer buff = new StringBuffer();
-		
-		buff.append(PropertiesCoreMessages.generalStatistics);
+
+		// Project projet = this.result.getProject();
+		// if (projet.getCreationDate() != null) {
+		// buff.append(NLS.bind(PropertiesCoreMessages.createdTheP0, TXMResult.PRETTY_LOCALIZED_TIME_FORMAT.format(projet.getCreationDate())));
+		// }
+		// if (projet.getLastComputingDate() != null) {
+		// buff.append(NLS.bind(PropertiesCoreMessages.updatedTheP0, TXMResult.PRETTY_LOCALIZED_TIME_FORMAT.format(projet.getLastComputingDate())));
+		// }
+		//
+		// if (projet.getDescription() != null && projet.getDescription().length() > 0) {
+		// buff.append("<p><h3>Description</h3>" + projet.getDescription() + "</p>"); //$NON-NLS-1$ //$NON-NLS-2$
+		// }
+
+		htmlDumpGeneralStats(buff);
+
+		htmlDumpLexicalProperties(buff);
+
+		htmlDumpStructureProperties(buff);
+
+		buff.append("</body>\n"); //$NON-NLS-1$
+		buff.append("</html>\n"); //$NON-NLS-1$
+
+		return buff.toString();
+	}
+
+
+	public String dumpGeneralStats() {
+
+		StringBuffer buff = new StringBuffer();
+
 		buff.append(PropertiesCoreMessages.t + String.format(Locale.FRANCE, "%,d", numberOfWords) + "\n"); //$NON-NLS-1$
 		buff.append(PropertiesCoreMessages.wordProperties + String.format("%,d", NProperties) + "\n"); //$NON-NLS-1$
-		/*
-		 * for (String s : propertiesCounts.keySet()) if (!s.equals("id")) //$NON-NLS-1$
-		 * buff.append(" - " + s + " " + propertiesCounts.get(s) + "\n"); //$NON-NLS-1$
-		 * //$NON-NLS-2$ //$NON-NLS-3$
-		 */
+
 		buff.append(PropertiesCoreMessages.s + String.format("%,d", NStructures) + "\n"); //$NON-NLS-1$
-		for (String s : structuresCounts.keySet())
+		for (String s : structuresCounts.keySet()) {
 			buff.append(" - " + s + "\n");// +structuresCounts.get(s)+"\n"); //$NON-NLS-1$ //$NON-NLS-2$
-			
-		/*
-		 * buff.append("* Structural Units counts\n"); for(String s :
-		 * internalArchitecture) buff.append(" - "+s+" "+hierarchieCounts.get(s)+"\n");
-		 */
-		buff.append(PropertiesCoreMessages.structuralUnitsProperties);
+		}
+
+		return buff.toString();
+	}
+
+	public String dumpLexicalStats() {
+
+		StringBuffer buff = new StringBuffer();
+
+		ArrayList<String> properties = new ArrayList<>(propertiesValues.keySet());
+		Collections.sort(properties);
+		for (String s : properties) {
+			if (!s.equals("id")) { //$NON-NLS-1$
+
+				buff.append("- " + s + " : "); //$NON-NLS-1$ //$NON-NLS-2$
+				for (String v : propertiesValues.get(s)) {
+					buff.append(v + ", "); //$NON-NLS-1$
+				}
+				if (propertiesValues.get(s).size() >= this.props.pMaxPropertiesToDisplay) {
+					buff.append("..."); //$NON-NLS-1$
+				}
+				buff.append("\n"); //$NON-NLS-1$
+			}
+		}
+		buff.append("\n"); //$NON-NLS-1$
+
+		return buff.toString();
+	}
+
+	/**
+	 * dump the result in the console.
+	 *
+	 * @param maxvalue the maxvalue
+	 * @return the string
+	 */
+	public String dumpStrutureStats() {
+		StringBuffer buff = new StringBuffer();
+
 		for (String s : internalArchitecture) {
 			buff.append(" - " + s + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			for (String ps : internalArchitectureProperties.get(s).keySet()) {
 				if (!(s.equals("text") && (ps.equals("project") || ps.equals("base") || ps.equals("id")))) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 				{
 					buff.append("   - " + ps + "(" + internalArchitectureProperties.get(s).get(ps).size() + ") = "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-					
+
 					int valuecount = 0;
 					for (String psv : internalArchitectureProperties.get(s).get(ps)) {
 						buff.append(psv);
-						if (valuecount++ >= maxvalue) {
+						if (valuecount++ >= numberOfWords) {
 							buff.append("..."); //$NON-NLS-1$
 							break;
 						}
 						if (valuecount < internalArchitectureProperties.get(s).get(ps).size())
 							buff.append(", "); //$NON-NLS-1$
 					}
-					
+
 					buff.append("\n"); //$NON-NLS-1$
 				}
 			}
 		}
-		
+
 		return buff.toString();
 	}
-	
-	
+
+
 	/**
 	 * Gets the t.
 	 *
@@ -442,7 +503,7 @@
 	public int getT() {
 		return numberOfWords;
 	}
-	
+
 	/**
 	 * Gets the n properties.
 	 *
@@ -451,7 +512,7 @@
 	public int getNProperties() {
 		return NProperties;
 	}
-	
+
 	/**
 	 * Gets the internal architecture.
 	 *
@@ -460,7 +521,7 @@
 	public List<String> getInternalArchitecture() {
 		return internalArchitecture;
 	}
-	
+
 	/**
 	 * Gets the n structures.
 	 *
@@ -469,7 +530,7 @@
 	public int getNStructures() {
 		return NStructures;
 	}
-	
+
 	/**
 	 * Gets the structures counts.
 	 *
@@ -478,7 +539,7 @@
 	public HashMap<String, Integer> getStructuresCounts() {
 		return structuresCounts;
 	}
-	
+
 	/**
 	 * Gets the annotations types.
 	 *
@@ -487,7 +548,7 @@
 	public HashMap<String, Integer> getAnnotationsTypes() {
 		return annotationsTypes;
 	}
-	
+
 	/**
 	 * Gets the annotations origins.
 	 *
@@ -496,24 +557,43 @@
 	public HashMap<String, Integer> getAnnotationsOrigins() {
 		return annotationsOrigins;
 	}
-	
+
 	@Override
 	public boolean _compute(TXMProgressMonitor monitor) throws Exception {
-		
+
 		monitor.setTask(props.getComputingStartMessage());
-		
+
 		this.stepGeneralInfos();
 		monitor.worked(34);
-		
+
 		this.stepLexicalProperties();
 		monitor.worked(33);
-		
+
 		this.stepStructuralUnits();
 		monitor.worked(33);
-		
+
+		computableInformations = new LinkedHashSet<String>(Arrays.asList("Summary Statistics", "Lexical Units properties", "Structural Units properties"));
+		data.clear();
+
+		for (EngineType set : Toolbox.getEngineManagers().keySet()) {
+			
+			EnginesManager<?> se = Toolbox.getEngineManagers().get(set);
+			for (Engine engine : se.getEngines().values()) {
+				
+				String info = engine.hasAdditionalDetailsForResult(result);
+				if (info != null && info.length() > 0) {
+					if (!data.containsKey(info)) {
+						data.put(info, "");
+					}
+					data.put(info, data.get(info) + "\n" + engine.getAdditionalDetailsForResult(result));
+					computableInformations.add(info);
+				}
+			}
+		}
+		//	System.out.println(data.keySet());
 		return true;
 	}
-	
+
 	public String getDetails() {
 		if (numberOfWords >= 0) {
 			return NLS.bind(PropertiesCoreMessages.numberOfWordsP0, numberOfWords);
Index: TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/PropertiesComputer.java
===================================================================
--- TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/PropertiesComputer.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/PropertiesComputer.java	(revision 3710)
@@ -1,6 +1,7 @@
 package org.txm.properties.core.functions;
 
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 
 import org.txm.core.results.TXMResult;
@@ -28,7 +29,7 @@
 	 * 
 	 * @return
 	 */
-	public abstract List<String> getComputableInformations();
+	public abstract LinkedHashSet<String> getComputableInformations();
 	
 	/**
 	 * raw informations
@@ -36,7 +37,7 @@
 	 * @param name
 	 * @return
 	 */
-	public abstract LinkedHashMap<String, String> getInformation(String name);
+	public abstract String getInformation(String name);
 	
 	/**
 	 * HTML formated informations to insert a HTML element
Index: TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/Properties.java
===================================================================
--- TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/Properties.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.properties.core/src/org/txm/properties/core/functions/Properties.java	(revision 3710)
@@ -31,12 +31,9 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
+import java.util.LinkedHashSet;
 
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.txm.Toolbox;
-import org.txm.core.messages.TXMCoreMessages;
 import org.txm.core.results.Parameter;
 import org.txm.core.results.TXMParameters;
 import org.txm.core.results.TXMResult;
@@ -102,15 +99,13 @@
 			computer = new PropertiesComputer<TXMResult>(this, this.parent) {
 				
 				@Override
-				public List getComputableInformations() {
-					return Arrays.asList("details");
+				public LinkedHashSet<String> getComputableInformations() {
+					return new LinkedHashSet<String>(Arrays.asList("details"));
 				}
 				
 				@Override
-				public LinkedHashMap<String, String> getInformation(String name) {
-					LinkedHashMap<String, String> data = new LinkedHashMap<>();
-					data.put("details", result.getDetails());
-					return data;
+				public String getInformation(String name) {
+					return result.getDetails();
 				}
 				
 				@Override
@@ -171,17 +166,35 @@
 	// }
 	
 	public String htmlDump() {
+		
 		StringBuffer buffer = new StringBuffer();
+		
+		buffer.append("<? version=\"1.0\" encoding=\"UTF-8\"?>\n" + //$NON-NLS-1$
+				"<html>" + //$NON-NLS-1$
+				"<head>" + //$NON-NLS-1$
+				"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>" + //$NON-NLS-1$
+				"</head>" + //$NON-NLS-1$
+				"<body>\n"); //$NON-NLS-1$
+		
+		buffer.append("<h1 style'font-family:\"Arial\";'>" + PropertiesCoreMessages.descriptionOf + this.getParent().getName() + "</h1>\n"); //$NON-NLS-2$ //$NON-NLS-1$
+		
 		for (String info : computer.getComputableInformations()) {
+			buffer.append("<div id=\""+info+"\">\n");
+			buffer.append("<h2>"+info+"</h2>\n");
 			buffer.append(computer.getInformationHTML(info));
+			buffer.append("</div>\n");
 		}
+		
+		buffer.append("</body>\n"); //$NON-NLS-1$
 		return buffer.toString();
 	}
 	
 	public String dump(int maxvalue) {
 		StringBuffer buffer = new StringBuffer();
 		for (String info : computer.getComputableInformations()) {
+			buffer.append(info+"\n");
 			buffer.append(computer.getInformation(info).toString());
+			buffer.append(info+"\n");
 		}
 		return buffer.toString();
 	}
Index: TXM/trunk/bundles/org.txm.treesearch.core/src/org/txm/treesearch/preferences/TreeSearchPreferences.java
===================================================================
--- TXM/trunk/bundles/org.txm.treesearch.core/src/org/txm/treesearch/preferences/TreeSearchPreferences.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.treesearch.core/src/org/txm/treesearch/preferences/TreeSearchPreferences.java	(revision 3710)
@@ -1,6 +1,5 @@
 package org.txm.treesearch.preferences;
 
-
 import org.osgi.service.prefs.Preferences;
 import org.txm.core.preferences.TXMPreferences;
 
@@ -21,6 +20,8 @@
 	public static final String NTFEATURE = "nt";
 
 	public static final String VISUALISATION = "visualisation";
+
+	public static String BACKTOTREE_POSITION = "linked_editor_position";
 	
 	/**
 	 * Gets the instance.
@@ -42,6 +43,7 @@
 		preferences.put(DEFAULT_VISUALISATION, "TIGER");
 		preferences.put(TFEATURE, "word");
 		preferences.put(NTFEATURE, "cat");
-		preferences.put(VISUALISATION, "");
+		preferences.put(VISUALISATION, ""); // no supplementary visualisation
+		preferences.putInt(BACKTOTREE_POSITION, 0);
 	}
 }
Index: TXM/trunk/bundles/org.txm.internalview.rcp/src/org/txm/internalview/rcp/handlers/BackToInternalView.java
===================================================================
--- TXM/trunk/bundles/org.txm.internalview.rcp/src/org/txm/internalview/rcp/handlers/BackToInternalView.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.internalview.rcp/src/org/txm/internalview/rcp/handlers/BackToInternalView.java	(revision 3710)
@@ -4,6 +4,7 @@
 import java.util.List;
 
 import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.swt.graphics.Point;
 import org.eclipse.ui.IWorkbenchPage;
 import org.txm.core.preferences.TBXPreferences;
 import org.txm.core.results.TXMResult;
@@ -37,6 +38,15 @@
 			InternalViewEditor editor = (InternalViewEditor) page.openEditor(editorInput, InternalViewEditor.class.getName()); // $NON-NLS-1$
 			editor.backToText(match);
 			if (editor != null) {
+				int position = -2;
+				if (position == -2) {
+					Point s = sourceEditor.getParent().getSize();
+					if (s.x < s.y) {
+						position = EModelService.ABOVE;
+					} else {
+						position = EModelService.RIGHT_OF;
+					}
+				}
 				SWTEditorsUtils.addEditor(sourceEditor, editor, EModelService.ABOVE);
 			}
 		}
Index: TXM/trunk/bundles/org.txm.conllu.core/plugin.xml
===================================================================
--- TXM/trunk/bundles/org.txm.conllu.core/plugin.xml	(revision 3709)
+++ TXM/trunk/bundles/org.txm.conllu.core/plugin.xml	(revision 3710)
@@ -24,5 +24,11 @@
             class="org.txm.conllu.core.preferences.UDTreePreferences">
       </initializer>
    </extension>
+   <extension
+         point="org.txm.searchengine.core.SearchEngine">
+      <SearchEngine
+            class="org.txm.conllu.core.search.UDSearchEngine">
+      </SearchEngine>
+   </extension>
 
 </plugin>
Index: TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/function/UDSearch.java
===================================================================
--- TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/function/UDSearch.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/function/UDSearch.java	(revision 3710)
@@ -1,431 +0,0 @@
-package org.txm.conllu.core.function;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-import org.txm.conllu.core.preferences.UDPreferences;
-import org.txm.conllu.core.preferences.UDTreePreferences;
-import org.txm.core.results.TXMParameters;
-import org.txm.libs.deptreeviz.UDDepTreeVizPrintTree;
-import org.txm.searchengine.core.Selection;
-import org.txm.searchengine.cqp.CQPSearchEngine;
-import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
-import org.txm.searchengine.cqp.corpus.CQPCorpus;
-import org.txm.searchengine.cqp.corpus.QueryResult;
-import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
-import org.txm.searchengine.cqp.corpus.Subcorpus;
-import org.txm.searchengine.cqp.corpus.WordProperty;
-import org.txm.searchengine.cqp.corpus.query.CQLQuery;
-import org.txm.searchengine.cqp.corpus.query.Match;
-import org.txm.treesearch.function.TreeSearch;
-import org.txm.treesearch.function.TreeSearchSelector;
-import org.txm.utils.TXMProgressMonitor;
-import org.txm.utils.logger.Log;
-
-public class UDSearch extends TreeSearch {
-	
-	protected boolean ready = false;
-	
-	Subcorpus udSentences;
-
-	private QueryResult matches;
-	
-	public UDSearch(CQPCorpus corpus) {
-		this(null, corpus);
-	}
-	
-	public UDSearch(String parentNodePath, CQPCorpus corpus) {
-		super(parentNodePath, corpus);
-		
-		this.corpus = getParent();
-		
-		ready = hasUDProperties(corpus, UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX)));
-	}
-	
-	public UDSearch(String parentNodePath) {
-		this(parentNodePath, null);
-	}
-	
-	public boolean isComputed() {
-		return matches != null;
-	}
-	
-	public boolean isDrawn() {
-		return matches != null;
-	}
-	
-	public Selection getSelection() {
-		return matches;
-	}
-	
-	@Override
-	public boolean toSVG(File svgFile, int sent, int sub, List<String> T,  List<String> NT) {
-		
-		if (!isDrawn()) return false; // no result
-		try {
-			//File file = File.createTempFile("txm", ".svg", new File(Toolbox.getTxmHomePath(), "results"));
-			
-			//String engine = UDTreePreferences.getInstance().getString(UDTreePreferences.ENGINE);
-			
-			Match match = this.matches.getMatches().get(sent);
-			org.txm.objects.Match sentence = null;
-			for (org.txm.objects.Match s : udSentences.getMatches()) {
-				if (s.getStart() <= match.getStart() && match.getEnd() <= s.getEnd()) {
-					sentence = s;
-					break;
-				}
-			}
-			
-			if (sentence == null) {
-				Log.warning("Error: match positions not found in sentences positions");
-				return false;
-			}
-			
-			int[] positions = new int[sentence.size()];
-			for (int i = 0 ; i < sentence.size() ; i++) positions[i] = sentence.getStart()+i;
-			
-			String prefix = UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX));
-			
-			String[] Tvalues = new String[positions.length];
-			
-			
-			if (T != null && T.size() > 0) {
-				for (int i = 0 ; i < Tvalues.length ; i++) {
-					Tvalues[i] = "";
-				}
-				for (int iT = 0 ; iT < T.size() ; iT++) {
-					String t = T.get(iT);
-					if (corpus.getProperty(t) != null) {
-						String[] tvalues = corpus.getProperty(t).cpos2Str(positions);
-						for (int i = 0 ; i < tvalues.length ; i++) {
-							if (iT > 0) Tvalues[i] += " / ";
-							Tvalues[i] += tvalues[i];
-						}
-					}
-				}
-			}
-			
-			String[] NTvalues = new String[positions.length];
-			if (NT != null && NT.size() > 0) {
-				for (int i = 0 ; i < NTvalues.length ; i++) {
-					NTvalues[i] = "";
-				}
-				for (int iNT = 0 ; iNT < NT.size() ; iNT++) {
-					String nt = NT.get(iNT);
-					if (corpus.getProperty(nt) != null) {
-						String[] ntvalues = corpus.getProperty(nt).cpos2Str(positions);
-						for (int i = 0 ; i < ntvalues.length ; i++) {
-							if (iNT > 0) NTvalues[i] += " / ";
-							NTvalues[i] += ntvalues[i];
-						}
-					}
-				}
-			}
-			
-			
-//			if (NT != null && corpus.getProperty(NT) != null) {
-//				NTvalues = corpus.getProperty(NT).cpos2Str(positions);
-//			}
-			HashMap<String, String[]> values = new HashMap<>();
-			for (String p : ImportCoNLLUAnnotations.UD_PROPERTY_NAMES) {
-				values.put(prefix+p, corpus.getProperty(prefix+p).cpos2Str(positions));
-			}
-			
-			ArrayList<String> conll = new ArrayList<String>();
-			
-			for (int p = 0 ; p < positions.length ; p++) {
-				StringBuilder buffer = new StringBuilder();
-				for (String prop : ImportCoNLLUAnnotations.UD_PROPERTY_NAMES) {
-					if (buffer.length() > 0) buffer.append("\t");
-					buffer.append(values.get(prefix+prop)[p]);
-				}
-				
-				conll.add(buffer.toString());
-			}
-			
-			if (UDTreePreferences.getInstance().getBoolean(UDTreePreferences.PRINTCONLLUSENTENCES)) {
-				Log.info("CoNLL-U:");
-				for (String l : conll) {
-					Log.info(l);
-				}
-			}
-			
-			if (UDTreePreferences.BRAT.equals(pVisualisation)) {
-				return BratPrintTree.print(svgFile, conll, Tvalues, NTvalues) != null;
-			} else { // if (engine == null || UDTreePreferences.DEPTREEVIZ.equals(engine)) {
-				return UDDepTreeVizPrintTree.print(svgFile, conll, Tvalues, NTvalues) != null;
-			} 
-		}
-		catch (Throwable e) {
-			Log.warning("Error while drawing SVG: "+e+ " at "+e.getStackTrace()[0]);
-			Log.printStackTrace(e);
-			return false;
-		}
-	}
-	
-	protected String[] getAvailableProperties() throws CqiClientException {
-		List<WordProperty> props = corpus.getProperties();
-		String[] sprops = new String[props.size()];
-		
-		for (int i = 0 ; i < props.size() ; i++) {
-			sprops[i] = props.get(i).getName();
-		}
-		
-		Arrays.sort(sprops);
-		return sprops;
-	}
-	
-	public String[] getAvailableTProperties() {
-		
-//		String prefix = UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX));
-//		
-//		String[] properties = new String[ImportCoNLLUAnnotations.UD_PROPERTY_NAMES.length];
-//		for (int p = 0 ; p < ImportCoNLLUAnnotations.UD_PROPERTY_NAMES.length ; p++) {
-//			properties[p] = prefix+ImportCoNLLUAnnotations.UD_PROPERTY_NAMES[p];
-//		}
-		try {
-			return getAvailableProperties();
-		}
-		catch (CqiClientException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-			return new String[0];
-		}
-	}
-	
-	/**
-	 * UD words stores the T and NT values 
-	 */
-	public final String[] getAvailableNTProperties() {
-		return getAvailableTProperties();
-	}
-	
-	@Override
-	public CQPCorpus getParent() {
-		return (CQPCorpus) super.getParent();
-	}
-	
-	public boolean isReady() {
-		return ready;
-	}
-	
-	public int getNSentences() {
-		if (matches == null) return 0;
-		
-			try {
-				return matches.getMatches().size();
-			}
-			catch (CqiClientException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-				return 0;
-			}//getNMatch();
-	}
-	
-	public int getNSubGraph(int matchNo) {
-		
-		return 1;
-	}
-	
-	public int getSub(int matchNo) {
-		
-		return 1;
-	}
-	
-	/**
-	 * @return the query or the generic one
-	 */
-	public String getQuery() {
-		
-		String prefix = UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX));
-		
-		if (pQuery == null || pQuery.getQueryString().length() ==0) {
-			return "["+prefix+"id=\"1\"]";
-		} else {
-			return pQuery.getQueryString();
-		}
-	}
-	
-	@Override
-	public String toString() {
-		if (pQuery != null) {
-			return pQuery.getQueryString().substring(0, Math.min(20, pQuery.getQueryString().length()));
-		}
-		return "" + corpus;
-	}
-	
-	@Override
-	public boolean _toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws Exception {
-		return false;
-	}
-	
-	@Override
-	public void clean() {
-		
-	}
-	
-	/**
-	 * 
-	 * @return the array of extensions to show in the FileDialog SWT widget
-	 */
-	@Override
-	public String[] getExportTXTExtensions() {
-		return new String[] { "*.xml" };
-	}
-	
-	@Override
-	public boolean canCompute() {
-		return corpus != null; // && pQuery != null && pQuery.length() > 0; // if pQuery is empty/null set a default query
-	}
-	
-	@Override
-	public boolean setParameters(TXMParameters parameters) {
-		if (parameters.getString("query") != null) {
-			this.pQuery = new CQLQuery(parameters.getString("query"));
-		}
-		return true;
-	}
-	
-	@Override
-	public boolean saveParameters() throws Exception {
-		return true;
-	}
-	
-	@Override
-	public boolean loadParameters() throws Exception {
-		return super.loadParameters();
-	}
-	
-	@Override
-	protected boolean _compute(TXMProgressMonitor monitor) throws Exception {
-		
-		String prefix = UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX));
-		
-		
-		if (pQuery == null || pQuery.getQueryString().length() == 0) {
-			pQuery = new CQLQuery("["+prefix+"deprel=\"root\"]"); // [ud-deprel="root"]
-		}
-		
-		udSentences = corpus.getSubcorpusByName(corpus.getName()+"/ud-sentences");
-		if (udSentences != null) udSentences.compute();
-		
-		CQLQuery sentencesQuery = new CQLQuery("["+prefix+"id=\"1\"] ["+prefix+"id !=\"1\"]+ [:"+prefix+"id=\"1|__UNDEF__\":]");
-		if (udSentences == null) {
-			udSentences = corpus.createSubcorpus(sentencesQuery, "ud-sentences");
-			udSentences.setVisible(false);
-		}
-		if (!udSentences.getQuery().equals(sentencesQuery)) {
-			udSentences = corpus.createSubcorpus(sentencesQuery, "ud-sentences");
-			udSentences.setVisible(false);
-		}
-
-		matches = udSentences.query((CQLQuery)pQuery, "matches", false);
-		
-		return matches.getNMatch() > 0;
-	}
-	
-	@Override
-	public String getResultType() {
-		return "UD search";
-	}
-	
-	public void setIndexAndSubIndex(int sent, int sub) {
-		this.pIndex = sent;
-		this.pSubIndex = sub;
-	}
-	
-	@Override
-	public boolean hasSubMatchesStrategy() {
-		
-		return false;
-	}
-	
-	public static boolean hasUDProperties(CQPCorpus corpus) {
-		return hasUDProperties(corpus, UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX)));
-	}
-	
-	public static boolean hasUDProperties(CQPCorpus corpus, String prefix) {
-		
-		for (String prop : ImportCoNLLUAnnotations.UD_PROPERTY_NAMES) {
-			try {
-				if (corpus.getProperty(prefix+prop) == null) return false;
-			}
-			catch (CqiClientException e) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	@Override
-	public String getEngine() {
-		
-		return UDTreeSearchSelector.UD;
-	}
-
-	@Override
-	public TreeSearchSelector getSelector() {
-		
-		return new UDTreeSearchSelector();
-	}
-
-	@Override
-	public String[] getTextAndWordIDSOfCurrentSentence() throws Exception {
-		
-		String[] textAndWord = new String[2];
-		
-		WordProperty pid = corpus.getProperty("id");
-		StructuralUnitProperty ptextid = corpus.getStructuralUnitProperty("text_id");
-		
-		org.txm.objects.Match match = this.udSentences.getMatches().get(this.pIndex);
-		int[] positions = new int[match.size()];
-		for (int i = 0 ; i < match.size() ; i++) {
-			positions[i] = match.getStart() + i;
-		}
-		
-		List<String> idvalues = CQPSearchEngine.getEngine().getValuesForProperty(positions, pid);
-		
-		int[] structid = CQPSearchEngine.getCqiClient().cpos2Struc(ptextid.getQualifiedName(), positions);
-		String[] values = CQPSearchEngine.getCqiClient().struc2Str(ptextid.getQualifiedName(), structid);
-		
-		textAndWord[0] = values[0];
-		textAndWord[1] = StringUtils.join(idvalues, ",");
-		
-		return textAndWord;
-	}
-
-	@Override
-	public String getIconPath() {
-		
-		return "platform:/plugin/org.txm.conllu.core/icons/functions/UD.png";
-	}
-
-	@Override
-	public File createTemporaryFile(File resultDir) {
-		
-		try {
-			String engine = this.pVisualisation;//UDTreePreferences.getInstance().getString(UDTreePreferences.VISUALISATION);
-			if (engine.equals(UDTreePreferences.BRAT)) {
-				return File.createTempFile("UDTreeSearch", ".html", resultDir);
-			} else {
-				return File.createTempFile("UDTreeSearch", ".svg", resultDir);
-			}
-		}
-		catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-			return null;
-		} //$NON-NLS-1$ //$NON-NLS-2$ull;
-	}
-
-	@Override
-	public String[] getAvailableVisualisations() {
-		
-		return new String[] {UDTreePreferences.DEPTREEVIZ, UDTreePreferences.BRAT};
-	}
-}
Index: TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/function/UDTreeSearch.java
===================================================================
--- TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/function/UDTreeSearch.java	(revision 0)
+++ TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/function/UDTreeSearch.java	(revision 3710)
@@ -0,0 +1,421 @@
+package org.txm.conllu.core.function;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.txm.conllu.core.preferences.UDPreferences;
+import org.txm.conllu.core.preferences.UDTreePreferences;
+import org.txm.conllu.core.search.UDSearchEngine;
+import org.txm.core.results.TXMParameters;
+import org.txm.libs.deptreeviz.UDDepTreeVizPrintTree;
+import org.txm.searchengine.core.Selection;
+import org.txm.searchengine.cqp.CQPSearchEngine;
+import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
+import org.txm.searchengine.cqp.corpus.CQPCorpus;
+import org.txm.searchengine.cqp.corpus.QueryResult;
+import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
+import org.txm.searchengine.cqp.corpus.Subcorpus;
+import org.txm.searchengine.cqp.corpus.WordProperty;
+import org.txm.searchengine.cqp.corpus.query.CQLQuery;
+import org.txm.searchengine.cqp.corpus.query.Match;
+import org.txm.treesearch.function.TreeSearch;
+import org.txm.treesearch.function.TreeSearchSelector;
+import org.txm.utils.TXMProgressMonitor;
+import org.txm.utils.logger.Log;
+
+public class UDTreeSearch extends TreeSearch {
+	
+	protected boolean ready = false;
+	
+	Subcorpus udSentences;
+
+	private QueryResult matches;
+	
+	public UDTreeSearch(CQPCorpus corpus) {
+		this(null, corpus);
+	}
+	
+	public UDTreeSearch(String parentNodePath, CQPCorpus corpus) {
+		super(parentNodePath, corpus);
+		
+		this.corpus = getParent();
+		
+		ready = hasUDProperties(corpus, UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX)));
+	}
+	
+	public UDTreeSearch(String parentNodePath) {
+		this(parentNodePath, null);
+	}
+	
+	public boolean isComputed() {
+		return matches != null;
+	}
+	
+	public boolean isDrawn() {
+		return matches != null;
+	}
+	
+	public Selection getSelection() {
+		return matches;
+	}
+	
+	@Override
+	public boolean toSVG(File svgFile, int sent, int sub, List<String> T,  List<String> NT) {
+		
+		if (!isDrawn()) return false; // no result
+		try {
+			//File file = File.createTempFile("txm", ".svg", new File(Toolbox.getTxmHomePath(), "results"));
+			
+			//String engine = UDTreePreferences.getInstance().getString(UDTreePreferences.ENGINE);
+			
+			Match match = this.matches.getMatches().get(sent);
+			org.txm.objects.Match sentence = null;
+			for (org.txm.objects.Match s : udSentences.getMatches()) {
+				if (s.getStart() <= match.getStart() && match.getEnd() <= s.getEnd()) {
+					sentence = s;
+					break;
+				}
+			}
+			
+			if (sentence == null) {
+				Log.warning("Error: match positions not found in sentences positions");
+				return false;
+			}
+			
+			int[] positions = new int[sentence.size()];
+			for (int i = 0 ; i < sentence.size() ; i++) positions[i] = sentence.getStart()+i;
+			
+			String prefix = UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX));
+			
+			String[] Tvalues = new String[positions.length];
+			
+			
+			if (T != null && T.size() > 0) {
+				for (int i = 0 ; i < Tvalues.length ; i++) {
+					Tvalues[i] = "";
+				}
+				for (int iT = 0 ; iT < T.size() ; iT++) {
+					String t = T.get(iT);
+					if (corpus.getProperty(t) != null) {
+						String[] tvalues = corpus.getProperty(t).cpos2Str(positions);
+						for (int i = 0 ; i < tvalues.length ; i++) {
+							if (iT > 0) Tvalues[i] += " / ";
+							Tvalues[i] += tvalues[i];
+						}
+					}
+				}
+			}
+			
+			String[] NTvalues = new String[positions.length];
+			if (NT != null && NT.size() > 0) {
+				for (int i = 0 ; i < NTvalues.length ; i++) {
+					NTvalues[i] = "";
+				}
+				for (int iNT = 0 ; iNT < NT.size() ; iNT++) {
+					String nt = NT.get(iNT);
+					if (corpus.getProperty(nt) != null) {
+						String[] ntvalues = corpus.getProperty(nt).cpos2Str(positions);
+						for (int i = 0 ; i < ntvalues.length ; i++) {
+							if (iNT > 0) NTvalues[i] += " / ";
+							NTvalues[i] += ntvalues[i];
+						}
+					}
+				}
+			}
+			
+			
+//			if (NT != null && corpus.getProperty(NT) != null) {
+//				NTvalues = corpus.getProperty(NT).cpos2Str(positions);
+//			}
+			HashMap<String, String[]> values = new HashMap<>();
+			for (String p : ImportCoNLLUAnnotations.UD_PROPERTY_NAMES) {
+				values.put(prefix+p, corpus.getProperty(prefix+p).cpos2Str(positions));
+			}
+			
+			ArrayList<String> conll = new ArrayList<String>();
+			
+			for (int p = 0 ; p < positions.length ; p++) {
+				StringBuilder buffer = new StringBuilder();
+				for (String prop : ImportCoNLLUAnnotations.UD_PROPERTY_NAMES) {
+					if (buffer.length() > 0) buffer.append("\t");
+					buffer.append(values.get(prefix+prop)[p]);
+				}
+				
+				conll.add(buffer.toString());
+			}
+			
+			if (UDTreePreferences.getInstance().getBoolean(UDTreePreferences.PRINTCONLLUSENTENCES)) {
+				Log.info("CoNLL-U:");
+				for (String l : conll) {
+					Log.info(l);
+				}
+			}
+			
+			if (UDTreePreferences.BRAT.equals(pVisualisation)) {
+				return BratPrintTree.print(svgFile, conll, Tvalues, NTvalues) != null;
+			} else { // if (engine == null || UDTreePreferences.DEPTREEVIZ.equals(engine)) {
+				return UDDepTreeVizPrintTree.print(svgFile, conll, Tvalues, NTvalues) != null;
+			} 
+		}
+		catch (Throwable e) {
+			Log.warning("Error while drawing SVG: "+e+ " at "+e.getStackTrace()[0]);
+			Log.printStackTrace(e);
+			return false;
+		}
+	}
+	
+	protected String[] getAvailableProperties() throws CqiClientException {
+		List<WordProperty> props = corpus.getProperties();
+		String[] sprops = new String[props.size()];
+		
+		for (int i = 0 ; i < props.size() ; i++) {
+			sprops[i] = props.get(i).getName();
+		}
+		
+		Arrays.sort(sprops);
+		return sprops;
+	}
+	
+	public String[] getAvailableTProperties() {
+		
+//		String prefix = UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX));
+//		
+//		String[] properties = new String[ImportCoNLLUAnnotations.UD_PROPERTY_NAMES.length];
+//		for (int p = 0 ; p < ImportCoNLLUAnnotations.UD_PROPERTY_NAMES.length ; p++) {
+//			properties[p] = prefix+ImportCoNLLUAnnotations.UD_PROPERTY_NAMES[p];
+//		}
+		try {
+			return getAvailableProperties();
+		}
+		catch (CqiClientException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			return new String[0];
+		}
+	}
+	
+	/**
+	 * UD words stores the T and NT values 
+	 */
+	public final String[] getAvailableNTProperties() {
+		return getAvailableTProperties();
+	}
+	
+	@Override
+	public CQPCorpus getParent() {
+		return (CQPCorpus) super.getParent();
+	}
+	
+	public boolean isReady() {
+		return ready;
+	}
+	
+	public int getNSentences() {
+		if (matches == null) return 0;
+		
+			try {
+				return matches.getMatches().size();
+			}
+			catch (CqiClientException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+				return 0;
+			}//getNMatch();
+	}
+	
+	public int getNSubGraph(int matchNo) {
+		
+		return 1;
+	}
+	
+	public int getSub(int matchNo) {
+		
+		return 1;
+	}
+	
+	/**
+	 * @return the query or the generic one
+	 */
+	public String getQuery() {
+		
+		String prefix = UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX));
+		
+		if (pQuery == null || pQuery.getQueryString().length() ==0) {
+			return "["+prefix+"id=\"1\"]";
+		} else {
+			return pQuery.getQueryString();
+		}
+	}
+	
+	@Override
+	public String toString() {
+		if (pQuery != null) {
+			return pQuery.getQueryString().substring(0, Math.min(20, pQuery.getQueryString().length()));
+		}
+		return "" + corpus;
+	}
+	
+	@Override
+	public boolean _toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws Exception {
+		return false;
+	}
+	
+	@Override
+	public void clean() {
+		
+	}
+	
+	/**
+	 * 
+	 * @return the array of extensions to show in the FileDialog SWT widget
+	 */
+	@Override
+	public String[] getExportTXTExtensions() {
+		return new String[] { "*.xml" };
+	}
+	
+	@Override
+	public boolean canCompute() {
+		return corpus != null; // && pQuery != null && pQuery.length() > 0; // if pQuery is empty/null set a default query
+	}
+	
+	@Override
+	public boolean setParameters(TXMParameters parameters) {
+		if (parameters.getString("query") != null) {
+			this.pQuery = new CQLQuery(parameters.getString("query"));
+		}
+		return true;
+	}
+	
+	@Override
+	public boolean saveParameters() throws Exception {
+		return true;
+	}
+	
+	@Override
+	public boolean loadParameters() throws Exception {
+		return super.loadParameters();
+	}
+	
+	@Override
+	protected boolean _compute(TXMProgressMonitor monitor) throws Exception {
+		
+		String prefix = UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX));
+		
+		
+		if (pQuery == null || pQuery.getQueryString().length() == 0) {
+			pQuery = new CQLQuery("["+prefix+"deprel=\"root\"]"); // [ud-deprel="root"]
+		}
+		
+		udSentences = UDSearchEngine.getSentenceSubcorpus(corpus, prefix);
+
+		matches = udSentences.query((CQLQuery)pQuery, "matches", false);
+		
+		return matches.getNMatch() > 0;
+	}
+	
+	@Override
+	public String getResultType() {
+		return "UD search";
+	}
+	
+	public void setIndexAndSubIndex(int sent, int sub) {
+		this.pIndex = sent;
+		this.pSubIndex = sub;
+	}
+	
+	@Override
+	public boolean hasSubMatchesStrategy() {
+		
+		return false;
+	}
+	
+	public static boolean hasUDProperties(CQPCorpus corpus) {
+		return hasUDProperties(corpus, UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX)));
+	}
+	
+	public static boolean hasUDProperties(CQPCorpus corpus, String prefix) {
+		
+		for (String prop : ImportCoNLLUAnnotations.UD_PROPERTY_NAMES) {
+			try {
+				if (corpus.getProperty(prefix+prop) == null) return false;
+			}
+			catch (CqiClientException e) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public String getEngine() {
+		
+		return UDTreeSearchSelector.UD;
+	}
+
+	@Override
+	public TreeSearchSelector getSelector() {
+		
+		return new UDTreeSearchSelector();
+	}
+
+	@Override
+	public String[] getTextAndWordIDSOfCurrentSentence() throws Exception {
+		
+		String[] textAndWord = new String[2];
+		
+		WordProperty pid = corpus.getProperty("id");
+		StructuralUnitProperty ptextid = corpus.getStructuralUnitProperty("text_id");
+		
+		org.txm.objects.Match match = this.udSentences.getMatches().get(this.pIndex);
+		int[] positions = new int[match.size()];
+		for (int i = 0 ; i < match.size() ; i++) {
+			positions[i] = match.getStart() + i;
+		}
+		
+		List<String> idvalues = CQPSearchEngine.getEngine().getValuesForProperty(positions, pid);
+		
+		int[] structid = CQPSearchEngine.getCqiClient().cpos2Struc(ptextid.getQualifiedName(), positions);
+		String[] values = CQPSearchEngine.getCqiClient().struc2Str(ptextid.getQualifiedName(), structid);
+		
+		textAndWord[0] = values[0];
+		textAndWord[1] = StringUtils.join(idvalues, ",");
+		
+		return textAndWord;
+	}
+
+	@Override
+	public String getIconPath() {
+		
+		return "platform:/plugin/org.txm.conllu.core/icons/functions/UD.png";
+	}
+
+	@Override
+	public File createTemporaryFile(File resultDir) {
+		
+		try {
+			String engine = this.pVisualisation;//UDTreePreferences.getInstance().getString(UDTreePreferences.VISUALISATION);
+			if (engine.equals(UDTreePreferences.BRAT)) {
+				return File.createTempFile("UDTreeSearch", ".html", resultDir);
+			} else {
+				return File.createTempFile("UDTreeSearch", ".svg", resultDir);
+			}
+		}
+		catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			return null;
+		} //$NON-NLS-1$ //$NON-NLS-2$ull;
+	}
+
+	@Override
+	public String[] getAvailableVisualisations() {
+		
+		return new String[] {UDTreePreferences.DEPTREEVIZ, UDTreePreferences.BRAT};
+	}
+}

Property changes on: TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/function/UDTreeSearch.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/function/UDTreeSearchSelector.java
===================================================================
--- TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/function/UDTreeSearchSelector.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/function/UDTreeSearchSelector.java	(revision 3710)
@@ -20,19 +20,19 @@
 	@Override
 	public boolean canComputeWith(CQPCorpus corpus) {
 		
-		return UDSearch.hasUDProperties(corpus);
+		return UDTreeSearch.hasUDProperties(corpus);
 	}
 	
 	@Override
 	public TreeSearch getTreeSearch(CQPCorpus corpus) {
 		
-		return new UDSearch(corpus);
+		return new UDTreeSearch(corpus);
 	}
 	
 	@Override
 	public TreeSearch getTreeSearch(String resultnodepath, CQPCorpus corpus) {
 		
-		return new UDSearch(resultnodepath, corpus);
+		return new UDTreeSearch(resultnodepath, corpus);
 	}
 
 	@Override
Index: TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/search/UDSearchEngine.java
===================================================================
--- TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/search/UDSearchEngine.java	(revision 0)
+++ TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/search/UDSearchEngine.java	(revision 3710)
@@ -0,0 +1,170 @@
+package org.txm.conllu.core.search;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.txm.Toolbox;
+import org.txm.conllu.core.function.UDTreeSearch;
+import org.txm.conllu.core.function.UDTreeSearchSelector;
+import org.txm.conllu.core.preferences.UDPreferences;
+import org.txm.core.engines.EngineType;
+import org.txm.core.preferences.TXMPreferences;
+import org.txm.core.results.TXMResult;
+import org.txm.objects.CorpusBuild;
+import org.txm.objects.Match;
+import org.txm.searchengine.core.EmptySelection;
+import org.txm.searchengine.core.IQuery;
+import org.txm.searchengine.core.Query;
+import org.txm.searchengine.core.SearchEngine;
+import org.txm.searchengine.core.SearchEngineProperty;
+import org.txm.searchengine.core.Selection;
+import org.txm.searchengine.cqp.CQPSearchEngine;
+import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
+import org.txm.searchengine.cqp.corpus.CQPCorpus;
+import org.txm.searchengine.cqp.corpus.Subcorpus;
+import org.txm.searchengine.cqp.corpus.query.CQLQuery;
+
+/**
+ * Encasulate CQP Search engine to execute queries on "ud-s" subcorpus
+ * @author mdecorde
+ *
+ */
+public class UDSearchEngine extends SearchEngine {
+	
+	public static final String NAME = "UD";
+	
+	CQPSearchEngine CQI;
+
+	private CQPSearchEngine getCQI() {
+		
+		if (CQI == null) {
+			CQI = CQPSearchEngine.getEngine();
+		}
+		return CQI;
+	}
+	
+	@Override
+	public boolean isRunning() {
+		
+		return getCQI().isRunning();
+	}
+
+	@Override
+	public boolean initialize() throws Exception {
+
+		return true;
+	}
+
+	@Override
+	public boolean start(IProgressMonitor monitor) throws Exception {
+		return true;
+	}
+
+	@Override
+	public boolean stop() throws Exception {
+		return true;
+	}
+
+	@Override
+	public void notify(TXMResult r, String state) {
+		
+	}
+
+	@Override
+	public String getName() {
+		return "UD";
+	}
+
+	@Override
+	public Selection query(CorpusBuild corpus, IQuery query, String name, boolean saveQuery) throws Exception {
+		
+		if (corpus instanceof CQPCorpus) {
+			CQPCorpus cqpCorpus = (CQPCorpus)corpus;
+			String prefix = UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX));
+			Subcorpus udsentences = getSentenceSubcorpus(cqpCorpus, prefix);
+			
+			return getCQI().query(udsentences, query, name, saveQuery);
+		}
+		return new EmptySelection(query);
+	}
+
+	@Override
+	public Query newQuery() {
+
+		return new UDQuery();
+	}
+
+	@Override
+	public boolean hasIndexes(CorpusBuild corpus) {
+		return getCQI().hasIndexes(corpus);
+	}
+
+	@Override
+	public String getValueForProperty(Match match, SearchEngineProperty property) {
+		
+		return getCQI().getValueForProperty(match, property);
+	}
+
+	@Override
+	public List<String> getValuesForProperty(Match match, SearchEngineProperty property) {
+		
+		return getCQI().getValuesForProperty(match, property);
+	}
+
+	public static SearchEngine getEngine() {
+		
+		return (UDSearchEngine) Toolbox.getEngineManager(EngineType.SEARCH).getEngine(UDSearchEngine.NAME);
+	}
+	
+	public static Subcorpus getSentenceSubcorpus(CQPCorpus corpus, String prefix) throws CqiClientException, InterruptedException {
+		
+		Subcorpus udSentences = corpus.getSubcorpusByName(corpus.getName()+TXMPreferences.PARENT_NAME_SEPARATOR+"ud-s");
+		if (udSentences != null) udSentences.compute();
+		
+		CQLQuery sentencesQuery = new CQLQuery("["+prefix+"id=\"1\"] ["+prefix+"id !=\"1\"]+ [:"+prefix+"id=\"1|__UNDEF__\":]");
+		if (udSentences == null) { // no ud-s subcorpus, create it
+			udSentences = corpus.createSubcorpus(sentencesQuery, "ud-s");
+			udSentences.setVisible(false);
+		}
+		if (!udSentences.getQuery().equals(sentencesQuery)) { // the subcorpus exists but its query differs 
+			udSentences = corpus.createSubcorpus(sentencesQuery, "ud-s");
+			udSentences.setVisible(false);
+		}
+		
+		return udSentences;
+	}
+
+	public String hasAdditionalDetailsForResult(TXMResult result) {
+		if (result instanceof CQPCorpus) {
+			CQPCorpus corpus = (CQPCorpus)result;
+			return UDTreeSearch.hasUDProperties(corpus)?"Syntax":null;
+		}
+		return null;
+	}
+	
+	public String getAdditionalDetailsForResult(TXMResult result) {
+		if (result instanceof CQPCorpus) {
+			CQPCorpus corpus = (CQPCorpus)result;
+			if (UDTreeSearch.hasUDProperties(corpus)) {
+				StringBuilder buffer = new StringBuilder();
+				
+				buffer.append("<h3>CoNLLU</h3>\n");
+				
+				String prefix = UDPreferences.getInstance().getProjectPreferenceValue(corpus.getProject(), UDPreferences.UDPREFIX, UDPreferences.getInstance().getString(UDPreferences.UDPREFIX));
+				buffer.append("<p>UD prefix: '"+prefix+"'</p>\n");
+				
+				try {
+					Subcorpus udSentences = getSentenceSubcorpus(corpus, prefix);
+					buffer.append("<p>Sentences: "+udSentences.getNMatch()+"</p>\n");
+				} catch (Exception e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+				
+				return buffer.toString();
+			}
+		}
+		return null;
+	}
+}

Property changes on: TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/search/UDSearchEngine.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/search/UDQuery.java
===================================================================
--- TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/search/UDQuery.java	(revision 0)
+++ TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/search/UDQuery.java	(revision 3710)
@@ -0,0 +1,20 @@
+package org.txm.conllu.core.search;
+
+import org.txm.searchengine.core.SearchEngine;
+import org.txm.searchengine.cqp.corpus.query.CQLQuery;
+
+public class UDQuery extends CQLQuery {
+	
+	public UDQuery() {
+		
+	}
+	
+	public UDQuery(String query) {
+		super(query);
+	}
+	
+	@Override
+	public SearchEngine getSearchEngine() {
+		return UDSearchEngine.getEngine();
+	}
+}

Property changes on: TXM/trunk/bundles/org.txm.conllu.core/src/org/txm/conllu/core/search/UDQuery.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: TXM/trunk/bundles/org.txm.annotation.core/src/org/txm/annotation/core/AnnotationEngine.java
===================================================================
--- TXM/trunk/bundles/org.txm.annotation.core/src/org/txm/annotation/core/AnnotationEngine.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.annotation.core/src/org/txm/annotation/core/AnnotationEngine.java	(revision 3710)
@@ -3,6 +3,7 @@
 import java.io.File;
 import java.io.FileFilter;
 import java.util.HashMap;
+import java.util.List;
 
 import org.txm.core.engines.Engine;
 import org.txm.core.results.TXMResult;
@@ -92,8 +93,8 @@
 		return ret;
 	}
 	
-	public boolean hasAdditionalDetailsForResult(TXMResult result) {
-		return false;
+	public String hasAdditionalDetailsForResult(TXMResult result) {
+		return null;
 	}
 	
 	public String getAdditionalDetailsForResult(TXMResult result) {
Index: TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/preferences/TXMPreferences.java
===================================================================
--- TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/preferences/TXMPreferences.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/preferences/TXMPreferences.java	(revision 3710)
@@ -93,6 +93,7 @@
 	public final static String USER_NAME = "user_name"; //$NON-NLS-1$
 	
 	public final static String LAZY_NAME = "lazy_name"; //$NON-NLS-1$
+	
 	public final static String VISIBLE = "visible"; //$NON-NLS-1$
 	
 	public static final String LOCK = "locked_result"; //$NON-NLS-1$
@@ -261,6 +262,7 @@
 	@Override
 	// FIXME: SJ: define an abstract method as _initializeDefaultPreferences() called here and that must be implemented by subclasses
 	public void initializeDefaultPreferences() {
+		
 		Preferences preferences = this.getDefaultPreferencesNode();
 		preferences.putBoolean(TBXPreferences.VISIBLE, true);
 		preferences.putBoolean(TBXPreferences.LOCK, false);
Index: TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/results/TXMResult.java
===================================================================
--- TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 3710)
@@ -262,7 +262,7 @@
 		this.commandPreferencesNodePath = FrameworkUtil.getBundle(getClass()).getSymbolicName();
 		Log.finest("TXMResult.TXMResult(): command preferences node path: " + this.commandPreferencesNodePath + "."); //$NON-NLS-1$ //$NON-NLS-2$
 
-		this.visible = true;
+		//this.visible = true;
 		this.dirty = true;
 
 		// set result as persistent if AUTO_PERSISTENCE_ENABLED preference is activated
Index: TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/Engine.java
===================================================================
--- TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/Engine.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/Engine.java	(revision 3710)
@@ -1,5 +1,7 @@
 package org.txm.core.engines;
 
+import java.util.List;
+
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.txm.core.results.TXMResult;
 
@@ -61,7 +63,7 @@
 	 */
 	public String getDetails();
 
-	public boolean hasAdditionalDetailsForResult(TXMResult result);
+	public String hasAdditionalDetailsForResult(TXMResult result);
 	
 	public String getAdditionalDetailsForResult(TXMResult result);
 }
Index: TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/ScriptEngine.java
===================================================================
--- TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/ScriptEngine.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/ScriptEngine.java	(revision 3710)
@@ -72,8 +72,8 @@
 		return executeScript(perlScript, null, args);		
 	}
 	
-	public boolean hasAdditionalDetailsForResult(TXMResult result) {
-		return false;
+	public String hasAdditionalDetailsForResult(TXMResult result) {
+		return null;
 	}
 	
 	public String getAdditionalDetailsForResult(TXMResult result) {
Index: TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/ScriptedImportEngine.java
===================================================================
--- TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/ScriptedImportEngine.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/ScriptedImportEngine.java	(revision 3710)
@@ -1,6 +1,7 @@
 package org.txm.core.engines;
 
 import java.io.File;
+import java.util.List;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -57,8 +58,8 @@
 		return _build(project, monitor);
 	}
 	
-	public boolean hasAdditionalDetailsForResult(TXMResult result) {
-		return false;
+	public String hasAdditionalDetailsForResult(TXMResult result) {
+		return null;
 	}
 	
 	public String getAdditionalDetailsForResult(TXMResult result) {
Index: TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/ImportEngine.java
===================================================================
--- TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/ImportEngine.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.core/src/java/org/txm/core/engines/ImportEngine.java	(revision 3710)
@@ -1,5 +1,7 @@
 package org.txm.core.engines;
 
+import java.util.List;
+
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.txm.core.results.TXMResult;
@@ -31,8 +33,8 @@
 		return this.getClass() + " " + this.toString();
 	}
 	
-	public boolean hasAdditionalDetailsForResult(TXMResult result) {
-		return false;
+	public String hasAdditionalDetailsForResult(TXMResult result) {
+		return null;
 	}
 	
 	public String getAdditionalDetailsForResult(TXMResult result) {
Index: TXM/trunk/bundles/org.txm.searchengine.core/src/org/txm/searchengine/core/SearchEngine.java
===================================================================
--- TXM/trunk/bundles/org.txm.searchengine.core/src/org/txm/searchengine/core/SearchEngine.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.searchengine.core/src/org/txm/searchengine/core/SearchEngine.java	(revision 3710)
@@ -67,8 +67,8 @@
 		return false;
 	}
 	
-	public boolean hasAdditionalDetailsForResult(TXMResult result) {
-		return false;
+	public String hasAdditionalDetailsForResult(TXMResult result) {
+		return null;
 	}
 	
 	public String getAdditionalDetailsForResult(TXMResult result) {
Index: TXM/trunk/bundles/org.txm.statsengine.core/src/org/txm/statsengine/core/StatsEngine.java
===================================================================
--- TXM/trunk/bundles/org.txm.statsengine.core/src/org/txm/statsengine/core/StatsEngine.java	(revision 3709)
+++ TXM/trunk/bundles/org.txm.statsengine.core/src/org/txm/statsengine/core/StatsEngine.java	(revision 3710)
@@ -1,5 +1,7 @@
 package org.txm.statsengine.core;
 
+import java.util.List;
+
 import org.txm.core.engines.Engine;
 import org.txm.core.results.TXMResult;
 
@@ -20,8 +22,8 @@
 		return "";
 	}
 	
-	public boolean hasAdditionalDetailsForResult(TXMResult result) {
-		return false;
+	public String hasAdditionalDetailsForResult(TXMResult result) {
+		return null;
 	}
 	
 	public String getAdditionalDetailsForResult(TXMResult result) {
