         var thumbnailUpdatedIndexPaths = [IndexPath]()
         
         // notify changes of assets
-        for (section, albums) in sortedAlbumsArray.enumerated() {
-            for (row, album) in albums.enumerated() {
+        for (section, albums) in fetchedAlbumsArray.enumerated() {
+            
+            // remove unqualified albums
+            var indexPathsToRemove = [IndexPath]()
+            var albumsToRemove = [PHAssetCollection]()
+            
+            for (_, album) in albums.enumerated() {
                 log("Looping album: \(album.localizedTitle ?? "")")
                 guard let fetchResult = fetchMapBeforeChanges[album.localIdentifier], let assetsChangeDetails = changeInstance.changeDetails(for: fetchResult) else {
                     continue

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

        var fetchedAlbums = [PHAssetCollection]()
        
        albumFetchResult.enumerateObjects({ (album, _, _) in
            // set default album
            if album.assetCollectionSubtype == self.pickerConfig.albumDefaultType {
                self.defaultAlbum = album
