diff --git a/src/call.py b/src/call.py
index 19fdfc452d2b338ad1019a1b4adc427d957c4e5f..ad5867232364a76a59d8cbb0b7dbe07505e18e6f 100644
--- a/src/call.py
+++ b/src/call.py
@@ -98,7 +98,9 @@ class Call(Executor):
                 raise Exception("This shouldn't happen")
                 None
             elif(param.get_type()=="Emitted"):
-                None
+                code = code.replace(param.get_code(get_OG=True), param_new_name)
+                new_bit = f"{param_new_name} = {param.get_code(get_OG=True)}"
+                code = code.replace(tag_to_add, f"{tag_to_add}\n{new_bit}")
             else:
                 raise Exception("This shouldn't happen")
             index+=1
diff --git a/src/outils_graph.py b/src/outils_graph.py
index 01eb94fcd343d57a7a977615a235b65084ec3f5e..9dad12f11e89561d3d18c61217373eb4c94f8b4d 100644
--- a/src/outils_graph.py
+++ b/src/outils_graph.py
@@ -587,12 +587,17 @@ def nr_path_pred(r, n, dico, R):
         return True
     return False
 
-
+#Added a dico so it knows what it's already searched
+dico_rSucc = {}
 def rSucc(n, dico, R, outputs):
-    tab = []
-    for r in set(R).union(set(outputs)):
-        if(nr_path_succ(n, r, dico, R+list(outputs))):
-            tab.append(r)
+    try:
+        tab = dico_rSucc[n]
+    except:
+        tab = []
+        for r in set(R).union(set(outputs)):
+            if(nr_path_succ(n, r, dico, R+list(outputs))):
+                tab.append(r)
+        dico_rSucc[n] = tab
     return tab
 
 def rSuccM(M, dico, R, outputs):
@@ -601,11 +606,17 @@ def rSuccM(M, dico, R, outputs):
         tab += rSucc(n, dico, R, outputs)
     return list(set(tab))
 
+#Added a dico so it knows what it's already searched
+dico_rPred = {}
 def rPred(n, dico, R, inputs):
-    tab = []
-    for r in set(R).union(set(inputs)):
-        if(nr_path_pred(r, n, dico, R+list(inputs))):
-            tab.append(r)
+    try:
+        tab = dico_rPred[n]
+    except:
+        tab = []
+        for r in set(R).union(set(inputs)):
+            if(nr_path_pred(r, n, dico, R+list(inputs))):
+                tab.append(r)
+        dico_rPred[n] = tab
     return tab
 
 def rPredM(M, dico, R, inputs):
@@ -773,7 +784,7 @@ def relev_user_view_builder(dico_param, relevant_modules):
                 M = [n]
                 NRC.append(M)
 
-    
+
     #Step 3
     changes_in_NRC = True
     while(changes_in_NRC):
@@ -806,7 +817,7 @@ def relev_user_view_builder(dico_param, relevant_modules):
                     break
             if(changes_in_NRC):
                     break
-                        
+
                 
     new_nodes = list(U)+NRC
     new_dico = {}
diff --git a/src/process.py b/src/process.py
index a6317a72babec77bbecdb32b52cbc6dc8f0fd27c..7d689ddac60b60dffb6d4612b898ee7050a018a8 100644
--- a/src/process.py
+++ b/src/process.py
@@ -398,7 +398,7 @@ class Process(Nextflow_Building_Blocks):
             self.name = self.name.replace('"', '')
             if(self.alias==""):
                self.alias = self.name
-            self.printed_name = self.name
+            self.printed_name = self.alias
 
     def get_name_to_print(self):
         return self.printed_name
diff --git a/src/workflow.py b/src/workflow.py
index 777d01a5833e5d4527452e5e16369d6d5bd39a1c..eaae2900c0c3d9bfc83fd009198ab7cc4abea01e 100644
--- a/src/workflow.py
+++ b/src/workflow.py
@@ -452,12 +452,12 @@ George Marchment, Bryan Brancotte, Marie Schmit, Frédéric Lemoine, Sarah Cohen
 
         #Adding processes into code
         for p in processes:
-            if(p.get_code() not in code):
+            if(p.get_code_with_alias() not in code):
                 code = code.replace(process_section, '\n'+p.get_code_with_alias()+'\n'+process_section)
 
         #Adding subworkflows into code
         for sub in subworkflows:
-            if(sub.get_code() not in code):
+            if(sub.get_code_with_alias() not in code):
                 code = code.replace(subworkflow_section, subworkflow_section+'\n'+sub.get_code_with_alias()+'\n')
 
         #Adding functions into code
@@ -484,7 +484,6 @@ George Marchment, Bryan Brancotte, Marie Schmit, Frédéric Lemoine, Sarah Cohen
         code = self.get_first_file().get_code()
         code, ankers = self.write_workflow_into_one_file()
         all_executors = self.get_workflow_main().get_all_executors_in_workflow()
-        
         #We do this so that the longest operation and calls are rewritten first in the code -> to avoid problems
         executor_2_length = {}
         for e in all_executors:
@@ -661,15 +660,12 @@ George Marchment, Bryan Brancotte, Marie Schmit, Frédéric Lemoine, Sarah Cohen
 
         if(self.duplicate):
             code = self.simplify_workflow_code()
-            print(code)
             self.rewrite_and_initialise(code)
             
             #Get the clusters and the code
             self.check_relevant_processes_in_workflow(relevant_processes)
-            print("started Generating first user view")
             self.generate_user_view(relevant_processes = relevant_processes, processes_2_remove =  [])
             clusters = self.graph.get_clusters_from_user_view()
-            print("Generated first user view")
             
             #DETERMING WHICH SUBWORKFLOWS ARE BROKEN WITH THE CLUSTER
             #Creating the clusters with calls instead of processes or subworkflows
@@ -735,7 +731,7 @@ George Marchment, Bryan Brancotte, Marie Schmit, Frédéric Lemoine, Sarah Cohen
             #Get the clusters and the code
             self.generate_user_view(relevant_processes = relevant_processes, processes_2_remove =  [])
             clusters = self.graph.get_clusters_from_user_view()
-            print("Generated second user view")
+
 
             #Get the clsuters with the corresponding operations inside
             #for i in range(len(clusters)):