             .attr('dy', '.25em')
             .attr('x', (d) => @x(d.x) + @x(d.dx) / 2)
             .attr('y', (d) => @y(d.y) + @cellHeight() / 2)
-            .text((d) => @getLabelText(d.name, d.dx))
+            .text((d) => @label(d))
 
-      console.timeEnd('rendering')
-      console.log("Rendered #{@container.selectAll('.node')[0].length} elements")
-      return @breadcrumbs().interactivity()
+      console.timeEnd('render')
+      console.log("Rendered #{@container().selectAll('.node')[0].length} elements")
+      return @_breadcrumbs()._interactivity()
 
-    interactivity: () ->
-      console.time('interactivity')
-      clickHandler = (d) => @data(d).render()
+    _breadcrumbs: () ->
+      breadcrumbData = @_allData.map((prevData, idx) -> { name: prevData.name, value: idx })
+      breadcrumbs = d3.select('.breadcrumb')
+        .selectAll('li')
+        .data(breadcrumbData)
 
-      @container
+      breadcrumbs.enter()
+        .append('li')
+          .append('a')
+            .attr('title', (d) -> d.name)
+            .text((d) -> getClassAndMethodName(d.name))
+            .on 'click', (breadcrumb) =>
+              idx = breadcrumb.value
+              displayed = @_allData[idx]
+              @_allData = @_allData.slice(0, idx)
+              @data(displayed).render()
+
+      breadcrumbs.exit().remove()
+      @
+
+    _interactivity: () ->
+      @container()
         .selectAll('.node')
-        .on 'click', clickHandler
-
-      @container
+        .on 'click', (d) => @data(d).render()
+      @container()
         .selectAll('.label')
-        .on 'click', clickHandler
-      console.timeEnd('interactivity')
+        .on 'click', (d) => @data(d).render()
       @
 
     _generateAccessors: (accessors) ->

        'width',
        'height',
        'cellHeight',
        'containerId',
        'colorScheme'])
      @_allData = []

    data: (data) ->
      return @_data if not data

            .attr('height', (d) => @cellHeight() - 2)
            .attr('x', (d) => @x(d.x))
            .attr('y', (d) => @y(d.y))
            .attr('stroke', @colorScheme()[@colorScheme().length - 1])
            .attr('fill', (d) => @color(d))
            .attr('fill-opacity', '0.8')

      @container()
        .selectAll('.label')
        .data(@data().filter((d) => d.name and @x(d.dx) > 40))
        .enter()
