diff --git a/src/bioflowinsighterror.py b/src/bioflowinsighterror.py
index 3a2f3d4f32dfc7af01cdf3b26d6647e0e2ea57e3..82c3a655c48612b8da53ba4a6dc4ce54b3a638bc 100644
--- a/src/bioflowinsighterror.py
+++ b/src/bioflowinsighterror.py
@@ -54,6 +54,7 @@ class BioFlowInsightError(Exception):
 #* [9] -> Tuple with call (ch1, ch2) = wf()
 #* [11] -> Failed to extract the operation or call at the line x. Try rewriting it in a simplified version.
 #* [13] -> Multiple scripts with the same name were defined in the source code -> don't know which one to extract then when calling 'get_external_scripts_code'
+#* [15] -> Failed to extract the call at the line x. Try rewriting it in a simplified version.
             
         
 
diff --git a/src/call.py b/src/call.py
index 8c0f5767a4cb20650580ecc33d395d3893415374..4e53b82249a3971e5437d132e6a66fdb72633e99 100644
--- a/src/call.py
+++ b/src/call.py
@@ -382,8 +382,7 @@ class Call(Executor):
                 raise Exception("No first call found!!")
             self.called.append(self.first_element_called)
         else:
-            print(self.get_file_address())
-            raise Exception(f"Call didn't match pattern '{call}'")
+            raise BioFlowInsightError(f"Failed to extract the call{self.get_string_line(self.get_code())}. Try rewriting it in a simplified version.", num = 15, origin=self)
     
     
     def get_called(self):
diff --git a/src/outils_graph.py b/src/outils_graph.py
index 4f17a58cc4d36d3cf8a949a7430345dc79b55694..5a4f5d6b9385a3702dd12fe467a75c61ac9338dc 100644
--- a/src/outils_graph.py
+++ b/src/outils_graph.py
@@ -17,10 +17,22 @@ def is_operation(node_id):
 
 def fill_dot(dot, dico, label_node = True, label_edge = True):
     for n in dico["nodes"]:
+        try:
+            color = n["color"]
+        except:
+            color = ""
+        try:
+            xlabel = n["xlabel"]
+        except:
+            xlabel = ""
+        try:
+            fillcolor = n["fillcolor"]
+        except:
+            fillcolor = ""
         if(label_node):
-            dot.node(n["id"], n["name"], shape=n["shape"], xlabel= n["xlabel"], fillcolor=n["fillcolor"])
+            dot.node(n["id"], n["name"], shape=n["shape"], xlabel= xlabel, fillcolor=fillcolor, color = color, style="filled")
         else:
-            dot.node(n["id"], n["name"], shape=n["shape"], fillcolor=n["fillcolor"])
+            dot.node(n["id"], n["name"], shape=n["shape"], fillcolor=fillcolor, color=color, style="filled")
     for e in dico["edges"]:
         if(label_edge):
             dot.edge(e['A'], e['B'], label= e['label'])
@@ -534,6 +546,17 @@ def get_name_new_node(new_nodes, relevant_modules):
 def check_same_elements(list1, list2):
     return set(list1)==set(list2)
 
+def rgb_to_hex(r, g, b):
+    return '#{:02x}{:02x}{:02x}'.format(r, g, b)
+
+def get_color_node(node, new_nodes):
+    max = len(new_nodes[0])
+    for n in new_nodes:
+        if(len(n)>max):
+            max = len(n)
+    prop = 256- int(127*len(node)/max)
+    return rgb_to_hex(prop, prop, prop)
+
 def relev_user_view_builder(dico, relevant_modules):
     R = []
     for r in relevant_modules:
@@ -639,11 +662,15 @@ def relev_user_view_builder(dico, relevant_modules):
     new_dico["subworkflows"] = []
     for i in range(len(new_nodes)):
         new_nodes[i].sort()
+        new_name = get_name_new_node(get_names_tab(dico, new_nodes[i]), relevant_modules)
         node = {"id": ''.join(new_nodes[i]).replace('<', '').replace('>', ''),
-                "name": get_name_new_node(get_names_tab(dico, new_nodes[i]), relevant_modules),
+                "name": new_name,
                 "shape": "ellipse",
-                "xlabel": "",
-                "fillcolor": ""}
+                "xlabel": f"{len(new_nodes[i])}",
+                "fillcolor": get_color_node(new_nodes[i], new_nodes)}
+        #If relevant module -> color it differently
+        if(new_name in relevant_modules):
+            node["color"] = "yellow"
         new_dico["nodes"].append(node)
     added_edges = []
     for edge in dico["edges"]:
@@ -662,6 +689,14 @@ def relev_user_view_builder(dico, relevant_modules):
                             "label": ""
                             })
                         added_edges.append(edge_string)
+    outputs = get_output_nodes(new_dico)
+    inputs = get_input_nodes(new_dico)
+    new_dico["nodes"].append({"id": "input","name": "i","shape": "triangle", "fillcolor":"#ffffff"})
+    new_dico["nodes"].append({"id": "output","name": "o","shape": "triangle", "fillcolor":"#ffffff"})
+    for out in outputs:
+        new_dico["edges"].append({'A':out, 'B':'output', "label": ""})
+    for input in inputs:
+        new_dico["edges"].append({'A':"input", 'B':input, "label": ""})
     return new_dico