                 return cell
             }
 
-        case Section.LoadMore.rawValue:
+        case .LoadMore:
             let cell = collectionView.dequeueReusableCellWithReuseIdentifier(loadMoreCollectionViewCellID, forIndexPath: indexPath) as! LoadMoreCollectionViewCell
             return cell
-
-        default:
-            return UICollectionViewCell()
         }
     }
     
     func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
 
-        switch indexPath.section {
-
-        case Section.User.rawValue:
+        guard let section = Section(rawValue: indexPath.section) else {
+            fatalError()
+        }
+
+        switch section {
+
+        case .User:
 
             let discoveredUser = discoveredUsers[indexPath.row]
 

                    cell?.loadingActivityIndicator.stopAnimating()
                })
            }

        default:
            break
        }
    }

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

        switch indexPath.section {

        case Section.User.rawValue:

            switch layoutMode {



    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        guard let section = Section(rawValue: section) else {
            fatalError()
        }

        switch section {

        case .User:
            return discoveredUsers.count

        case .LoadMore:
            return discoveredUsers.isEmpty ? 0 : 1
        }
    }
    
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        guard let section = Section(rawValue: indexPath.section) else {
            fatalError()
        }

        switch section {

        case .User:

            switch layoutMode {

