 extension TableViewModelController {
     
     open override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        guard
-            let cell = tableView.cellForRow(at: indexPath),
-            let tableViewModelCell = cell as? TableViewModelCell
-        else { return }
-        
+        guard let cell = tableView.cellForRow(at: indexPath) as? UITableViewCell & TableViewModelCell else {
+            return
+        }
         if cell.selectionStyle != .none {
-            tableViewModelCell.action(cell)
+            delegate?.performAction(for: cell, at: indexPath, sender: self)
         }
     }
     

    }
    
    // MARK: Lifecycle
    
    open override func viewDidLoad() {
        super.viewDidLoad()

        reload()
    }

    // MARK: Helpers

    
    private func registerCell(with identifier: String) {
        guard let delegate = delegate else {
            fatalError("Delegate must be provided by now.")
        }
        switch delegate.cell(forIdentifier: identifier) {
        case .basic:
