     }
 
     public func visibleItemComponents() -> [Component] {
-        return self.collectionView.indexPathsForVisibleItems().map({ self.itemCompontentForIndexPath($0)! })
+        return self.collectionView.indexPathsForVisibleItems().map({ self.itemComponentForIndexPath($0)! })
     }
 
     public func visibleSupplementaryComponentsForKind(kind: SupplementaryIndex.Kind) -> [Component] {
         return self.collectionView.indexPathsForVisibleSupplementaryElementsOfKind(kind.collectionViewKind).map({
-            self.supplementaryCompontentOfKind(kind, forIndexPath: $0)
+            self.supplementaryComponentOfKind(kind, forIndexPath: $0)
         }).flatMap({ $0 })
     }
 

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

    public func componentForSupplementaryIndex(index: SupplementaryIndex) -> Component? {
        guard let indexPath = self.supplementaryIndexPaths[index] else {
            return nil
        }
        return self.supplementaryCompontentOfKind(index.kind, forIndexPath: indexPath)
    }

    // MARK: Internal

    private func itemCompontentForIndexPath(indexPath: NSIndexPath) -> Component? {
        guard let cell = self.collectionView.cellForItemAtIndexPath(indexPath) else {
            return nil
        }
        return self.itemCompontentForIndexPath(indexPath, cell: cell)
    }

    private func supplementaryCompontentOfKind(kind: SupplementaryIndex.Kind, forIndexPath indexPath: NSIndexPath) -> Component? {
        // Uhh?
        let view = self.collectionView.supplementaryViewForElementKind(kind.collectionViewKind, atIndexPath: indexPath)
        return self.supplementaryCompontentOfKind(kind, forSection: indexPath.section, view: view)
    }

    private func itemCompontentForIndexPath(indexPath: NSIndexPath, cell: UICollectionViewCell) -> Component {
        let item = self.itemForIndexPath(indexPath)
        let itemCell = cell as! ItemViewCell
        return Component(item: item, itemViewCell: itemCell)
    }

    private func supplementaryCompontentOfCollectionViewKind(elementKind: String, forSection section: Int, view: UICollectionReusableView) -> Component? {
        guard let kind = GridCollectionController.SupplementaryIndex.Kind.kindForCollectionViewKind(elementKind) else {
            return nil
        }
        return supplementaryCompontentOfKind(kind, forSection: section, view: view)
    }

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


    public func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        let cell = collectionView.cellForItemAtIndexPath(indexPath)!
        let component = self.itemComponentForIndexPath(indexPath, cell: cell)
        self.didSelectComponent(component)
    }

