     }
     
     func indexPathForPreviousResponderInSectionIndex(sectionIndex: Int, currentSection: TableViewSection, currentItem: TableViewItem) -> NSIndexPath? {
-        if let _ = self.dataSource, let section = self.sectionAtIndexPath(NSIndexPath(forRow: 0, inSection: sectionIndex)) {
-            let items = section.items as NSArray
-            let indexInSection = section === currentSection ? items.indexOfObject(currentItem) : section.items.count
-            for (var i = indexInSection - 1; i >= 0; i--) {
-                let item = section.items[i]
-                if item.dynamicType.focusable() {
-                    return NSIndexPath(forRow: i, inSection: sectionIndex)
-                }
+        guard let _ = self.dataSource, let section = self.sectionAtIndexPath(NSIndexPath(forRow: 0, inSection: sectionIndex)) else {
+            return nil
+        }
+        let items = section.items as NSArray
+        let indexInSection = section === currentSection ? items.indexOfObject(currentItem) : section.items.count
+        for (var i = indexInSection - 1; i >= 0; i--) {
+            let item = section.items[i]
+            if item.dynamicType.focusable() {
+                return NSIndexPath(forRow: i, inSection: sectionIndex)
             }
         }
         return nil
     }
     
     func indexPathForNextResponderInSectionIndex(sectionIndex: Int, currentSection: TableViewSection, currentItem: TableViewItem) -> NSIndexPath? {
-        if let _ = self.dataSource, let section = self.sectionAtIndexPath(NSIndexPath(forRow: 0, inSection: sectionIndex)) {
-            let items = section.items as NSArray
-            let indexInSection = section === currentSection ? items.indexOfObject(currentItem) : -1
-            for (var i = indexInSection + 1; i < section.items.count; i++) {
-                let item = section.items[i]
-                if item.dynamicType.focusable() {
-                    return NSIndexPath(forRow: i, inSection: sectionIndex)
-                }
+        guard let _ = self.dataSource, let section = self.sectionAtIndexPath(NSIndexPath(forRow: 0, inSection: sectionIndex)) else {
+            return nil
+        }
+        let items = section.items as NSArray
+        let indexInSection = section === currentSection ? items.indexOfObject(currentItem) : -1
+        for (var i = indexInSection + 1; i < section.items.count; i++) {
+            let item = section.items[i]
+            if item.dynamicType.focusable() {
+                return NSIndexPath(forRow: i, inSection: sectionIndex)
             }
         }
         return nil

    // Allows the reorder accessory view to optionally be shown for a particular row. By default, the reorder control will be shown only if the datasource implements -tableView:moveRowAtIndexPath:toIndexPath:
    //
    func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        if let item = self.itemAtIndexPath(indexPath) {
            return item.moveHandler != nil
        }
        return false
    }
    
    // Index

    // Data manipulation - reorder / moving support
    
    func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
        guard let sourceSection = self.sectionAtIndexPath(sourceIndexPath), let item = self.itemAtIndexPath(sourceIndexPath), let destinationSection = self.sectionAtIndexPath(destinationIndexPath) else {
            return
        }
        sourceSection.items.removeAtIndex(sourceIndexPath.row)
        destinationSection.items.insert(item, atIndex: destinationIndexPath.row)
        
        if let moveCompletionHandler = item.moveCompletionHandler {
            moveCompletionHandler(section: destinationSection, item: item, tableView: tableView, sourceIndexPath: sourceIndexPath, destinationIndexPath: destinationIndexPath)
        }
    }

