-local node_new = node.new
-local has_attr = node.has_attribute
-local set_attr = node.set_attribute
+local mem_leak_glue, mem_leak_gs, mem_leak_kern = 0, 0, 0
+
+local Dnode = node.direct or node
+
+local setfield = (Dnode ~= node) and Dnode.setfield or function(n, i, c) n[i] = c end
+local getid = (Dnode ~= node) and Dnode.getid or function(n) return n.id end
+local getfont = (Dnode ~= node) and Dnode.getfont or function(n) return n.font end
+local getchar = (Dnode ~= node) and Dnode.getchar or function(n) return n.char end
+
+local nullfunc = function(n) return n end
+local to_direct = (Dnode ~= node) and Dnode.todirect or nullfunc
+
+local node_new = Dnode.new
+local node_free = Dnode.free
+local has_attr = Dnode.has_attribute
+local set_attr = Dnode.set_attribute
+local node_write = Dnode.write