 	
 	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

		}
		
		resetReadFilter()
		fetchAndReplaceArticlesAsync()
	}
	
	func toggleReadFilter() {
		guard let filter = isReadFiltered, let feedID = feeds.first?.feedID else { return }
		readFilterEnabledTable[feedID] = !filter
		isReadFiltered = !filter
		rebuildTimelineItems()
	}
	
	func toggleReadStatusForSelectedArticles() {
