         return true
     }
     
-    public func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
-        return configuration.shouldSelectItemAtIndexPath(indexPath)
+    public func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
+        if let _ = configuration.sectionFooter() {
+            return UITableView.automaticDimension
+        } else {
+            return 0
+        }
     }
-        
+
+    public func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
+        let footer = configuration.sectionFooter()
+        if let footer = footer, tableView.separatorStyle == .singleLine {
+            let separatorName = "SelectableTableViewDataSource.Separator"
+            if let sep = footer.layer.sublayers?.first(where: { $0.name == separatorName }) {
+                sep.removeFromSuperlayer()
+            }
+            // create layer with separator, setting color
+            let sep = CALayer()
+            sep.name = separatorName
+            sep.backgroundColor = tableView.separatorColor?.cgColor
+            sep.frame = {
+                // recreate insets from existing ones in the table view
+                let insets = tableView.separatorInset
+                let width = tableView.bounds.width - insets.left - insets.right
+                return CGRect(x: insets.left, y: -0.5, width: width, height: 0.5)
+            }()
+            footer.layer.addSublayer(sep)
+        }
+        return footer
+    }
+    
     //MARK: UITableViewDelegate
         
     public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    public struct Configuration {
        let shouldSelectItemAtIndexPath: (IndexPath) -> Bool
        let didSelectItemAtIndexPath: (IndexPath) -> ()

        public init(shouldSelectItemAtIndexPath: @escaping (IndexPath) -> Bool = { _ in return true }, didSelectItemAtIndexPath: @escaping (IndexPath) -> () = { _ in }) {
            self.shouldSelectItemAtIndexPath = shouldSelectItemAtIndexPath
            self.didSelectItemAtIndexPath = didSelectItemAtIndexPath
        }
    }
    

        tableView.reloadData()
    }

    //MARK: UITableViewDataSource

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataStore.options.count
    }
    
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: Cell = tableView.dequeueReusableCell(indexPath: indexPath)
