         let item = self.item(for: indexPath)
         let cell = collectionView.dequeueReusableCell(withReuseIdentifier: item.controller.computedViewIdentifier, for: indexPath) as! ItemViewCell
         cell.nestedView = item.controller.view(forItem: item, reusingView: cell.nestedView)
-        let component = self.itemCompontent(for: indexPath, with: cell)
+        let component = self.itemComponent(for: indexPath, with: cell)
         component.attach()
         return cell
     }
 
     public func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
-        let component = self.itemCompontent(for: indexPath, with: cell)
+        let component = self.itemComponent(for: indexPath, with: cell)
         component.detach()
     }
 


    public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let cell = collectionView.cellForItem(at: indexPath)!
        let component = self.itemCompontent(for: indexPath, with: cell)
        self.didSelectComponent(component)
    }


        guard let indexPath = self.itemIndexPaths[index] else {
            return nil
        }
        return self.itemComponent(for: indexPath)
    }

    public func component(for index: SupplementaryIndex) -> Component? {
        guard let indexPath = self.supplementaryIndexPaths[index] else {
            return nil
        }
        return self.supplementaryComponent(of: index.kind, for: indexPath)
    }

    // MARK: Internal

    private func itemComponent(for indexPath: IndexPath) -> Component? {
        guard let cell = self.collectionView.cellForItem(at: indexPath) else {
            return nil
        }
        return self.itemComponent(for: indexPath, with: cell)
    }

    private func supplementaryComponent(of kind: SupplementaryIndex.Kind, for indexPath: IndexPath) -> Component? {
        // Uhh?
        let view = self.collectionView.supplementaryView(forElementKind: kind.collectionViewKind, at: indexPath)
        return self.supplementaryComponent(of: kind, inSection: indexPath.section, with: view!)
    }

    private func itemComponent(for indexPath: IndexPath, with cell: UICollectionViewCell) -> Component {
        let item = self.item(for: indexPath)
        let itemCell = cell as! ItemViewCell
        return Component(item: item, itemViewCell: itemCell)
    }

    private func supplementaryComponent(ofCollectionViewKind elementKind: String, inSection section: Int, with view: UICollectionReusableView) -> Component? {
        guard let kind = GridCollectionController.SupplementaryIndex.Kind.kind(forCollectionViewKind: elementKind) else {
            return nil
        }
        return supplementaryComponent(of: kind, inSection: section, with: view)
    }

    private func supplementaryComponent(of kind: SupplementaryIndex.Kind, inSection section: Int, with view: UICollectionReusableView) -> Component? {
        guard let supplementary = self.supplementary(of: kind, inSection: section) else {
            return nil
        }
