         if case .RowWithHandler(_, let handler) = section[indexPath.row] {
             handler(self)
         }
+        else if case .RowWithHandler2(_, let handler) = section[indexPath.row] {
+            let rect = tableView.rectForRowAtIndexPath(indexPath)
+            let newRect = view.convertRect(rect, toView: view)
+            let maxX = CGRectGetMaxX(newRect)
+            let midY = CGRectGetMidY(newRect)
+            handler(self, CGPoint(x: maxX - 70, y: midY + 10))
+        }
     }
 }
    }

    public func prepareCell(cell: C) -> C {
        cell.textLabel?.text = self.title
        cell.detailTextLabel?.text = self.detail

        if case .Custom(_, let callback) = self {
            return callback(cell)
        }
        else if case .RowWithSetup(let row, let callback) = self {
            return row.prepareCell(callback(cell))
        }
        else if case .RowWithHandler(let row, _) = self {
            return row.prepareCell(cell)
        }
        return cell
    }

    public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let section = Container.sections[indexPath.section]
        let row = section.rows[indexPath.row]
        let cell = tableView.dequeueReusableCellWithIdentifier(row.type.identifier, forIndexPath: indexPath)
        return row.prepareCell(cell)
    }

    public func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
