     @tableHead = @table.append('thead')
     @tableBody = @table.append('tbody')
 
+    # Create the re-usable views
+    [@tableHeadView, @tableBodyView] =
+      createTableView(this, @tableHead, @tableBody)
+
     if @options.data?
       @data(@options.data)
 
   data: (data) ->
     if data?
-      self = this
-
-      @_.data = data
+      _ = @_
+      _.data = data
+      _.leftShifted = false
 
       clonedData = hx.merge(data, true)
 

        cellViewEnter.call(this, datum, index, isHead)
      .update (datum, node, index) ->
        index = data.indexOf(datum)
        cellIsHead = isHead or (leftShifted and index is 0)
        cellViewUpdate(datum, node, index, isHead)
    # create the view once on enter and re-use it in the update
    hx.component.register(rowNode, { view: rowView })

    cell.node()

  cellViewUpdate = (data, node, index, isHead) ->
    isFirstColum = table._.leftShifted and index is 0
    cellIsHead = isHead or isFirstColum
    selection = hx.select(node)
    if hx.isFunction(data) # Top left cell
      data(node)
    else if not data? # Top left cell when no renderer provided
      selection.text('')
    else table.options.cellRender(data, node, cellIsHead, index) # Head / Body cells

  rowViewEnter = (data, isHead) ->
    rowNode = @append('tr').node()
