diff --git a/src/fr/inrialpes/exmo/align/util/GenPlot.java b/src/fr/inrialpes/exmo/align/util/GenPlot.java
index 3d91f94a519e0a3a1c86e5196ef734d11ee1e018..4e71571adbb64ec3aaa92e306f761fff676255e7 100644
--- a/src/fr/inrialpes/exmo/align/util/GenPlot.java
+++ b/src/fr/inrialpes/exmo/align/util/GenPlot.java
@@ -46,6 +46,10 @@ import fr.inrialpes.exmo.align.impl.eval.PRGraphEvaluator;
 import java.io.File;
 import java.io.PrintStream;
 import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.BufferedWriter;
+import java.io.OutputStreamWriter;
 import java.net.URI;
 import java.lang.Double;
 import java.lang.Integer;
@@ -87,13 +91,12 @@ import fr.inrialpes.exmo.align.parser.AlignmentParser;
  *
  * If output is
  * requested (<CODE>-o</CODE> flags), then output will be written to
- *  <CODE>output</CODE> if present, stdout by default.
+ *  <CODE>output</CODE> if present, stdout by default. In case of the Latex output, there are numerous files generated (regardless the <CODE>-o</CODE> flag).
  *
  * <pre>
  * $Id$
  * </pre>
  *
- * @author Sean K. Bechhofer
  * @author Jérôme Euzenat
  */
 
@@ -103,10 +106,11 @@ public class GenPlot {
     static Parameters params = null;
     static Vector listAlgo;
     static String fileNames = "";
-    static String outFile = null; // This is unused for the moment
-    static String type = "html";
+    static String outFile = null;
+    static String type = "tsv";
     static int debug = 0;
     static Hashtable loaded = null;
+    static PrintWriter output = null;
 
     public static void main(String[] args) {
 	try { run( args ); }
@@ -137,7 +141,7 @@ public class GenPlot {
 		outFile = g.getOptarg();
 		break;
 	    case 't' :
-		/* Type of output (tex/html/xml/ascii) */
+		/* Type of output (tex/tsv(/html/xml/ascii)) */
 		type = g.getOptarg();
 		break;
 	    case 'l' :
@@ -165,7 +169,23 @@ public class GenPlot {
 
 	params.setParameter("step", new Integer(STEP));
 
-	print( iterateDirectories() );
+	// Set output file
+	OutputStream stream;
+	if (outFile == null) {
+	    stream = System.out;
+	} else {
+	    stream = new FileOutputStream(outFile);
+	}
+	output = new PrintWriter (
+		   new BufferedWriter(
+		     new OutputStreamWriter( stream, "UTF-8" )), true);
+
+	// type
+	if ( type.equals("tsv") ){
+	    printTSV( iterateDirectories() );
+	} else if ( type.equals("tex") ) {
+	    printPGFTex( iterateDirectories() );
+	} else System.err.println("Flag -t "+type+" : not implemented yet");
     }
 
     /**
@@ -270,28 +290,87 @@ public class GenPlot {
 
     /**
      * This does average plus plot
+     *
      */
-    public static void print( double[][] result ) {
+    public static void printPGFTex( double[][] result ){
+	int i = 0;
+	output.println("\\documentclass[11pt]{book}");
+	output.println();
+	output.println("\\usepackage{pgf}");
+	output.println("\\usepackage{tikz}");
+	output.println();
+	output.println("\\begin{document}");
+	output.println("\\date{today}");
+	output.println("\n%% Plot generated by GenPlot of alignapi");
+	output.println("\\begin{tikzpicture}[cap=round]");
+	output.println("% Draw grid");
+	output.println("\\draw[step="+(STEP/10)+"cm,very thin,color=gray] (-0.2,-0.2) grid ("+STEP+","+STEP+");");
+	output.println("\\draw[->] (-0.2,0) -- (10.2,0) node[below] {$precision$}; ");
+	output.println("\\draw[->] (0,-0.2) -- (0,10.2) node[above] {$recall$}; ");
+	output.println("% Plots");
+	// Should be improved by changing the symbol
+	for ( Enumeration e = listAlgo.elements() ; e.hasMoreElements() ; i++) {
+	    output.println("\\draw plot[mark=+,smooth] file {"+(String)e.nextElement()+".table};");
+	}
+	// And a legend
+	output.println("% Legend");
+	output.println("\\end{tikzpicture}");
+	output.println();
+	output.println("\\end{document}");
+
+	i = 0;
+	for ( Enumeration e = listAlgo.elements() ; e.hasMoreElements() ; i++) {
+	    String algo = (String)e.nextElement();
+	    // Open one file
+	    PrintWriter writer;
+	    try {
+		writer = new PrintWriter (
+				    new BufferedWriter(
+                                       new OutputStreamWriter(
+                                            new FileOutputStream(algo+".table"), "UTF-8" )), true);
+		// Print header
+		writer.println("#Curve 0, "+(STEP+1)+" points");
+		writer.println("#x y type");
+		writer.println("%% Plot generated by GenPlot of alignapi");
+		writer.println("%% Include in PGF tex by:\n");
+		writer.println("%% \\begin{tikzpicture}[cap=round]");
+		writer.println("%% \\draw[step="+(STEP/10)+"cm,very thin,color=gray] (-0.2,-0.2) grid ("+STEP+","+STEP+");");
+		writer.println("%% \\draw[->] (-0.2,0) -- (10.2,0) node[right] {$precision$}; ");
+		writer.println("%% \\draw[->] (0,-0.2) -- (0,10.2) node[above] {$recall$}; ");
+		writer.println("%% \\draw plot[mark=+,smooth] file {"+algo+".table};");
+		writer.println("%% \\end{tikzpicture}");
+		writer.println();
+		for( int j = 0; j <= STEP; j++ ){
+		    writer.print((double)j*10/STEP);
+		    writer.println(" "+result[i][j]*10);
+		}
+		writer.close();
+	    } catch (Exception ex) { ex.printStackTrace(); }
+	    // UnsupportedEncodingException + FileNotFoundException
+	}
+    }
+
+    public static void printTSV( double[][] result ) {
 	// Print first line
 	for ( Enumeration e = listAlgo.elements() ; e.hasMoreElements() ; ) {
-	    System.out.print("\t"+(String)e.nextElement() );
+	    output.print("\t"+(String)e.nextElement() );
 	}
-	System.out.println();
+	output.println();
 
 	// Print others
 	for( int j = 0; j <= STEP; j++ ){
-	    System.out.print((double)j/STEP);
+	    output.print((double)j/STEP);
 	    for( int i = 0; i < listAlgo.size(); i++ ){
-		System.out.print("\t"+result[i][j]);
+		output.print("\t"+result[i][j]);
 	    }
-	    System.out.println();
+	    output.println();
 	}
     }
 
     public static void usage() {
 	System.out.println("usage: GenPlot [options]");
 	System.out.println("options are:");
-	System.out.println("\t--type=html|xml|tex|ascii -t html|xml|tex|ascii\tSpecifies the output format");
+	System.out.println("\t--type=tsv|tex|(html|xml) -t tsv|tex|(html|xml)\tSpecifies the output format");
 	System.out.println("\t--list=algo1,...,algon -l algo1,...,algon\tSequence of the filenames to consider");
 	System.out.println("\t--debug[=n] -d [n]\t\tReport debug info at level n");
 	System.out.println("\t--help -h\t\t\tPrint this message");