 		})
 	}
 
-	private static func filterValidAnnouncements(_ time: Date, _ announcements: [Announcement]) -> [Announcement] {
-		return announcements.filter({$0.ValidFromDateTimeUtc < time && $0.ValidUntilDateTimeUtc > time})
+	private func filterValidAnnouncements(_ time: Date, _ announcements: [Announcement]) -> [Announcement] {
+		return announcements.filter({$0.ValidFromDateTimeUtc < time && $0.ValidUntilDateTimeUtc > time && (self.isShowAll || !$0.IsRead)})
 	}
 
 	deinit {

	private var disposable = CompositeDisposable()
	private let scheduler = QueueScheduler(qos: .background, name: "org.eurofurence.app.AnnouncementsViewModelScheduler")

	init(dataContext: DataContextProtocol, lastSyncDateProvider: LastSyncDateProviding) {
		self.dataContext = dataContext
		self.lastSyncDateProvider = lastSyncDateProvider
		Announcements.swap(AnnouncementsViewModel.filterValidAnnouncements(timeService.currentTime.value, dataContext.Announcements.value))

		timedAnnouncementsSignal = Signal.combineLatest(timeService.currentTime.signal, dataContext.Announcements.signal).observe(on: scheduler)

		disposable += Announcements <~ timedAnnouncementsSignal.map(AnnouncementsViewModel.filterValidAnnouncements).skipRepeats({ $0.count == $1.count && $0.starts(with: $1)})

		disposable += TimeSinceLastSync <~ timeService.currentTime.signal.map({ [unowned self] currentTime in
			if let lastSyncDate = self.lastSyncDateProvider.lastSyncDate {

//

import Foundation
import Changeset
import ReactiveSwift
import Result

class AnnouncementsViewModel {
	let Announcements = MutableProperty<[Announcement]>([])
	let AnnouncementsEdits = MutableProperty<[Edit<Announcement>]>([])
	let TimeSinceLastSync = MutableProperty<TimeInterval>(-1.0)
	private let dataContext: DataContextProtocol
	private let lastSyncDateProvider: LastSyncDateProviding
