diff --git a/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java b/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java
index 78efbf3624e515befb4a04ffe6927c5fce594a6b..edad15c8657133cdeb72122215f2de484818bbca 100644
--- a/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java
+++ b/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java
@@ -775,21 +775,25 @@ public class BasicAlignment implements Alignment, Extensible {
      * ( o', o, n, inverse(r)) iff compose(r) exists.
      */
 
-    public Alignment inverse() throws AlignmentException {
+    public BasicAlignment inverse() throws AlignmentException {
 	BasicAlignment result = createNewAlignment( onto2, onto1 );
+	invertContent( result, "inverted", "http://exmo.inrialpes.fr/align/impl/BasicAlignment#inverse" );
+	return result;
+    }
+
+    public void invertContent( BasicAlignment result, String label, String method ) throws AlignmentException {
 	result.setFile1( getFile2() );
 	result.setFile2( getFile1() );
 	result.setType( invertType() );
 	result.setLevel( getLevel() );
-	result.setExtensions( extensions.convertExtension( "inverted", "http://exmo.inrialpes.fr/align/impl/BasicAlignment#inverse" ) );
+	result.setExtensions( extensions.convertExtension( label, method ) );
 	for ( Entry<Object,Object> e : namespaces.entrySet() ) {
 	    result.setXNamespace( (String)e.getKey(), (String)e.getValue() );
 	}
 	for ( Cell c : this ) {
 	    result.addCell( c.inverse() );
 	}
-	return (Alignment)result;
-    };
+    }
 
     /** Housekeeping **/
     public void dump(ContentHandler h) {
diff --git a/src/fr/inrialpes/exmo/align/impl/ObjectAlignment.java b/src/fr/inrialpes/exmo/align/impl/ObjectAlignment.java
index 810518f1cd8308ff20ab2ea920dfd724617c01dd..c0d79ebfcffca99930dd400c61fba5097832131a 100644
--- a/src/fr/inrialpes/exmo/align/impl/ObjectAlignment.java
+++ b/src/fr/inrialpes/exmo/align/impl/ObjectAlignment.java
@@ -122,6 +122,12 @@ public class ObjectAlignment extends BasicAlignment {
 	return align;
     }
 
+    public ObjectAlignment inverse() throws AlignmentException {
+	ObjectAlignment result = createNewAlignment( onto2, onto1 );
+	invertContent( result, "inverted", "http://exmo.inrialpes.fr/align/impl/ObjectAlignment#inverse" );
+	return result;
+    }
+
     /**
      * This is a clone with the URI instead of Object objects
      */
diff --git a/src/fr/inrialpes/exmo/align/impl/URIAlignment.java b/src/fr/inrialpes/exmo/align/impl/URIAlignment.java
index aa37f263df97a0d68353044c6f532609afb7eeaa..713381bdffafc8629616462ee4531785ac9913a8 100644
--- a/src/fr/inrialpes/exmo/align/impl/URIAlignment.java
+++ b/src/fr/inrialpes/exmo/align/impl/URIAlignment.java
@@ -163,5 +163,12 @@ public class URIAlignment extends BasicAlignment {
 	return align;
     }
 
+    public URIAlignment inverse() throws AlignmentException {
+	URIAlignment result = createNewAlignment( onto2, onto1 );
+	invertContent( result, "inverted", "http://exmo.inrialpes.fr/align/impl/URIAlignment#inverse" );
+	return result;
+    }
+
+
 }
 
diff --git a/src/fr/inrialpes/exmo/align/impl/edoal/EDOALAlignment.java b/src/fr/inrialpes/exmo/align/impl/edoal/EDOALAlignment.java
index 2c0630e280267cce36961f26a2b7730055cc5886..2f6d1d9dfd2bfbc08a0b77fc120f6d62c968b522 100644
--- a/src/fr/inrialpes/exmo/align/impl/edoal/EDOALAlignment.java
+++ b/src/fr/inrialpes/exmo/align/impl/edoal/EDOALAlignment.java
@@ -345,7 +345,7 @@ public class EDOALAlignment extends BasicAlignment {
     // It has two difficulties
     // - it should call the current init() and not that of BasicAlignement
     // - it should catch the AlignmentException that it is supposed to raise
-    public Object clone() {
+    public EDOALAlignment clone() {
 	EDOALAlignment align = new EDOALAlignment();
 	try {
 	    align.init( (Ontology)getOntology1(), (Ontology)getOntology2() );
@@ -363,4 +363,16 @@ public class EDOALAlignment extends BasicAlignment {
 	return align;
     }
 
+    public EDOALAlignment createNewAlignment( Object onto1, Object onto2 ) throws AlignmentException {
+	EDOALAlignment align = new EDOALAlignment();
+	align.init( onto1, onto2 );
+	return align;
+    }
+
+    public EDOALAlignment inverse() throws AlignmentException {
+	EDOALAlignment result = createNewAlignment( onto2, onto1 );
+	invertContent( result, "inverted", "http://exmo.inrialpes.fr/align/impl/edoal/EDOALAlignment#inverse" );
+	return result;
+    }
+
  }