         }
     }
 
-    override public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
-        if isTopCell(indexPath) {
-            return topCells[indexPath.row]
-        } else if isFooter(indexPath) {
+    public override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
+        if isFooter(indexPath) {
             let cell = tableView.dequeueReusableCellWithIdentifier(readMoreCellIdentifier, forIndexPath: indexPath)
             cell.separatorInset = UIEdgeInsets(top: 0, left: CGFloat.max, bottom: 0, right: 0) // cf. http://stackoverflow.com/questions/8561774/hide-separator-line-on-one-uitableviewcell
             return cell
+        } else if isTopCell(indexPath) {
+            return topCells[indexPath.row]
         } else {
             let cell = tableView.dequeueReusableCellWithIdentifier(mainCellIdentifier, forIndexPath: indexPath)
             return configureCellClosure(cell: cell, row: indexPath.row - topCells.count)

    private var hidesFooter = false
    private var mainCellCount = 0
    private var allCellCount: Int {
        return topCells.count + mainCellCount + (hidesFooter ? 0 : 1)
    }

    public var configureCellClosure: (cell: UITableViewCell, row: Int) -> UITableViewCell = { cell, row in return cell }


    // MARK: - TableViewDataSource

    public override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 2
    }

    public override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if section == 0 {
            return allCellCount
        } else {
            return (hidesFooter ? 0 : 1)
        }
    }

    public override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
