diff --git a/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java b/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java
index c6558a929c50af9a97647b0ccaabd1d8c93d3c49..34d37b076bc475237d224422ad71e6292eb01993 100644
--- a/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java
+++ b/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java
@@ -132,7 +132,6 @@ public class BasicAlignment implements Alignment, Extensible {
     public void init( Object onto1, Object onto2 ) throws AlignmentException {
 	try {
 	    Class<?>[] cArg = { String.class };
-	    //relationConstructor = (Constructor<Relation>)relationType.getConstructor( cArg );
 	    relationCreationMethod = relationType.getMethod( "createRelation", cArg);
 	} catch ( NoSuchMethodException nsmex ) {
 	    // Should be different if NoSuchMethodException or IllegalAccessException
@@ -243,7 +242,9 @@ public class BasicAlignment implements Alignment, Extensible {
 	try {
 	    Class<?> cl = Class.forName( classname );
 	    if ( Relation.class.isAssignableFrom( cl ) ) {
-		relationType = (Class<? extends Relation>)cl;
+		@SuppressWarnings("unchecked") // Yes, that's ridiculous...
+		    Class<? extends Relation> r = (Class<? extends Relation>)cl;
+		relationType = r;
 	    } else {
 		throw new AlignmentException( "Class "+classname+" does not implement the Relation interface" );
 	    }
@@ -354,14 +355,17 @@ public class BasicAlignment implements Alignment, Extensible {
 	// Any of them... call the local createRelation()...
 	// First try to understand the relation as correct
 	try {
-	    //return relationConstructor.newInstance( rel );
 	    return (Relation)relationCreationMethod.invoke( null, rel );
 	} catch ( Exception ex ) {
 	    try { // Create a relation from classname
-		Class<?> relationClass = Class.forName(rel);
-		Class<?>[] cArg = { String.class };
-		Constructor<Relation> localRelationConstructor = (Constructor<Relation>)relationClass.getConstructor( cArg );
-		return localRelationConstructor.newInstance( "rel" );
+		Class<?> relationClass = (Class<?>)Class.forName(rel);
+		if ( Relation.class.isAssignableFrom( relationClass ) ) {
+		    Class<?>[] cArg = { String.class };
+		    @SuppressWarnings("unchecked") // Yes, that's ridiculous...
+			Constructor<Relation> localRelationConstructor = ((Class<Relation>)relationClass).getConstructor( cArg );
+		    return localRelationConstructor.newInstance( "rel" );
+		} else throw new AlignmentException( "Unknown relation class "+rel );
+		// Exception will be caught just below
 	    } catch ( Exception ex2 ) {
 		logger.debug( "IGNORED Exception: created Basic Relation)", ex );
 		//Otherwise, just create a Basic relation
diff --git a/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java b/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java
index 70270c00b9ee8ec8b73ab64c36fd4a3e7073f062..0384c25bf425ff28ad48268a22ca9afe28158173 100644
--- a/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java
+++ b/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java
@@ -85,7 +85,7 @@ public abstract class BitSetDisjunctiveRelation<T extends BaseRelation> extends
     }
 
     /** intersection */
-    protected BitSet protojoin( BitSetDisjunctiveRelation<T>... drs ) {
+    @SafeVarargs protected final BitSet protojoin( BitSetDisjunctiveRelation<T>... drs ) {
 	BitSet bs = (BitSet)relset.clone();
 	for( BitSetDisjunctiveRelation<T> dr : drs ) {
 	    bs.and( dr.getRelations() );
@@ -93,12 +93,12 @@ public abstract class BitSetDisjunctiveRelation<T extends BaseRelation> extends
 	return bs;
     }
 
-    public DisjunctiveRelation<T> join( DisjunctiveRelation<T>... drs ) throws AlignmentException {
+    @SuppressWarnings({"unchecked", "varargs"}) public DisjunctiveRelation<T> join( DisjunctiveRelation<T>... drs ) throws AlignmentException {
 	throw new AlignmentException( "Cannot join relations from heterogeneous algebras" );
     }
 
     /** union */
-    protected BitSet protomeet( BitSetDisjunctiveRelation<T>... drs ) {
+    @SafeVarargs protected final BitSet protomeet( BitSetDisjunctiveRelation<T>... drs ) {
 	BitSet bs = (BitSet)relset.clone();
 	for( BitSetDisjunctiveRelation<T> dr : drs ) {
 	    bs.or( dr.getRelations() );
@@ -106,7 +106,7 @@ public abstract class BitSetDisjunctiveRelation<T extends BaseRelation> extends
 	return bs;
     }
 
-    public DisjunctiveRelation<T> meet( DisjunctiveRelation<T>... drs ) throws AlignmentException {
+    @SuppressWarnings({"unchecked", "varargs"}) public DisjunctiveRelation<T> meet( DisjunctiveRelation<T>... drs ) throws AlignmentException {
 	throw new AlignmentException( "Cannot meet relations from heterogeneous algebras" );
     }
 
@@ -181,9 +181,11 @@ public abstract class BitSetDisjunctiveRelation<T extends BaseRelation> extends
 	    return ( ( relset.nextSetBit( index ) != -1 ) );
 	}        
         
-	public T next() {
+	// The class is private and always called with the proper T
+	// Would be nice to tell, its the same T
+	@SuppressWarnings({"unchecked"}) public T next() {
 	    index = relset.nextSetBit( index );
-	    if ( index != -1 ) return (T)getRelation( index++ );
+	    if ( index != -1 ) return (T)getRelation( index++ ); //[W: unchecked]
 	    else throw new IllegalStateException();
 	}
     }
diff --git a/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java b/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java
index f369293eefd546ef08712981b87c9d2ca6bc214c..45c423fd5bdf9e76459a18a2bbd48eb404a52306 100644
--- a/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java
+++ b/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java
@@ -39,9 +39,9 @@ public interface DisjunctiveRelation<T extends BaseRelation> extends Relation, I
 
     public T getRelation( String rel );
 
-    public DisjunctiveRelation<T> join( DisjunctiveRelation<T>... drs ) throws AlignmentException;
+    @SuppressWarnings({"unchecked", "varargs"}) public DisjunctiveRelation<T> join( DisjunctiveRelation<T>... drs ) throws AlignmentException;
 
-    public DisjunctiveRelation<T> meet( DisjunctiveRelation<T>... drs ) throws AlignmentException;
+    @SuppressWarnings({"unchecked", "varargs"}) public DisjunctiveRelation<T> meet( DisjunctiveRelation<T>... drs ) throws AlignmentException;
 
     public boolean isEmpty();
 
diff --git a/src/fr/inrialpes/exmo/align/impl/edoal/Comparator.java b/src/fr/inrialpes/exmo/align/impl/edoal/Comparator.java
index 597ffd42e13327bc63671370b54a9d36fcf29f85..c2574f3d05f7c1b7e59cbd79dca020e0aec753b5 100644
--- a/src/fr/inrialpes/exmo/align/impl/edoal/Comparator.java
+++ b/src/fr/inrialpes/exmo/align/impl/edoal/Comparator.java
@@ -81,4 +81,8 @@ public class Comparator {
 	else return uri.equals( ((Comparator)ob).getURI() );
     }
 
+    public int hashCode() {
+	return 17+7*uri.hashCode();
+    }
+
 }
diff --git a/src/fr/inrialpes/exmo/align/impl/eval/GraphEvaluator.java b/src/fr/inrialpes/exmo/align/impl/eval/GraphEvaluator.java
index 4538083ab2296d9b1138ee0248962e6c8a05c3a7..d257af41d0608ee6dc703d33286b004ea8b3b73f 100644
--- a/src/fr/inrialpes/exmo/align/impl/eval/GraphEvaluator.java
+++ b/src/fr/inrialpes/exmo/align/impl/eval/GraphEvaluator.java
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) INRIA, 2004-2005, 2007-2010, 2013-2014
+ * Copyright (C) INRIA, 2004-2005, 2007-2010, 2013-2015
  *
  * 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
@@ -214,17 +214,17 @@ public abstract class GraphEvaluator {
     public abstract String xlabel();
     public abstract String ylabel();
 
-}
-
-class EvalCell {
-    Cell cell = null;
-    boolean correct = false;
 
-    public EvalCell( Cell c, boolean b ){
-	cell = c;
-	correct = b;
+    class EvalCell {
+	Cell cell = null;
+	boolean correct = false;
+	
+	public EvalCell( Cell c, boolean b ){
+	    cell = c;
+	    correct = b;
+	}
+	
+	public boolean correct() { return correct; }
+	public Cell cell() { return cell; }
     }
-
-    public boolean correct() { return correct; }
-    public Cell cell() { return cell; }
 }
diff --git a/src/fr/inrialpes/exmo/align/impl/rel/A5AlgebraRelation.java b/src/fr/inrialpes/exmo/align/impl/rel/A5AlgebraRelation.java
index 7d6ce848f8e85a7da3cda6e58f012872600ecdb8..2a103f890f757cda45485265e5e01708281cee7c 100644
--- a/src/fr/inrialpes/exmo/align/impl/rel/A5AlgebraRelation.java
+++ b/src/fr/inrialpes/exmo/align/impl/rel/A5AlgebraRelation.java
@@ -225,11 +225,11 @@ public class A5AlgebraRelation extends BitSetAlgebraRelation<A5BaseRelation> {
 	return new A5AlgebraRelation( protoinverse() );
     }
 
-    public A5AlgebraRelation join( A5AlgebraRelation... drs ) {
+    public final A5AlgebraRelation join( A5AlgebraRelation... drs ) {
 	return new A5AlgebraRelation( protojoin( drs ) );
     }
 
-    public A5AlgebraRelation meet( A5AlgebraRelation... drs ) {
+    public final A5AlgebraRelation meet( A5AlgebraRelation... drs ) {
 	return new A5AlgebraRelation( protomeet( drs ) );
     }