 			articleDictionaryNeedsUpdate = true
 		}
 	}
+	
+	@Published var timelineItems = [TimelineItem]() {
+		didSet {
+			timelineItemDictionaryNeedsUpdate = true
+		}
+	}
 
 	var undoManager: UndoManager?
 	var undoableCommands = [UndoableCommand]()

			guard let self = self, let articleIDs = note.userInfo?[Account.UserInfoKey.articleIDs] as? Set<String> else {
				return
			}
			for i in 0..<self.timelineItems.count {
				if articleIDs.contains(self.timelineItems[i].article.articleID) {
					self.timelineItems[i].updateStatus()
				}
			}
		}.store(in: &cancellables)

		return _idToArticleDictionary
	}

	private var timelineItemDictionaryNeedsUpdate = true
	private var _idToTimelineItemDictionary = [String: Int]()
	private var idToTimelineItemDictionary: [String: Int] {
		if timelineItemDictionaryNeedsUpdate {
			rebuildTimelineItemDictionaries()
		}
		return _idToTimelineItemDictionary
	}

	private var sortDirection = AppDefaults.shared.timelineSortDirection {
		didSet {
			if sortDirection != oldValue {
