diff --git a/src/fr/inrialpes/exmo/align/impl/MatrixMeasure.java b/src/fr/inrialpes/exmo/align/impl/MatrixMeasure.java
index 38b25ccc13cecd7032c7b2b4abad2909ec3ab4fa..deeab5ec485200d135113ddb73dc97e85fce12d8 100644
--- a/src/fr/inrialpes/exmo/align/impl/MatrixMeasure.java
+++ b/src/fr/inrialpes/exmo/align/impl/MatrixMeasure.java
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) INRIA, 2003-2008
+ * Copyright (C) INRIA, 2003-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
@@ -22,6 +22,7 @@ package fr.inrialpes.exmo.align.impl;
 
 import java.util.Iterator;
 import java.util.HashMap;
+import java.util.Set;
 import java.text.NumberFormat;
 
 import org.semanticweb.owl.align.Alignment;
@@ -129,20 +130,16 @@ public abstract class MatrixMeasure implements Similarity {
     public void compute( Parameters params ){
 	try {
 	    // Compute distances on classes
-	    for ( Iterator it2 = onto2.getClasses().iterator(); it2.hasNext(); ){
-		Object cl2 = (Object)it2.next();
-		for ( Iterator it1 = onto1.getClasses().iterator(); it1.hasNext(); ){
-		    Object cl1 = (Object)it1.next();
+	    for ( Object cl2: onto2.getClasses() ){
+		for ( Object cl1: onto1.getClasses() ){
 		    clmatrix[classlist1.get(cl1).intValue()][classlist2.get(cl2).intValue()] = classMeasure( cl1, cl2 );
 		}
 	    }
 	    // Compute distances on individuals
 	    // (this comes first because otherwise, it2 is defined)
-	    for ( Iterator it2 = onto2.getIndividuals().iterator(); it2.hasNext(); ){
-		Object ind2 = (Object)it2.next();
+	    for ( Object ind2: onto2.getIndividuals() ){
 		if ( indlist2.get(ind2) != null ) {
-		    for ( Iterator it1 = onto1.getIndividuals().iterator(); it1.hasNext(); ){
-			Object ind1 = (Object)it1.next();
+		    for ( Object ind1: onto1.getIndividuals() ){
 			if ( indlist1.get(ind1) != null ) {
 			    indmatrix[indlist1.get(ind1).intValue()][indlist2.get(ind2).intValue()] = individualMeasure( ind1, ind2 );
 			}
@@ -153,13 +150,11 @@ public abstract class MatrixMeasure implements Similarity {
 	    ConcatenatedIterator it2 = new
 		ConcatenatedIterator(onto2.getObjectProperties().iterator(),
 				     onto2.getDataProperties().iterator());
-	    for ( ; it2.hasNext(); ){
-		Object pr2 = (Object)it2.next();
+	    for ( Object pr2: it2 ){
 		ConcatenatedIterator it1 = new
 		    ConcatenatedIterator(onto1.getObjectProperties().iterator(),
 					 onto1.getDataProperties().iterator());
-		for ( ; it1.hasNext(); ){
-		    Object pr1 = (Object)it1.next();
+		for ( Object pr1: it1 ){
 		    prmatrix[proplist1.get(pr1).intValue()][proplist2.get(pr2).intValue()] = propertyMeasure( pr1, pr2 );
 		}
 	    }
@@ -178,26 +173,24 @@ public abstract class MatrixMeasure implements Similarity {
     }
 
     // Not an efficient access...
-    public void printClassSimilarityMatrix( String type ){
+    private void printMatrix( int nb1, HashMap<Object,Integer> ent1, HashMap<Object,Integer> ent2, double matrix[][] ) {
 	// Number format class to format the values
 	numFormat = NumberFormat.getInstance();
 	numFormat.setMinimumFractionDigits( 2 );
 	numFormat.setMaximumFractionDigits( 2 );
 	System.out.print("\\begin{tabular}{r|");
-	for ( int i = 0; i < nbclass1 ; i++ ) System.out.print("c");
+	for ( int i = 0; i < nb1 ; i++ ) System.out.print("c");
 	System.out.println("}");
 	try {
-	    for ( Iterator it1 = onto1.getClasses().iterator(); it1.hasNext(); ){
-		Object cl1 = (Object)it1.next();
-		System.out.print(" & \\rotatebox{90}{"+onto1.getEntityName( cl1 )+"}");
+	    Set<Object> key1 = ent1.keySet();
+	    for( Object ob1 : key1 ){
+		System.out.print(" & \\rotatebox{90}{"+onto1.getEntityName( ob1 )+"}");
 	    }
 	    System.out.println(" \\\\ \\hline");
-	    for ( Iterator it2 = onto2.getClasses().iterator(); it2.hasNext(); ){
-		Object cl2 = (Object)it2.next();
-		System.out.print( onto2.getEntityName( cl2 ) );
-		for ( Iterator it1 = onto1.getClasses().iterator(); it1.hasNext(); ){
-		    Object cl1 = (Object)it1.next();
-		    System.out.print(" & "+numFormat.format(clmatrix[classlist1.get(cl1).intValue()][classlist2.get(cl2).intValue()]));
+	    for ( Object ob2 : ent2.keySet() ){
+		System.out.print( onto2.getEntityName( ob2 ) );
+		for ( Object ob1 : key1 ){
+		    System.out.print(" & "+numFormat.format(matrix[ent1.get(ob1).intValue()][ent2.get(ob2).intValue()]));
 		}
 		System.out.println("\\\\");
 	    }
@@ -205,8 +198,14 @@ public abstract class MatrixMeasure implements Similarity {
 	System.out.println("\n\\end{tabular}");
     }
 
-    // Considered not useful so far
-    public void printPropertySimilarityMatrix( String type ){};
-    public void printIndividualSimilarityMatrix( String type ){};
+    public void printClassSimilarityMatrix( String type ){
+	printMatrix( nbclass1, classlist1, classlist2, clmatrix ); 
+    }
+    public void printPropertySimilarityMatrix( String type ){
+	printMatrix( nbprop1, proplist1, proplist2, prmatrix ); 
+    };
+    public void printIndividualSimilarityMatrix( String type ){
+	printMatrix( nbind1, indlist1, indlist2, indmatrix ); 
+    };
 
 }