   private weak var tableView: UITableView!
   private var nibs = [String: UINib]()
   private var dataSource: ObjectsDataSource<ObjectType>!
-  private var instances = [String: UITableViewCell]()
+  private var cellInstances = [String: UITableViewCell]()
+  private var headerFooterInstances = [String: UITableViewHeaderFooterView]()
   private var identifiersForIndexPaths = [NSIndexPath: String]()
   private var mappings: [String: (ObjectType, UITableViewCell, NSIndexPath) -> Void] = [:]
   

    }.putInto(pool)
  }
  
  public func registerCellClass<U: ObjectConsuming where U.ObjectType == ObjectType>(cellClass: U.Type) {
    let identifier = String(cellClass)
    let nib = UINib(nibName: identifier, bundle: nil)
    tableView.registerNib(nib, forCellReuseIdentifier: identifier)
    instances[identifier] = nib.instantiateWithOwner(self, options: nil).last as? UITableViewCell
    
    mappings[identifier] = { object, cell, _ in
      if let consumer = cell as? U { consumer.applyObject(object) }

    didEndDisplayingCellSignal.sendNext((cell, indexPath))
  }
  
}
