diff --git a/src/fr/inrialpes/exmo/align/impl/renderer/SILKRendererVisitor.java b/src/fr/inrialpes/exmo/align/impl/renderer/SILKRendererVisitor.java
index 5e76215524893f00cebea2ea87b5b21e220dc0d6..9705f6c4f4c5a0d3a547db7c8c68ccfc931300b0 100644
--- a/src/fr/inrialpes/exmo/align/impl/renderer/SILKRendererVisitor.java
+++ b/src/fr/inrialpes/exmo/align/impl/renderer/SILKRendererVisitor.java
@@ -1,5 +1,24 @@
-package fr.inrialpes.exmo.align.impl.renderer;
+/*
+ * $Id$
+ *
+ * Copyright (C) INRIA, 2012
+ *
+ * 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.io.PrintWriter;
 
@@ -9,15 +28,8 @@ import org.semanticweb.owl.align.AlignmentVisitor;
 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.BasicAlignment;
 import fr.inrialpes.exmo.align.impl.Namespace;
-import fr.inrialpes.exmo.align.parser.SyntaxElement;
-import fr.inrialpes.exmo.align.impl.edoal.EDOALCell;
 import fr.inrialpes.exmo.align.impl.edoal.Expression;
-import fr.inrialpes.exmo.align.impl.edoal.Transformation;
-import fr.inrialpes.exmo.ontowrap.Ontology;
 
 import java.net.URI;
 import java.util.ArrayList;
@@ -25,7 +37,7 @@ import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Properties;
-
+import java.util.Random;
 
 public class SILKRendererVisitor extends GraphPatternRendererVisitor implements AlignmentVisitor{
 
@@ -33,43 +45,42 @@ public class SILKRendererVisitor extends GraphPatternRendererVisitor implements
     Alignment alignment = null;
     Cell cell = null;
     Hashtable<String,String> nslist = null;
-	boolean embedded = false;
+    boolean embedded = false;
 	
-	private static Namespace DEF = Namespace.ALIGNMENT;
+    private static Namespace DEF = Namespace.ALIGNMENT;
 	
-	private List<String> listBGP1;
-	private List<String> listBGP2;
+    private List<String> listBGP1;
+    private List<String> listBGP2;
 	 
     private List<String> listCond1;
     private List<String> listCond2;
     
-	public SILKRendererVisitor(PrintWriter writer) {
-		super(writer);
-	}   
+    public SILKRendererVisitor(PrintWriter writer) {
+	super(writer);
+    }   
 	
-	public SILKRendererVisitor(PrintWriter writer, String sub, String pred, String obj) {
-		super(writer);
-		
-	}
+    public SILKRendererVisitor(PrintWriter writer, String sub, String pred, String obj) {
+	super(writer);
+    }
 
-	public void init(Properties p) {
-		if ( p.getProperty( "embedded" ) != null 
-			     && !p.getProperty( "embedded" ).equals("") ) embedded = true;
-		if ( p.getProperty( "indent" ) != null )
-			INDENT = p.getProperty( "indent" );
-		if ( p.getProperty( "newline" ) != null )
-		    NL = p.getProperty( "newline" );
-	}
+    public void init(Properties p) {
+	if ( p.getProperty( "embedded" ) != null 
+	     && !p.getProperty( "embedded" ).equals("") ) embedded = true;
+	if ( p.getProperty( "indent" ) != null )
+	    INDENT = p.getProperty( "indent" );
+	if ( p.getProperty( "newline" ) != null )
+	    NL = p.getProperty( "newline" );
+    }
 
-	public void visit(Alignment align) throws AlignmentException {
+    public void visit(Alignment align) throws AlignmentException {
 
     	if ( subsumedInvocableMethod( this, align, Alignment.class ) ) return;
     	// default behaviour
     	String extensionString = "";
     	alignment = align;
     	nslist = new Hashtable<String,String>();
-            nslist.put( Namespace.RDF.prefix , Namespace.RDF.shortCut );
-            nslist.put( Namespace.XSD.prefix , Namespace.XSD.shortCut );
+	nslist.put( Namespace.RDF.prefix , Namespace.RDF.shortCut );
+	nslist.put( Namespace.XSD.prefix , Namespace.XSD.shortCut );
     	// Get the keys of the parameter
     	int gen = 0;
     	for ( String[] ext : align.getExtensions() ) {
@@ -92,93 +103,114 @@ public class SILKRendererVisitor extends GraphPatternRendererVisitor implements
     	    writer.print("' standalone='no'?>"+NL);
     	}
     	indentedOutputln("<SILK>");
+	increaseIndent();
     	indentedOutputln("<Prefixes>");
+	increaseIndent();
     	indentedOutputln("<Prefix id=\"rdf\" namespace=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" />");
     	indentedOutputln("<Prefix id=\"rdfs\" namespace=\"http://www.w3.org/2000/01/rdf-schema#\" />");
     	indentedOutputln("<Prefix id=\"owl\" namespace=\"http://www.w3.org/2002/07/owl#\" />");
     	for ( Enumeration e = prefixList.keys() ; e.hasMoreElements(); ) {
 		    String k = (String)e.nextElement();
 		    indentedOutputln("<Prefix id=\""+k+" namespace=\""+prefixList.get(k)+"\" />");
-		}
+	}
+	decreaseIndent();
     	indentedOutputln("</Prefixes>"+NL);
-    	indentedOutputln("<DataSources>"+NL);
-    	
+    	indentedOutputln("<DataSources>");
+	increaseIndent();
+	decreaseIndent();
     	indentedOutputln("</DataSources>"+NL);
     	indentedOutputln("<Interlinks>");
+	increaseIndent();
     	for( Cell c : align ){ c.accept( this ); };
     	decreaseIndent();
     	indentedOutputln("</Interlinks>");
+    	decreaseIndent();
     	writer.print("</SILK>"+NL);
-    
-	}	
+    }	
 	
-	public void visit(Cell cell) throws AlignmentException {
-		
+    public void visit(Cell cell) throws AlignmentException {
     	if ( subsumedInvocableMethod( this, cell, Cell.class ) ) return;
     	// default behaviour
     	this.cell = cell;      	
+
+	// JE: must be improved because this is an URI
+	String id = cell.getId();
+	if ( id == null || id.equals("") ){
+	    Random rand = new Random(System.currentTimeMillis());
+	    id = "RandomId"+Math.abs(rand.nextInt(1000));
+	}
     	
     	URI u1 = cell.getObject1AsURI(alignment);
     	URI u2 = cell.getObject2AsURI(alignment);
     	if ( ( u1 != null && u2 != null)
     	     || alignment.getLevel().startsWith("2EDOAL") ){ //expensive test
     	    
+	    // JE: why this test?
     	    if ( alignment.getLevel().startsWith("2EDOAL") ) {
     	    	
     	    	resetVariables("s", "o");
-	    		((Expression)(cell.getObject1())).accept( this );
+		((Expression)(cell.getObject1())).accept( this );
 	    		
-	    		List<String> tempList = new ArrayList<String>(getBGP());
-	    		listBGP1 = new ArrayList<String>(tempList);
-	    		tempList = new ArrayList<String>(getCondition());
-	    		listCond1 = new ArrayList<String>(tempList);
+		List<String> tempList = new ArrayList<String>(getBGP());
+		listBGP1 = new ArrayList<String>(tempList);
+		tempList = new ArrayList<String>(getCondition());
+		listCond1 = new ArrayList<String>(tempList);
 	    	
-	    		resetVariables("x", "y");	    		
-	    		((Expression)(cell.getObject2())).accept( this );
-	    		tempList = new ArrayList<String>(getBGP());
-	    		listBGP2 = new ArrayList<String>(tempList);
-	    		tempList = new ArrayList<String>(getCondition());
-	    		listCond2 = new ArrayList<String>(tempList);
+		resetVariables("x", "y");	    		
+		((Expression)(cell.getObject2())).accept( this );
+		tempList = new ArrayList<String>(getBGP());
+		listBGP2 = new ArrayList<String>(tempList);
+		tempList = new ArrayList<String>(getCondition());
+		listCond2 = new ArrayList<String>(tempList);
 	    	
-	    		increaseIndent();
-	    		indentedOutputln("<Interlink id=\"link\">");
-	    		indentedOutputln("<LinkType>owl:sameAs</LinkType>");
-	    		indentedOutputln("<SourceDataSet datasource=\"\"" + " var=\"s\">");
-	    		indentedOutputln("<RestrictTo>");
-
-	    		indentedOutput(listBGP1.get(listBGP1.size()-1));
-	    		
-	    		indentedOutputln("</RestrictTo>");
-	    		indentedOutputln("</SourceDataSet>");
-
-	    		indentedOutputln("<TargetDataSet datasource=\"\"" + " var=\"x\">");
-	    		indentedOutputln("<RestrictTo>");
+		// JE: The link id should be either the cell id or a gensym
+		indentedOutputln("<Interlink id=\""+id+"\">");
+		increaseIndent();
+		indentedOutputln("<LinkType>owl:sameAs</LinkType>");
+		indentedOutputln("<SourceDataSet datasource=\"\"" + " var=\"s\">");
+		increaseIndent();
+		indentedOutputln("<RestrictTo>");
+		
+		indentedOutput(listBGP1.get(listBGP1.size()-1));
+	    	
+		indentedOutputln("</RestrictTo>");
+		decreaseIndent();
+		indentedOutputln("</SourceDataSet>");
+		
+		indentedOutputln("<TargetDataSet datasource=\"\"" + " var=\"x\">");
+		increaseIndent();
+		indentedOutputln("<RestrictTo>");
 
-	    		indentedOutput(listBGP2.get(listBGP2.size()-1));
+		indentedOutput(listBGP2.get(listBGP2.size()-1));
 	    		
-	    		indentedOutputln("</RestrictTo>");
-	    		indentedOutputln("</TargetDataSet>"+NL);
-
-	    		indentedOutputln("<LinkageRule>"+NL);
-	    		indentedOutputln("</LinkageRule>"+NL);
-	    		indentedOutputln("<Filter />"+NL);
-	    		indentedOutputln("<Outputs>");	    		
-	    		indentedOutputln("<Output type=\"file\">");
-	    		indentedOutputln("<Param name=\"file\" value=\"link.nt\"/>");
-	    		indentedOutputln(" <Param name=\"format\" value=\"ntriples\"/>");
-	    		indentedOutputln("</Output>");
-	    		indentedOutputln("</Outputs>");
-	    		indentedOutputln("</Interlink>"+NL);
-	    		decreaseIndent();
+		indentedOutputln("</RestrictTo>");
+		decreaseIndent();
+		indentedOutputln("</TargetDataSet>"+NL);
+
+		indentedOutputln("<LinkageRule>");
+		increaseIndent();
+		decreaseIndent();
+		indentedOutputln("</LinkageRule>");
+		indentedOutputln("<Filter />");
+		indentedOutputln("<Outputs>");	    		
+		increaseIndent();
+		indentedOutputln("<Output type=\"file\">");
+		increaseIndent();
+		// JE: The file name should be in function of the link-id
+		indentedOutputln("<Param name=\"file\" value=\""+id+".nt\"/>");
+		indentedOutputln("<Param name=\"format\" value=\"ntriples\"/>");
+		decreaseIndent();
+		indentedOutputln("</Output>");
+		decreaseIndent();
+		indentedOutputln("</Outputs>");
+		decreaseIndent();
+		indentedOutputln("</Interlink>"+NL);
 
     	    }    		    		
-    		decreaseIndent();
-    	    
     	}
-    
-	}
+    }
 
-	public void visit( Relation rel ) throws AlignmentException {
+    public void visit( Relation rel ) throws AlignmentException {
 		if ( subsumedInvocableMethod( this, rel, Relation.class ) ) return;
 		// default behaviour
 		// rel.write( writer );