diff --git a/pymbolic/imperative/utils.py b/pymbolic/imperative/utils.py
index 5221859af1a5349e3cccaf0e8b31ff0d64c3cadc..389dae6e9659f99ed368fcbe4784395ddf1d3fdf 100644
--- a/pymbolic/imperative/utils.py
+++ b/pymbolic/imperative/utils.py
@@ -34,8 +34,16 @@ logger = logging.getLogger(__name__)
 
 # {{{ graphviz / dot export
 
-def get_dot_dependency_graph(instructions, use_insn_ids=False,
-        addtional_lines_hook=None):
+
+def _default_node_attr_hook(insn):
+    insn_repr = repr(insn.id)[1:-1]
+    return "label=\"{id}\",shape=\"box\",tooltip=\"{id}\"".format(id=insn_repr)
+
+
+def get_dot_dependency_graph(
+        instructions, use_insn_ids=False,
+        additional_lines_hook=None,
+        node_attr_hook=_default_node_attr_hook):
     """Return a string in the `dot <http://graphviz.org/>`_ language depicting
     dependencies among kernel instructions.
     """
@@ -54,12 +62,7 @@ def get_dot_dependency_graph(instructions, use_insn_ids=False,
             insn_label = str(insn)
             tooltip = insn.id
 
-        lines.append("\"%s\" [label=\"%s\",shape=\"box\",tooltip=\"%s\"];"
-                % (
-                    insn.id,
-                    repr(insn_label)[1:-1],
-                    repr(tooltip)[1:-1],
-                    ))
+        lines.append("\"%s\" [%s];" % (insn.id, node_attr_hook(insn)))
         for dep in insn.depends_on:
             dep_graph.setdefault(insn.id, set()).add(dep)
 
@@ -95,15 +98,15 @@ def get_dot_dependency_graph(instructions, use_insn_ids=False,
 
     for insn_1 in dep_graph:
         for insn_2 in dep_graph.get(insn_1, set()):
-            lines.append("%s -> %s" % (insn_2, insn_1))
+            lines.append("%s -> %s [dir=\"back\"]" % (insn_2, insn_1))
 
     for (insn_1, insn_2), annot in six.iteritems(annotation_dep_graph):
             lines.append(
-                    "%s -> %s  [label=\"%s\", style=dashed]"
+                    "%s -> %s  [dir=\"back\", label=\"%s\", style=dashed]"
                     % (insn_2, insn_1, annot))
 
-    if addtional_lines_hook is not None:
-        lines.extend(addtional_lines_hook())
+    if additional_lines_hook is not None:
+        lines.extend(additional_lines_hook())
 
     return "digraph code {\n%s\n}" % (
             "\n".join(lines)