     /// Returns a reusable header or footer view located by its identifier.
     public func dequeueReusableHeaderFooterView(withIdentifier identifier: String) -> UITableViewHeaderFooterView? {
         
-        if let existingView = _dequeueReusableCell(withIdentifier: identifier) {
+        if let existingView = dequeue(with: identifier, cache: &cache.headerFooters) {
             
             return existingView
             

            
        } else {
            
            return nil
        }
    }
    
    private func _dequeueReusableCell(withIdentifier identifier: String) -> UITableViewHeaderFooterView? {
        
        guard let existingViewIndex = cache.headerFooters.index(where: { $0.reuseIdentifier == identifier })
            else { return nil }
        
        // get cell
        let view = cache.headerFooters[existingViewIndex]
        
        // prepare UI
        view.prepareForReuse()
        
        // remove from cache
        cache.headerFooters.remove(at: existingViewIndex)
        
        return view
    }
    
    // MARK: - Private
    

    /// or nil if no such object exists in the reusable-cell queue.
    public func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell? {
        
        return dequeue(with: identifier, cache: &cache.cells)
    }
    
    /// Returns a reusable table-view cell object for the specified reuse identifier and adds it to the table.
