   }
 
   func join(_ sender: Any) {
-    guard let eventID = eventID else { return }
-    AKFCausesService.joinEvent(fbid: Facebook.id, eventID: eventID) { (result) in
-      switch result {
-      case .failed(let error):
-        print("unable to join event: \(String (describing: error?.localizedDescription))")
-        break
-      case .success(_, _):
-        break
-      }
-    }
+    guard
+      let event = event,
+      let delegate = delegate
+    else { return }
+
+    delegate.join(event: event)
   }
 }
 
 extension EventCell: ConfigurableUITableViewCell {
   func configure(_ data: Any) {
-    guard let event = data as? Event else { return }
+    guard
+      let (event, delegate) = data as? (Event, EventCellDelegate)
+    else { return }
 
     if let url = event.image {
       // TODO(compnerd) asynchronously load and display the image

    configureTableView(&top)
  }
}

  internal var lblTime: UILabel = UILabel()
  internal var btnJoin: UIButton = UIButton(type: .system)

  internal var event: Event?
  internal weak var delegate: EventCellDelegate?

  override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
