     // MARK: - Functions
     
     private func loopedPageForPage(page: Int) -> Int {
-        var loopedPage = page
-        if page > pageCount - 1 {
-            loopedPage = 0
-        } else if page < 0 {
-            loopedPage = pageCount - 1
-        }
-        return loopedPage
+        return page < 0 || pageCount == 0 ? pageCount + page : page % pageCount
+    }
+    
+    func pageForIndexPath(indexPath: NSIndexPath) -> Int {
+        var page = indexPath.row
+        if shouldLoop {
+            page -= 1
+            page = loopedPageForPage(page)
+        }
+        return page
     }
     
     // MARK: - UIViewController

    override func collectionView(collectionView: UICollectionView,
                                 numberOfItemsInSection section: Int) -> Int
    {
        return loopedCellIdentifiers?.count ?? 0
    }
    
    override func collectionView(collectionView: UICollectionView,
                                 cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
    {
        let reuseIdentifier = loopedCellIdentifiers![indexPath.row]
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath)
        return cell
    }
    
}

        return plistDict?[Key.cellIdentifiers] as? [String] ?? ibCellIdentifiers
    }
    
    private struct Key {
        static let cellIdentifiers = "cellIdentifiers"
    }
    
    private var ibCellIdentifiers: [String] {
        return [cell0Identifier,
            cell1Identifier,
