diff --git a/hercules_ir/src/dot.rs b/hercules_ir/src/dot.rs
index 7ad8c6dfa0dbdafc2bc1a9a765a847932cfeadf3..6d5e8a77a156c43a23ea87d882c4a8f2d7920171 100644
--- a/hercules_ir/src/dot.rs
+++ b/hercules_ir/src/dot.rs
@@ -1,4 +1,4 @@
-use std::collections::HashMap;
+use std::collections::{HashMap, HashSet};
 use std::env::temp_dir;
 use std::fmt::Write;
 use std::fs::File;
@@ -93,7 +93,9 @@ pub fn write_dot<W: Write>(
                 color,
                 module,
                 typing,
+                &function.labels[node_id.idx()],
                 &function.schedules[node_id.idx()],
+                &module.labels,
                 w,
             )?;
         }
@@ -254,7 +256,9 @@ fn write_node<W: Write>(
     color: &str,
     module: &Module,
     typing: Option<&ModuleTyping>,
+    label_set: &HashSet<LabelID>,
     schedules: &Vec<Schedule>,
+    labels: &Vec<String>,
     w: &mut W,
 ) -> std::fmt::Result {
     let node = &module.functions[function_id.idx()].nodes[node_id.idx()];
@@ -341,62 +345,39 @@ fn write_node<W: Write>(
     if let Some(ty) = typing.map(|typing| typing[function_id.idx()][node_id.idx()]) {
         module.write_type(ty, &mut tylabel)?;
     }
-
+    let mut iter = label_set.into_iter();
+    let label_set = if let Some(first) = iter.next() {
+        iter.fold(format!("{}", labels[first.idx()]), |b, i| {
+            format!("{}, {}", b, labels[i.idx()])
+        })
+    } else {
+        String::new()
+    };
     let mut iter = schedules.into_iter();
     let schedules = if let Some(first) = iter.next() {
         iter.fold(format!("{:?}", first), |b, i| format!("{}, {:?}", b, i))
     } else {
         String::new()
     };
-    if tylabel.is_empty() && schedules.is_empty() {
-        write!(
-            w,
-            "{}_{}_{} [xlabel={}, label=<{}>, color={}];\n",
-            node.lower_case_name(),
-            function_id.idx(),
-            node_id.idx(),
-            xlabel,
-            label,
-            color
-        )?;
-    } else if schedules.is_empty() {
-        write!(
-            w,
-            "{}_{}_{} [xlabel={}, label=<{}<BR /><FONT POINT-SIZE=\"8\">{}</FONT>>, color={}];\n",
-            node.lower_case_name(),
-            function_id.idx(),
-            node_id.idx(),
-            xlabel,
-            label,
-            tylabel,
-            color
-        )?;
-    } else if tylabel.is_empty() {
-        write!(
-            w,
-            "{}_{}_{} [xlabel={}, label=<{}<BR /><FONT POINT-SIZE=\"8\">{}</FONT>>, color={}];\n",
-            node.lower_case_name(),
-            function_id.idx(),
-            node_id.idx(),
-            xlabel,
-            label,
-            schedules,
-            color
-        )?;
-    } else {
-        write!(
-            w,
-            "{}_{}_{} [xlabel={}, label=<{}<BR /><FONT POINT-SIZE=\"8\">{}</FONT><BR /><FONT POINT-SIZE=\"8\">{}</FONT>>, color={}];\n",
-            node.lower_case_name(),
-            function_id.idx(),
-            node_id.idx(),
-            xlabel,
-            label,
-            tylabel,
-            schedules,
-            color
-        )?;
+    write!(
+        w,
+        "{}_{}_{} [xlabel={}, label=<{}",
+        node.lower_case_name(),
+        function_id.idx(),
+        node_id.idx(),
+        xlabel,
+        label,
+    )?;
+    if !tylabel.is_empty() {
+        write!(w, "<BR /><FONT POINT-SIZE=\"8\">{}</FONT>", tylabel,)?;
+    }
+    if !label_set.is_empty() {
+        write!(w, "<BR /><FONT POINT-SIZE=\"8\">{}</FONT>", label_set,)?;
+    }
+    if !schedules.is_empty() {
+        write!(w, "<BR /><FONT POINT-SIZE=\"8\">{}</FONT>", schedules,)?;
     }
+    write!(w, ">, color={}];\n", color)?;
     Ok(())
 }