 				checkHomePageURL()
 			}
 		}
-
+		
+		if let feedProviderURL = feedURLToIconURLCache[feed.url] {
+			self.icon(forURL: feedProviderURL, feed: feed) { (image) in
+				if let image = image {
+					self.postFeedIconDidBecomeAvailableNotification(feed)
+					self.cache[feed] = IconImage(image)
+				}
+			}
+			return nil
+		}
+		
 		if let components = URLComponents(string: feed.url), let feedProvider = ExtensionPointManager.shared.bestFeedProvider(for: components, with: nil) {
 			feedProvider.iconURL(components) { result in
-				if case .success(let url) = result {
-					self.icon(forURL: url, feed: feed) { (image) in
+				switch result {
+				case .success(let feedProviderURL):
+					self.feedURLToIconURLCache[feed.url] = feedProviderURL
+					self.feedURLToIconURLCacheDirty = true
+					self.icon(forURL: feedProviderURL, feed: feed) { (image) in
 						if let image = image {
 							self.postFeedIconDidBecomeAvailableNotification(feed)
 							self.cache[feed] = IconImage(image)
-						} else {
-							checkFeedIconURL()
 						}
 					}
+				case .failure:
+					checkFeedIconURL()
 				}
 			}
 		} else {

		WebFeedIconDownloader.saveQueue.add(self, #selector(saveHomePagesWithNoIconURLCacheIfNeeded))
	}

	func saveHomePageToIconURLCache() {
		homePageToIconURLCacheDirty = false


		homePagesWithNoIconURLCache = Set(decoded)
	}

	func queueSaveFeedURLToIconURLCacheIfNeeded() {
		WebFeedIconDownloader.saveQueue.add(self, #selector(saveFeedURLToIconURLCacheIfNeeded))
	}

	func queueSaveHomePageToIconURLCacheIfNeeded() {
		WebFeedIconDownloader.saveQueue.add(self, #selector(saveHomePageToIconURLCacheIfNeeded))
	}
