diff --git a/src/fr/inrialpes/exmo/align/impl/renderer/HTMLMetadataRendererVisitor.java b/src/fr/inrialpes/exmo/align/impl/renderer/HTMLMetadataRendererVisitor.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6f5406635b587af11733e1720dfcdb074083577
--- /dev/null
+++ b/src/fr/inrialpes/exmo/align/impl/renderer/HTMLMetadataRendererVisitor.java
@@ -0,0 +1,142 @@
+/*
+ * $Id: HTMLRendererVisitor.java 918 2009-02-08 14:30:30Z euzenat $
+ *
+ * Copyright (C) INRIA, 2006-2009
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ */
+
+package fr.inrialpes.exmo.align.impl.renderer; 
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.io.PrintWriter;
+import java.net.URI;
+
+import org.semanticweb.owl.align.Alignment;
+import org.semanticweb.owl.align.AlignmentVisitor;
+import org.semanticweb.owl.align.AlignmentException;
+import org.semanticweb.owl.align.Parameters;
+import org.semanticweb.owl.align.Cell;
+import org.semanticweb.owl.align.Relation;
+
+import fr.inrialpes.exmo.align.impl.Annotations;
+import fr.inrialpes.exmo.align.impl.BasicParameters;
+import fr.inrialpes.exmo.align.impl.BasicAlignment;
+import fr.inrialpes.exmo.align.impl.ObjectCell;
+import fr.inrialpes.exmo.align.onto.LoadedOntology;
+
+/**
+ * Renders an alignment in HTML
+ *
+ * TODO:
+ * - add CSS categories
+ * - add resource chooser
+ *
+ * @author Jérôme Euzenat
+ * @version $Id: HTMLRendererVisitor.java 918 2009-02-08 14:30:30Z euzenat $ 
+ */
+
+public class HTMLMetadataRendererVisitor implements AlignmentVisitor
+{
+    
+    PrintWriter writer = null;
+    Alignment alignment = null;
+    Cell cell = null;
+    Hashtable<String,String> nslist = null;
+    boolean embedded = false; // if the output is XML embeded in a structure
+
+    public HTMLMetadataRendererVisitor( PrintWriter writer ){
+	this.writer = writer;
+    }
+
+    public void init( Parameters p ) {
+	if ( p.getParameter( "embedded" ) != null 
+	     && !p.getParameter( "embedded" ).equals("") ) embedded = true;
+    };
+
+    public void visit( Alignment align ) throws AlignmentException {
+	alignment = align;
+	nslist = new Hashtable<String,String>();
+	nslist.put(Annotations.ALIGNNS,"align");
+	nslist.put("http://www.w3.org/1999/02/22-rdf-syntax-ns#","rdf");
+	nslist.put("http://www.w3.org/2001/XMLSchema#","xsd");
+	//nslist.put("http://www.omwg.org/TR/d7/ontology/alignment","omwg");
+	// Get the keys of the parameter
+	int gen = 0;
+	for ( Object ext : ((BasicParameters)align.getExtensions()).getValues() ){
+	    String prefix = ((String[])ext)[0];
+	    String name = ((String[])ext)[1];
+	    String tag = (String)nslist.get(prefix);
+	    if ( tag == null ) {
+		tag = "ns"+gen++;
+		nslist.put( prefix, tag );
+	    }
+	    if ( tag.equals("align") ) { tag = name; }
+	    else { tag += ":"+name; }
+	    //extensionString += "  <"+tag+">"+((String[])ext)[2]+"</"+tag+">\n";
+	}
+	if ( embedded == false ) {
+	    writer.print("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n");
+	    writer.print("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML+RDFa 1.0//EN\" \"http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd\">\n");
+	}
+	writer.print("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\"");
+	for ( Enumeration e = nslist.keys() ; e.hasMoreElements(); ) {
+	    String k = (String)e.nextElement();
+	    writer.print("\n       xmlns:"+nslist.get(k)+"='"+k+"'");
+	}
+	//writer.print(">\n<head><title>Alignment</title></head>\n<body>\n");
+	writer.print("<h1>Alignment metadata</h1>\n");
+	writer.print("<h1></h1>\n");
+	writer.print("<div typeof=\"align:Alignment\">\n");
+	writer.print("<table border=\"0\">\n");
+	writer.print("<tr><td>onto1</td><td><div rel=\"align:onto1\"><div typeof=\"align:Ontology\" about=\""+align.getOntology1URI()+"\">");
+	writer.print("<table>\n<tr><td>uri: </td><td>"+align.getOntology1URI()+"</td></tr>\n");
+	if ( align.getFile1() != null )
+	    writer.print("<tr><td><span property=\"align:location\" content=\""+align.getFile1()+"\"/>file:</td><td><a href=\""+align.getFile1()+"\">"+align.getFile1()+"</a></td></tr>\n" );
+	if ( align instanceof BasicAlignment && ((BasicAlignment)align).getOntologyObject1().getFormalism() != null ) {
+	    writer.print("<tr><td>type:</td><td><span rel=\"align:formalism\"><span typeof=\"align:Formalism\"><span property=\"align:name\">"+((BasicAlignment)align).getOntologyObject1().getFormalism()+"</span><span property=\"align:uri\" content=\""+((BasicAlignment)align).getOntologyObject1().getFormURI()+"\"/></span></span></td></tr>");
+	}
+	writer.print("</table>\n</div></div></td></tr>\n");
+	writer.print("<tr><td>onto2</td><td><div rel=\"align:onto2\"><div typeof=\"align:Ontology\" about=\""+align.getOntology2URI()+"\">");
+	writer.print("<table>\n<tr><td>uri: </td><td>"+align.getOntology2URI()+"</td></tr>\n");
+	if ( align.getFile2() != null )
+	    writer.print("<tr><td><span property=\"align:location\" content=\""+align.getFile2()+"\"/>file:</td><td><a href=\""+align.getFile2()+"\">"+align.getFile2()+"</a></td></tr>\n" );
+	if ( align instanceof BasicAlignment && ((BasicAlignment)align).getOntologyObject2().getFormalism() != null ) {
+	    writer.print("<tr><td>type:</td><td><span rel=\"align:formalism\"><span typeof=\"align:Formalism\"><span property=\"align:name\">"+((BasicAlignment)align).getOntologyObject2().getFormalism()+"</span><span property=\"align:uri\" content=\""+((BasicAlignment)align).getOntologyObject2().getFormURI()+"\"/></span></span></td></tr>");
+	}
+	writer.print("</table>\n</div></div></td></tr>\n");
+	writer.print("<tr><td>level</td><td property=\"align:level\">"+align.getLevel()+"</td></tr>\n" );
+	writer.print("<tr><td>type</td><td property=\"align:type\">"+align.getType()+"</td></tr>\n" );
+	// RDFa: Get the keys of the parameter (to test)
+	for ( Object ext : ((BasicParameters)align.getExtensions()).getValues() ){
+	    writer.print("<tr><td>"+((String[])ext)[0]+" : "+((String[])ext)[1]+"</td><td property=\""+nslist.get(((String[])ext)[0])+":"+((String[])ext)[1]+"\">"+((String[])ext)[2]+"</td></tr>\n");
+	}
+	writer.print("</table>\n");
+	writer.print("</div>\n");
+	//writer.print("<h2>Correspondences</h2>\n");
+	//writer.print("<div rel=\"align:map\"><table><tr><td>object1</td><td>relation</td><td>strength</td><td>object2</td><td>Id</td></tr>\n");
+	//for( Enumeration e = align.getElements() ; e.hasMoreElements(); ){
+	//    Cell c = (Cell)e.nextElement();
+	//    c.accept( this );
+	//} //end for
+	//writer.print("</table>\n");
+	//writer.print("</div></div>\n");
+	writer.print("</body>\n</html>\n");
+    }
+
+    public void visit( Cell cell ) {}
+    public void visit( Relation rel ) {}
+}