     // Indentation
 
     func tableView(tableView: UITableView, indentationLevelForRowAtIndexPath indexPath: NSIndexPath) -> Int {
-        if let item = self.itemAtIndexPath(indexPath) {
-            return item.indentationLevel
-        }
-        return 0
+        guard let item = self.itemAtIndexPath(indexPath) else {
+            return 0
+        }
+        return item.indentationLevel
     }
     
     // Cut / Copy / Paste.  All three methods must be implemented by the delegate.

    
    func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection index: Int) {
        let indexPath = NSIndexPath(forRow: 0, inSection: index)
        if let section = self.sectionAtIndexPath(indexPath), let headerDisplayHandler = section.headerDisplayHandler {
            headerDisplayHandler(section: section, tableView: tableView, indexPath: indexPath, view: view, status: .WillDisplay)
        }
    }
    
    func tableView(tableView: UITableView, willDisplayFooterView view: UIView, forSection index: Int) {
        let indexPath = NSIndexPath(forRow: 0, inSection: index)
        if let section = self.sectionAtIndexPath(indexPath), let footerDisplayHandler = section.footerDisplayHandler {
            footerDisplayHandler(section: section, tableView: tableView, indexPath: indexPath, view: view, status: .WillDisplay)
        }
    }
    
    func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        if let section = self.sectionAtIndexPath(indexPath), let item = self.itemAtIndexPath(indexPath), let displayHandler = item.displayHandler {
            displayHandler(section: section, item: item, tableView: tableView, indexPath: indexPath, tableViewCell: cell as! TableViewCell, status: .DidEndDisplaying)
        }
    }
    
    func tableView(tableView: UITableView, didEndDisplayingHeaderView view: UIView, forSection index: Int) {
        let indexPath = NSIndexPath(forRow: 0, inSection: index)
        if let section = self.sectionAtIndexPath(indexPath), let footerDisplayHandler = section.footerDisplayHandler {
            footerDisplayHandler(section: section, tableView: tableView, indexPath: indexPath, view: view, status: .DidEndDisplaying)
        }
    }
    
    func tableView(tableView: UITableView, didEndDisplayingFooterView view: UIView, forSection index: Int) {
        let indexPath = NSIndexPath(forRow: 0, inSection: index)
        if let section = self.sectionAtIndexPath(indexPath), let footerDisplayHandler = section.footerDisplayHandler {
            footerDisplayHandler(section: section, tableView: tableView, indexPath: indexPath, view: view, status: .DidEndDisplaying)
        }
    }
    
    // Variable height support
    
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if let item = self.itemAtIndexPath(indexPath) {
            return CGFloat(TableViewCell.heightWithItem(item, tableView: tableView, indexPath: indexPath))
        }
        return UITableViewAutomaticDimension
    }
    
    func tableView(tableView: UITableView, heightForHeaderInSection index: Int) -> CGFloat {
        if let section = self.sectionAtIndexPath(NSIndexPath(forRow: 0, inSection: index)), let headerView = section.headerView {
            return headerView.frame.height
        }
        return UITableViewAutomaticDimension
    }
    
    func tableView(tableView: UITableView, heightForFooterInSection index: Int) -> CGFloat {
        if let section = self.sectionAtIndexPath(NSIndexPath(forRow: 0, inSection: index)), let footerView = section.footerView {
            return footerView.frame.height
        }
        return UITableViewAutomaticDimension
    }
    
    // Use the estimatedHeight methods to quickly calcuate guessed values which will allow for fast load times of the table.
    // If these methods are implemented, the above -tableView:heightForXXX calls will be deferred until views are ready to be displayed, so more expensive logic can be placed there.
    //
    func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if let item = self.itemAtIndexPath(indexPath) {
            return CGFloat(TableViewCell.estimatedHeightWithItem(item, tableView: tableView, indexPath: indexPath))
        }
        return UITableViewAutomaticDimension
    }
    
    // Section header & footer information. Views are preferred over title should you decide to provide both

    }
    
    func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
        guard let section = self.sectionAtIndexPath(indexPath), let item = self.itemAtIndexPath(indexPath), let deselectionHandler = item.deselectionHandler else {
            return
        }
        deselectionHandler(section: section, item: item, tableView: tableView, indexPath: indexPath)
    }
    
    // Editing
