 	
 	func replaceArticles(with unsortedArticles: Set<Article>) {
 		articles = Array(unsortedArticles).sortedByDate(sortDirection ? .orderedDescending : .orderedAscending, groupByFeed: groupByFeed)
-		rebuildTimelineItems(isReadFiltered: isReadFiltered)
+		rebuildTimelineItems()
 		// TODO: Update unread counts and other item done in didSet on AppKit
 	}
 	
-	func rebuildTimelineItems(isReadFiltered: Bool?) {
+	func rebuildTimelineItems() {
 		let filtered = isReadFiltered ?? false
 		let selectedArticleIDs = selectedArticles.map { $0.articleID }
 

		// if it’s been superseded by a newer fetch, or the timeline was emptied, etc., it won’t get called.
		precondition(Thread.isMainThread)
		cancelPendingAsyncFetches()
		let filtered = isReadFiltered ?? false

		let fetchOperation = FetchRequestOperation(id: fetchSerialNumber, readFilter: filtered, representedObjects: representedObjects) { [weak self] (articles, operation) in
			precondition(Thread.isMainThread)
			guard !operation.isCanceled, let strongSelf = self, operation.id == strongSelf.fetchSerialNumber else {
				return

	
	// MARK: Article Fetching
	
	func fetchAndReplaceArticlesAsync() {
		var fetchers = feeds as [ArticleFetcher]
		if let fetcher = exceptionArticleFetcher {
			fetchers.append(fetcher)
