diff --git a/src/call.py b/src/call.py
index 5f474f008d275c622d8cdefe1cd0bbc3161185df..7febe835f765d4744ab2d5016d3c8753b654d3d7 100644
--- a/src/call.py
+++ b/src/call.py
@@ -286,7 +286,7 @@ class Call(Executor):
             temp_dico['edges'] = []
             temp_dico['subworkflows'] = {}
             sub.get_structure(temp_dico)
-            dico['subworkflows'][sub.get_alias()] = temp_dico
+            dico['subworkflows'][sub.get_printed_name()] = temp_dico
             param_index = 0
 
             def add_parameter(p, param_index):
@@ -413,8 +413,9 @@ class Call(Executor):
                 #If the elements need to duplicated -> then we need to duplicate it
                 if(self.get_duplicate_status()):
                     temp = process
-                    process = process.copy()
+                    process, num  = process.copy()
                     process.set_alias(temp.get_alias())
+                    process.set_printed_name(f"{temp.get_alias()}_{num}")
                 process.initialise()
                 self.first_element_called = process
                 self.origin.add_element_to_elements_being_called(process)
@@ -422,8 +423,9 @@ class Call(Executor):
             if(process==None and subworkflow!=None and fun==None):
                 if(self.get_duplicate_status()):
                     temp = subworkflow
-                    subworkflow = subworkflow.copy()
+                    subworkflow, num = subworkflow.copy()
                     subworkflow.set_alias(temp.get_alias())
+                    subworkflow.set_printed_name(f"{temp.get_alias()}_{num}")
                 subworkflow.initialise()
                 self.first_element_called = subworkflow
                 self.origin.add_element_to_elements_being_called(subworkflow)
diff --git a/src/include.py b/src/include.py
index 5e419033b4aa2f0f0d5c1491d92ec8b9ad271291..bfced507d5d7453586641bf7c322cf030522f092 100644
--- a/src/include.py
+++ b/src/include.py
@@ -117,7 +117,7 @@ class Include(Nextflow_Building_Blocks):
                     for match in re.finditer(pattern_as, include):
                         found = True
                         #if(self.get_duplicate_status()):
-                        thing_as = self.nextflow_file.get_element_from_name(match.group(1)).copy()
+                        thing_as, num = self.nextflow_file.get_element_from_name(match.group(1)).copy()
                         thing_as.set_alias(match.group(3))
                         self.defines[match.group(3)] = thing_as
                         #else:
diff --git a/src/process.py b/src/process.py
index d65edfa0a149d08937534047f0695f8ff837d5e8..5c0cdf489730afb8c857adb176bff7914ef5dc8a 100644
--- a/src/process.py
+++ b/src/process.py
@@ -29,6 +29,7 @@ class Process(Nextflow_Building_Blocks):
 
         self.called_by = []#List of calls
         self.initialised = False
+        self.number_times_copied = 0
 
 
     def copy(self):
@@ -46,17 +47,28 @@ class Process(Nextflow_Building_Blocks):
         process.script_code = ""
         process.called_by = []#List of calls
         process.initialised = False
-        return process
+        num = self.number_times_copied
+        self.number_times_copied += 1
+        return process, num
 
     def add_to_emits(self, emit):
         self.later_emits.append(emit)
     
     def get_later_emits(self):
         return self.later_emits
-
+    
     def set_alias(self, alias):
         self.alias = alias
 
+    def set_printed_name(self, name):
+        self.printed_name = name
+
+    def get_alias(self):
+        return self.alias
+    
+    def get_printed_name(self):
+        return self.printed_name
+
     def get_number_times_called(self):
         return self.number_times_called
     
@@ -69,8 +81,6 @@ class Process(Nextflow_Building_Blocks):
     def get_call(self):
         return self.call
     
-    def get_alias(self):
-        return self.alias
     
     def get_script_code(self):
         return self.script_code
diff --git a/src/subworkflow.py b/src/subworkflow.py
index 804a50e91f34ac21c334dae30b848c60a207c60c..9a5598e36fcbdf8bd14e9b3fba8e236ffa2639f6 100644
--- a/src/subworkflow.py
+++ b/src/subworkflow.py
@@ -15,6 +15,7 @@ class Subworkflow(Main):
         Main.__init__(self, code, nextflow_file)
         self.name = name.replace("'", "").replace('"', '')
         self.alias = self.name
+        self.printed_name = self.name
         #These are the different parts of of a subworkflow -> work corresponds to the main 
         self.take = []
         self.takes_channels = []
@@ -28,10 +29,12 @@ class Subworkflow(Main):
         self.number_times_called = 0
 
         self.called_by = []#List of calls
+        self.number_times_copied = 0
 
     def copy(self):
         sub = copy.copy(self)
         sub.alias = self.name
+        sub.printed_name = self.printed_name 
         sub.take = []
         sub.takes_channels = []
         sub.work = None
@@ -41,7 +44,9 @@ class Subworkflow(Main):
         sub.later_emits = []
         sub.number_times_called = 0
         sub.called_by = []
-        return sub
+        num = self.number_times_copied
+        self.number_times_copied+=1
+        return sub, num
     
     #TODO make sure this is uptodate
     def get_calls_by_name(self, name):            
@@ -81,8 +86,14 @@ class Subworkflow(Main):
     def set_alias(self, alias):
         self.alias = alias
 
+    def set_printed_name(self, name):
+        self.printed_name = name
+
     def get_alias(self):
         return self.alias
+    
+    def get_printed_name(self):
+        return self.printed_name
 
     def get_type(self):
         return "Subworkflow"