     }
     
     open func indexPath(forAlbum target: PHAssetCollection) -> IndexPath? {
-        var typeIndex: Int = -1
-        var subtypeIndex: Int = -1
+        var section: Int = -1
+        var row: Int = -1
         for (i, albums) in sortedAlbumsArray.enumerated() {
             if let collectionType = albums.first?.assetCollectionType, collectionType == target.assetCollectionType {
-                typeIndex = i
+                section = i
             } else {
                 continue
             }
-            for (j, album) in albums.enumerated() {
-                subtypeIndex = j
-                if target.localIdentifier == album.localIdentifier {
-                    break
-                }
-            }
-        }
-        if typeIndex > -1 && subtypeIndex > -1 {
-            return IndexPath(row: subtypeIndex, section: typeIndex)
+            if let j = albums.index(of: target) {
+                row = j
+                break
+            }
+        }
+        if section > -1 && row > -1 {
+            return IndexPath(row: row, section: section)
         } else {
             logw("Failed to find indexPath for album: \(target.localizedTitle ?? "")")
             return nil

                
                // check thumbnail
                if isThumbnailChanged(changeDetails: assetsChangeDetails) {
                    thumbnailUpdatedIndexPaths.append(IndexPath(row: row, section: section))
                }
                
                // update fetch result for each album
                fetchMap[album.localIdentifier] = assetsChangeDetails.fetchResultAfterChanges
                
                // reload if hasIncrementalChanges is false
                guard assetsChangeDetails.hasIncrementalChanges else {
                    for subscriber in subscribers {
                        if let indexPathForAlbum = indexPath(forAlbum: album) {
                            subscriber.assetsManager(manager: self, reloadedAlbum: album, at: indexPathForAlbum)
                        } else {
                            logw("Failed to find indexPath for album: \(album.localizedTitle ?? "")")
                        }
                    }
                    continue

                }
                
                // get renewed array
                let newSortedAlbums = sortedAlbums(fromAlbums: fetchedAlbumsArray[section])
             
                // find removed indexPaths
                var removedIndexPaths = [IndexPath]()
                var removedAlbums = [PHAssetCollection]()
                for (i, oldSortedAlbum) in oldSortedAlbums.enumerated().reversed() {
                    guard newSortedAlbums.contains(oldSortedAlbum) else {
                        removedAlbums.append(oldSortedAlbum)
                        removedIndexPaths.append(IndexPath(row: i, section: section))
                        oldSortedAlbums.remove(at: i)
