     "TableBaseColumn"
     "TableColumnsController"
     "TableRowsController"
+    "tableComponents"
     (
         TableBaseColumn
         TableColumnsController
         TableRowsController
+        tableComponents
     ) ->
       # Helper functions
       convertObjectModelsToArray = (models) ->


            @insert.apply this, args for args in toBeInserted

            # If we're passed a section controller, set it for this section
            if sectionController
              @sections[sectionName].setController sectionController

          # New or empty section, load using set which will also create a section
          else
            @rowsCtrl.set sectionName, models, sectionController

        insert: (sectionName, model, index = 0) ->
          @rowsCtrl.insert sectionName, model, index

            @columnsCtrl.set(columns)
          return

        makeSection: (sectionName) ->
          @sections[sectionName] =
            tableComponents.sectionFactory(this, sectionName)

        load: (sectionName, models, controller) ->
          if not @sections[sectionName]
            @makeSection sectionName

          @loadController sectionName, controller if controller
          @loadModels     sectionName, models     if models

        loadModels: (sectionName, models) ->
          models = convertObjectModelsToArray models

          # Check if we're working with an existing section, if so we want to
