             deleteTileForSuggestedSite(site as! SuggestedSite)
         }
 
-        profile.history.removeSiteFromTopSites(site).uponQueue(dispatch_get_main_queue()) { _ in
+        profile.history.removeSiteFromTopSites(site).uponQueue(dispatch_get_main_queue()) { result in
+            guard result.isSuccess else { return }
+
             // Remove the site from the current data source. Don't requery yet
             // since a Sync or location change may have changed the data under us.
             self.dataSource.sites = self.dataSource.sites.filter { $0 !== site }

        sites += suggestedSites as [Site]
    }

    // Flags the next set of sites to do a replace, not a merge.
    func invalidateSites() {
        sitesInvalidated = true
    }

    subscript(index: Int) -> Site? {
        if count() == 0 {
            return nil

    }

    private func refreshTopSites(frecencyLimit: Int) {
        dispatch_async(dispatch_get_main_queue()) {
            // Don't allow Sync or other notifications to change the data source if we're deleting a thumbnail.
            if !(self.collection?.userInteractionEnabled ?? true) {
                return
            }

            // Reload right away with whatever is in the cache, then check to see if the cache is invalid.
            // If it's invalid, invalidate the cache and requery. This allows us to always show results
            // immediately while also loading up-to-date results asynchronously if needed.
            self.reloadTopSitesWithLimit(frecencyLimit) >>> {
                self.profile.history.updateTopSitesCacheIfInvalidated() >>== { dirty in
                    if dirty {
                        self.dataSource.sitesInvalidated = true
                        self.reloadTopSitesWithLimit(frecencyLimit)
                    }
                }
            }
        }
