     }
 
     // MARK: Private
+
+    private func refreshEventProperties() {
+        refreshRunningEvents()
+        refreshUpcomingEvents()
+
+        updateObserversWithLatestScheduleInformation()
+    }
+
+    private func refreshRunningEvents() {
+        let now = clock.currentDate
+        runningEvents = eventModels.filter { (event) -> Bool in
+            return DateInterval(start: event.startDate, end: event.endDate).contains(now)
+        }
+    }
+
+    private func refreshUpcomingEvents() {
+        let now = clock.currentDate
+        let range = DateInterval(start: now, end: now.addingTimeInterval(timeIntervalForUpcomingEventsSinceNow))
+        upcomingEvents = eventModels.filter { (event) -> Bool in
+            return event.startDate > now && range.contains(event.startDate)
+        }
+    }
 
     private func updateObserversWithLatestScheduleInformation() {
         observers.forEach(provideScheduleInformation)

    private(set) var tracks = [TrackCharacteristics]()
    private(set) var days = [ConferenceDayCharacteristics]()

    private(set) var eventModels = [Event]() {
        didSet {
            updateObserversWithLatestScheduleInformation()
        }
    }


            }

            provideFavouritesInformationToObservers()
        }
    }

