diff --git a/ttool/src/test/java/tmltranslator/DiplodocusDelayTest.java b/ttool/src/test/java/tmltranslator/DiplodocusDelayTest.java
index 878bd707f5c834a7ed61e732eea7214d4a9dd42a..f7bf25e10ad7a1587b226e8acaff28adfd0e1ccb 100644
--- a/ttool/src/test/java/tmltranslator/DiplodocusDelayTest.java
+++ b/ttool/src/test/java/tmltranslator/DiplodocusDelayTest.java
@@ -9,6 +9,7 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 import req.ebrdd.EBRDD;
 import tepe.TEPE;
+import tmltranslator.compareTMLTest.CompareTML;
 import tmltranslator.tomappingsystemc2.DiploSimulatorFactory;
 import tmltranslator.tomappingsystemc2.IDiploSimulatorCodeGenerator;
 import tmltranslator.tomappingsystemc2.Penalties;
@@ -41,8 +42,13 @@ public class DiplodocusDelayTest extends AbstractUITest {
     final int [] NB_Of_DELAY_TRANSTIONS_PENALTIES = {41, 41, 41, 41, 31, 21};
     final int [] MIN_DELAY_CYCLES_PENALTIES = {2590, 2590, 2670, 2670, 2010, 1950};
     final int [] MAX_DELAY_CYCLES_PENALTIES = {2590, 2590, 2670, 2670, 2010, 1950};
-
-
+    // test for read and write active delay parameter
+    final String [] MODELS_DELAY_READ_WRITE = {"delayRW"};
+    final static String EXPECTED_FILE1 = getBaseResourcesDir() + "tmltranslator/expected/expected_specdelay_readwrite.tml";
+    final int [] NB_Of_DELAY_RW_STATES = {42};
+    final int [] NB_Of_DELAY_RW_TRANSTIONS = {41};
+    final int [] MIN_DELAY_RW_CYCLES = {2020};
+    final int [] MAX_DELAY_RW_CYCLES = {2020};
     private String SIM_DIR;
 
 
@@ -372,5 +378,192 @@ public class DiplodocusDelayTest extends AbstractUITest {
             assertTrue(MAX_DELAY_CYCLES_PENALTIES[i] == maxValue);
         }
     }
