       .run()
 
     # Positioning nodes
-    @nodes.attr "transform", (d) -> "translate(" + d.dagre.x + "," + d.dagre.y + ")"
+    @nodes.attr "transform", (d) ->
+      "translate(#{d.dagre.x - d.width/2},#{d.dagre.y - d.height/2})"
 
     # Ensure that we have at least two points between source and target
     @edges.each (d) ->

      d.height = bbox.height + 2 * padding

    rects
      .attr("x", (d) -> -(d.bbox.width / 2 + padding))
      .attr("y", (d) -> -(d.bbox.height / 2 + padding))
      .attr("width", (d) -> d.width)
      .attr("height", (d) -> d.height)

    labels
      .attr("x", (d) -> -d.bbox.width / 2)
      .attr("y", (d) -> -d.bbox.height / 2)

  width: -> @container[0][0].getBBox().width
  height: -> @container[0][0].getBBox().height

      .enter()
      .append("g")
      .attr("class", "node")
      .attr("id", (d) -> "node-" + d.label)

    @edges = @container.selectAll("g .edge")
      .data(@graph.edges)
