         self.collectionView!.showsHorizontalScrollIndicator = false
         self.collectionView!.showsVerticalScrollIndicator = false
         
-        PHPhotoLibrary.sharedPhotoLibrary().registerChangeObserver(self)
-        
-        dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), { () -> Void in
-            if let fetchedAssetCollection = PHAssetCollection.fetchAssetCollectionsWithType(.SmartAlbum, subtype: .SmartAlbumRecentlyAdded, options: nil)?.lastObject as? PHAssetCollection {
-                let fetchOptions = PHFetchOptions()
-                fetchOptions.predicate = NSPredicate(format: "SELF.mediaType = %d", PHAssetMediaType.Image.rawValue)
-                fetchOptions.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: false) ]
-                self.assetsFetchResults = PHAsset.fetchAssetsInAssetCollection(fetchedAssetCollection, options: fetchOptions)
-            }
-            
-            dispatch_async(dispatch_get_main_queue(), { () -> Void in
-                if self.assetsFetchResults != nil {
-                    self.collectionView!.reloadSections(NSIndexSet(index: self.recentPhotosSection))
-                }
-            })
-        })
+        self.loadFetchResults()
         
         let cellMaxWidth = self.preferredContentSize.width - collectionViewFlowLayout.sectionInset.left - collectionViewFlowLayout.sectionInset.right
         let cellHeight = self.preferredContentSize.height - collectionViewFlowLayout.sectionInset.top - collectionViewFlowLayout.sectionInset.bottom

    var delegate: RecentPhotosCollectionViewControllerDelegate?
    
    private var selectedAssets: [PHAsset] {
        return (self.collectionView?.indexPathsForSelectedItems() as? [NSIndexPath])?.map({ self.assetsFetchResults[$0.item] as! PHAsset }) ?? []
    }
    
    private var assetsFetchResults: PHFetchResult!
    private let maxFetchResultsCount = 70
    private let imageManager = PHCachingImageManager()
    private var cachingImageThumbnailSize = CGSizeZero

        if self.collectionView != nil && self.assetsFetchResults?.count > 0 {
            let imageRequestOptions = PHImageRequestOptions()
            
            if let assets = self.assetsFetchResults?.objectsAtIndexes(NSIndexSet(indexesInRange: NSRange(location: 0, length: min(self.assetsFetchResults?.count ?? 0, self.maxFetchResultsCount)))) as? Array<PHAsset> {
                self.imageManager.startCachingImagesForAssets(assets, targetSize: self.cachingImageThumbnailSize, contentMode: .AspectFit, options: imageRequestOptions)
            }
        }