+    @Test
+    public void testGenerateTML() throws Exception {
+        CompareTML compTML = new CompareTML();
+        mainGUI.openProjectFromFile(new File(RESOURCES_DIR  + "delay-readwrite.xml"));
+        for(TURTLEPanel _tab : mainGUI.getTabs()) {
+            if(_tab instanceof TMLArchiPanel) {
+                for (TDiagramPanel tdp : _tab.getPanels()) {
+                    if (tdp instanceof TMLArchiDiagramPanel) {
+                        mainGUI.selectTab(tdp);
+                        break;
+                    }
+                }
+                break;
+            }
+        }
+        mainGUI.checkModelingSyntax(true);
+        mainGUI.generateTMLTxt();
+        File f1 = new File(EXPECTED_FILE1);
+        File f2 = new File("spec.tml");  // Generated file after executing "TML generation"
+        assertTrue(compTML.compareTML(f1,f2));
+    }
+
+    @Test
+    public void testActiveDelayReadAndWrite() throws Exception {
+        for(int i=0; i<MODELS_DELAY_READ_WRITE.length; i++) {
+            String s = MODELS_DELAY_READ_WRITE[i];
+            SIM_DIR = DIR_GEN + s + "/";
+            // Load the TML
+            System.out.println("executing: loading " + s);
+            TMLMappingTextSpecification tmts = new TMLMappingTextSpecification(s);
+            File f = new File(RESOURCES_DIR + s + ".tmap");
+            System.out.println("executing: new file loaded " + s);
+            String spec = null;
+            try {
+                spec = FileUtils.loadFileData(f);
+            } catch (Exception e) {
+                System.out.println("Exception executing: loading " + s);
+                assertTrue(false);
+            }
+            System.out.println("executing: testing spec " + s);
+            assertTrue(spec != null);
+            System.out.println("executing: testing parsed " + s);
+            boolean parsed = tmts.makeTMLMapping(spec, RESOURCES_DIR);
+            assertTrue(parsed);
+
+
+            System.out.println("executing: checking syntax " + s);
+            // Checking syntax
+            TMLMapping tmap = tmts.getTMLMapping();
+
+            TMLSyntaxChecking syntax = new TMLSyntaxChecking(tmap);
+            syntax.checkSyntax();
+
+            assertTrue(syntax.hasErrors() == 0);
+
+            // Generate SystemC code
+            System.out.println("executing: sim code gen for " + s);
+            final IDiploSimulatorCodeGenerator tml2systc;
+            List<EBRDD> al = new ArrayList<EBRDD>();
+            List<TEPE> alTepe = new ArrayList<TEPE>();
+            tml2systc = DiploSimulatorFactory.INSTANCE.createCodeGenerator(tmap, al, alTepe);
+            tml2systc.setModelName(s);
+            String error = tml2systc.generateSystemC(false, true);
+            assertTrue(error == null);
+
+            File directory = new File(SIM_DIR);
+            if (! directory.exists()){
+                directory.mkdirs();
+            }
+
+            // Putting sim files
+            System.out.println("SIM executing: sim lib code copying for " + s);
+            ConfigurationTTool.SystemCCodeDirectory = getBaseResourcesDir() +  "../../../../simulators/c++2/";
+            boolean simFiles = SpecConfigTTool.checkAndCreateSystemCDir(SIM_DIR);
+
+            System.out.println("SIM executing: sim lib code copying done with result " + simFiles);
+            assertTrue(simFiles);
+
+            System.out.println("SIM Saving file in: " + SIM_DIR);
+            tml2systc.saveFile(SIM_DIR, "appmodel");
+
+
+            // Compile it
+            System.out.println("executing: compile");
+            Process proc;
+            BufferedReader proc_in;
+            String str;
+            boolean mustRecompileAll;
+            Penalties penalty = new Penalties(SIM_DIR + File.separator + "src_simulator");
+            int changed = penalty.handlePenalties(false);
+
+            if (changed == 1) {
+                mustRecompileAll = true;
+            } else {
+                mustRecompileAll = false;
+            }
+
+            if (mustRecompileAll) {
+                System.out.println("executing: " + "make -C " + SIM_DIR + " clean");
+                try {
+                    proc = Runtime.getRuntime().exec("make -C " + SIM_DIR + " clean");
+                    proc_in = new BufferedReader( new InputStreamReader( proc.getInputStream() ) );
+                    while ( ( str = proc_in.readLine() ) != null ) {
+                        // TraceManager.addDev( "Sending " + str + " from " + port + " to client..." );
+                        System.out.println("executing: " + str);
+                    }
+                } catch (Exception e) {
+                    // probably make is not installed
+                    System.out.println("FAILED: executing: " + "make -C " + SIM_DIR + " clean");
+                    return;
+                }
+            }
+
+            System.out.println("executing: " + "make -C " + SIM_DIR);
+            try {
+
+                proc = Runtime.getRuntime().exec("make -C " + SIM_DIR + "");
+                proc_in = new BufferedReader( new InputStreamReader( proc.getInputStream() ) );
+
+                monitorError(proc);
+
+                while ( ( str = proc_in.readLine() ) != null ) {
+                    // TraceManager.addDev( "Sending " + str + " from " + port + " to client..." );
+                    System.out.println("executing: " + str);
+                }
+            } catch (Exception e) {
+                // Probably make is not installed
+                System.out.println("FAILED: executing: " + "make -C " + SIM_DIR);
+                return;
+            }
+            System.out.println("SUCCESS: executing: " + "make -C " + SIM_DIR);
+
+            // Run the simulator
+            String graphPath = SIM_DIR + "testgraph_" + s;
+            try {
+
+                String[] params = new String [3];
 
+                params[0] = "./" + SIM_DIR + "run.x";
+                params[1] = "-cmd";
+                params[2] = "1 0; 1 7 100 100 " + graphPath;
+                proc = Runtime.getRuntime().exec(params);
+                //proc = Runtime.getRuntime().exec("./" + SIM_DIR + "run.x -explo -gname testgraph_" + s);
+                proc_in = new BufferedReader( new InputStreamReader( proc.getInputStream() ) );
+
+                monitorError(proc);
+
+                while ( ( str = proc_in.readLine() ) != null ) {
+                    // TraceManager.addDev( "Sending " + str + " from " + port + " to client..." );
+                    System.out.println("executing: " + str);
+                }
+            } catch (Exception e) {
+                // Probably make is not installed
+                System.out.println("FAILED: executing simulation");
+                return;
+            }
+
+            // Compare results with expected ones
+            // Must load the graph
+            File graphFile = new File(graphPath + ".aut");
+            String graphData = "";
+            try {
+                graphData = FileUtils.loadFileData(graphFile);
+            } catch (Exception e) {
+                assertTrue(false);
+            }
+
+            AUTGraph graph = new AUTGraph();
+            graph.buildGraph(graphData);
+
+            // States and transitions
+            System.out.println("executing: nb states of " + s + " " + graph.getNbOfStates());
+            assertTrue(NB_Of_DELAY_RW_STATES[i] == graph.getNbOfStates());
+            System.out.println("executing: nb transitions of " + s + " " + graph.getNbOfTransitions());
+            assertTrue(NB_Of_DELAY_RW_TRANSTIONS[i] == graph.getNbOfTransitions());
+
+            // Min and max cycles
+            int minValue = graph.getMinValue("allCPUsFPGAsTerminated");
+            System.out.println("executing: minvalue of " + s + " " + minValue);
+            assertTrue(MIN_DELAY_RW_CYCLES[i] == minValue);
+
+            int maxValue = graph.getMaxValue("allCPUsFPGAsTerminated");
+            System.out.println("executing: maxvalue of " + s + " " + maxValue);
+            assertTrue(MAX_DELAY_RW_CYCLES[i] == maxValue);
+
+        }
+
+    }
 }