diff --git a/Makefile b/Makefile
index 455c19ff80d5c98154823d967c28537bc99e5cbf..4abedcc0262738db92a5f1d83f792a03b67ae5e0 100755
--- a/Makefile
+++ b/Makefile
@@ -98,7 +98,7 @@ documentation:
 	$(JAVADOC) $(CLASSPATH) $(TTOOL_SRC) -d $(TTOOL_DOC_HTML) $(TTOOL_SRC)/*.java $(TTOOL_SRC)/*/*.java $(TTOOL_SRC)/*/*/*.java $(TTOOL_SRC)/fr/inria/oasis/vercors/cttool/model/*.java
 
 release: jttooljar launcher tiftranslator tmltranslator remotesimulator ttooljar_std stdrelease 
-	echo release done
+	@echo release done
 
 ########## RELEASE
 stdrelease:
@@ -117,19 +117,21 @@ stdrelease:
 	cd $(TTOOL_MODELING); cp $(RELEASE_STD_FILES_LIB) $(TTOOL_TARGET)/lib
 	cp $(TTOOL_DOC)/README_lib $(TTOOL_TARGET)/lib
 # simulators
-	mkdir -p $(TTOOL_TARGET)/simulators/version1/src_simulator
-	mkdir -p $(TTOOL_TARGET)/simulators/version1/lib
-	cp  $(TTOOL_SIMULATORS)/systemc1/Makefile $(TTOOL_TARGET)/simulators/version1
-	cp  $(TTOOL_SIMULATORS)/systemc1/Makefile.defs $(TTOOL_TARGET)/simulators/version1
-	cp  $(TTOOL_SIMULATORS)/systemc1/src_simulator/*.cpp $(TTOOL_TARGET)/simulators/version1/src_simulator
-	cp  $(TTOOL_SIMULATORS)/systemc1/src_simulator/*.h $(TTOOL_TARGET)/simulators/version1/src_simulator
-	mkdir -p $(TTOOL_TARGET)/simulators/version2/src_simulator
-	mkdir -p $(TTOOL_TARGET)/simulators/version2/lib
-	cp  $(TTOOL_SIMULATORS)/c++2/Makefile $(TTOOL_TARGET)/simulators/version2
-	cp  $(TTOOL_SIMULATORS)/c++2/Makefile.defs $(TTOOL_TARGET)/simulators/version2
-	cp  $(TTOOL_SIMULATORS)/c++2/schedstyle.css $(TTOOL_TARGET)/simulators/version2
-	cp  $(TTOOL_SIMULATORS)/c++2/src_simulator/*.cpp $(TTOOL_TARGET)/simulators/version2/src_simulator
-	cp  $(TTOOL_SIMULATORS)/c++2/src_simulator/*.h $(TTOOL_TARGET)/simulators/version2/src_simulator
+	mkdir -p $(TTOOL_TARGET)/simulators/systemc1/src_simulator
+	mkdir -p $(TTOOL_TARGET)/simulators/systemc1/lib
+	cp  $(TTOOL_SIMULATORS)/systemc1/lib/README $(TTOOL_TARGET)/simulators/systemc1/lib/
+	cp  $(TTOOL_SIMULATORS)/systemc1/Makefile $(TTOOL_TARGET)/simulators/systemc1
+	cp  $(TTOOL_SIMULATORS)/systemc1/Makefile.defs $(TTOOL_TARGET)/simulators/systemc1
+	cp  $(TTOOL_SIMULATORS)/systemc1/src_simulator/*.cpp $(TTOOL_TARGET)/simulators/systemc1/src_simulator
+	cp  $(TTOOL_SIMULATORS)/systemc1/src_simulator/*.h $(TTOOL_TARGET)/simulators/systemc1/src_simulator
+	mkdir -p $(TTOOL_TARGET)/simulators/c++2/src_simulator
+	mkdir -p $(TTOOL_TARGET)/simulators/c++2/lib
+	cp  $(TTOOL_SIMULATORS)/c++2/lib/README $(TTOOL_TARGET)/simulators/c++2/lib/
+	cp  $(TTOOL_SIMULATORS)/c++2/Makefile $(TTOOL_TARGET)/simulators/c++2
+	cp  $(TTOOL_SIMULATORS)/c++2/Makefile.defs $(TTOOL_TARGET)/simulators/c++2
+	cp  $(TTOOL_SIMULATORS)/c++2/schedstyle.css $(TTOOL_TARGET)/simulators/c++2
+	cp  $(TTOOL_SIMULATORS)/c++2/src_simulator/*.cpp $(TTOOL_TARGET)/simulators/c++2/src_simulator
+	cp  $(TTOOL_SIMULATORS)/c++2/src_simulator/*.h $(TTOOL_TARGET)/simulators/c++2/src_simulator
 # Licenses
 	cd $(TTOOL_DOC); cp $(RELEASE_STD_FILES_LICENSES) $(TTOOL_TARGET)
 # Main readme
diff --git a/src/tmltranslator/TMLArchitecture.java b/src/tmltranslator/TMLArchitecture.java
index bd1c5fa5ea18e7ae1da06441ea3371b078e86768..bcad2d2a26c2bcbb881ca08c2a20e0a6632f857c 100755
--- a/src/tmltranslator/TMLArchitecture.java
+++ b/src/tmltranslator/TMLArchitecture.java
@@ -54,6 +54,9 @@ public class TMLArchitecture {
 	
 	private int masterClockFrequency = 200; // in MHz
 	
+	private int hashCode;
+	private boolean hashCodeComputed = false;
+	
     
     public TMLArchitecture() {
         init();
@@ -64,6 +67,21 @@ public class TMLArchitecture {
 		hwlinks = new ArrayList<HwLink>();
     }
 	
+	private void computeHashCode() {
+		TMLArchiTextSpecification architxt = new TMLArchiTextSpecification("spec.tarchi");
+		String s = architxt.toTextFormat(this);
+		hashCode = s.hashCode();
+		System.out.println("TARCHI hashcode = " + hashCode); 
+	}
+	
+	public int getHashCode() {
+		if (!hashCodeComputed) {
+			computeHashCode();
+			hashCodeComputed = true;
+		}
+		return hashCode;
+	}
+	
 	public void setMasterClockFrequency(int value) {
 		masterClockFrequency = value;
 	}
diff --git a/src/tmltranslator/TMLMapping.java b/src/tmltranslator/TMLMapping.java
index 1a120bf586f0c14285ac5e8503b5b38b5f4192d6..34341c018f9ff4f445213bf01d9306c61c8481cd 100755
--- a/src/tmltranslator/TMLMapping.java
+++ b/src/tmltranslator/TMLMapping.java
@@ -58,6 +58,9 @@ public class TMLMapping {
 	private ArrayList<TMLElement> mappedcommelts;
 	
 	private boolean optimized = false;
+	
+	private int hashCode;
+	private boolean hashCodeComputed = false;
     
     public TMLMapping(TMLModeling _tmlm, TMLArchitecture _tmla) {
         tmlm = _tmlm;
@@ -89,6 +92,21 @@ public class TMLMapping {
 		return tmla;
 	}
 	
+	private void computeHashCode() {
+		hashCode = tmlm.getHashCode() + tmla.getHashCode();
+		TMLMappingTextSpecification tmaptxt = new TMLMappingTextSpecification("spec.tmap");
+		hashCode += tmaptxt.toString().hashCode();
+		System.out.println("TMAP hashcode = " + hashCode); 
+	}
+	
+	public int getHashCode() {
+		if (!hashCodeComputed) {
+			computeHashCode();
+			hashCodeComputed = true;
+		}
+		return hashCode;
+	}
+	
 	public ArrayList<HwExecutionNode> getNodes(){
 		return onnodes;
 	}
diff --git a/src/tmltranslator/TMLMappingTextSpecification.java b/src/tmltranslator/TMLMappingTextSpecification.java
index c01358717f12a5ba27001e79fc9ddf090eed9978..4cccf447ea25464015c8f19f3270eaee338fa958 100755
--- a/src/tmltranslator/TMLMappingTextSpecification.java
+++ b/src/tmltranslator/TMLMappingTextSpecification.java
@@ -72,6 +72,8 @@ public class TMLMappingTextSpecification {
 
 	private String taskparameters[] = {"PRIORITY"};		
 	
+	private int hashCode;
+	
 	
 	public TMLMappingTextSpecification(String _title) {
 		title = _title;
diff --git a/src/tmltranslator/TMLModeling.java b/src/tmltranslator/TMLModeling.java
index 1082e5685e11d30ecd06e2e07b3d44f31369e0bb..d88bcb8d40f238046ab3bbcbdecd2f4fff3e509e 100755
--- a/src/tmltranslator/TMLModeling.java
+++ b/src/tmltranslator/TMLModeling.java
@@ -36,7 +36,7 @@ The fact that you are presently reading this means that you have had
 knowledge of the CeCILL license and that you accept its terms.
 
 /**
- * Class TMLTask
+ * Class TMLModeling
  * Creation: 21/11/2005
  * @version 1.0 21/11/2005
  * @author Ludovic APVRILLE
@@ -60,6 +60,9 @@ public class TMLModeling {
 	private boolean optimized = false;
 	
 	private String[] ops = {">", "<", "+", "-", "*", "/", "[", "]", "(", ")", ":", "=", "==", ","};
+	
+	private int hashCode;
+	private boolean hashCodeComputed = false;
     
     public TMLModeling() {
         init();
@@ -114,6 +117,21 @@ public class TMLModeling {
         }
         return null;
 	}
+	
+	private void computeHashCode() {
+		TMLTextSpecification tmltxt = new TMLTextSpecification("spec.tml");
+		String s = tmltxt.toTextFormat(this);
+		hashCode = s.hashCode();
+		System.out.println("TML hashcode = " + hashCode); 
+	}
+	
+	public int getHashCode() {
+		if (!hashCodeComputed) {
+			computeHashCode();
+			hashCodeComputed = true;
+		}
+		return hashCode;
+	}
     
     public String toString() {
         String s = tasksToString();