diff --git a/src/workflow.py b/src/workflow.py
index da73fd34f4734120d5fae47a075a7fada7844bc3..41444ec7c537d6d0a498617872cda59147b065e2 100644
--- a/src/workflow.py
+++ b/src/workflow.py
@@ -2,13 +2,14 @@
 from .nextflow_file import Nextflow_File
 from .ro_crate import RO_Crate
 from . import constant
-from .outils_graph import flatten_dico
+from .outils_graph import flatten_dico, initia_link_dico_rec, get_number_cycles
 
 import os
 import re
 import json
 from pathlib import Path
 import glob
+import ctypes
 
 from .bioflowinsighterror import BioFlowInsightError
 
@@ -267,7 +268,7 @@ class Workflow:
         if(not graph.is_initialised()):
             graph.initialise()
         process_dependency_graph = graph.get_process_dependency_graph_dico()
-        dico_flattened = {"nodes": [], "edges": []}
+        dico_flattened = {"nodes": [], "edges": [], "subworkflows":[]}
 
         def get_node(dico, id):
             for n in dico['nodes']:
@@ -298,16 +299,27 @@ class Workflow:
                     print("prob2")
             
         flatten_dico(process_dependency_graph, dico_flattened)
+        links = initia_link_dico_rec(dico_flattened)
+        _, edges_create_cycles = get_number_cycles(links)
+        #If the graph isn't a dag -> we remoce the edges which make it cyclic
+        for A, B in edges_create_cycles:
+            #print({"A":A, "B":B})
+            #print(dico_flattened["edges"])
+            dico_flattened["edges"].remove({"A":A, "B":B, "label":''})
+
         layers = []
         while(dico_flattened["nodes"]!=[]):
           
             layer = dico_flattened["nodes"].copy()
             
             for edge in dico_flattened["edges"]:
-                try:
-                    layer.remove(get_node(dico_flattened, edge['B']))
-                except:
-                    None
+                removed = False
+                node = get_node(dico_flattened, edge['B'])
+                while(not removed):
+                    try:
+                        layer.remove(node)
+                    except:
+                        removed = True
             
             
             for node in layer:
@@ -315,10 +327,15 @@ class Workflow:
                 remove_edge_if_A(dico_flattened, node['id'])
             layers.append(layer)
             
-        
-        return layers
+        layers_object = []
+        for layer in layers:
+            tab = []
+            for element in layer:
+                address = int(re.findall(r"\dx\w+", element['id'])[0], base=16)
+                tab.append(ctypes.cast(address, ctypes.py_object).value)
+            layers_object.append(tab)
+        return layers_object
                 
-        print(flatten_dico(process_dependency_graph, dico_flattened))
 
     def initialise(self, create_rocrate = True):
         self.nextflow_file.initialise()