             return timeString(forDate: openingTime)
         }
 
-        if let tomorrowOpenHours = hours[dayOfWeek.nextWeekday()]?.openTime,
-            let tomorrowOpeningTime = date(forTime: tomorrowOpenHours, onDate: time.addingTimeInterval(AppConstants.ONE_DAY)) {
+        if let tomorrowOpeningTime = getOpeningTime(forDate: time.addingTimeInterval(AppConstants.ONE_DAY)) {
             return timeString(forDate: tomorrowOpeningTime)
         }
         return nil
     }
 
     func closingTime(forTime time: Date) -> String? {
-        guard let closeTime = hours[DayOfWeek.forDate(time)]?.closeTime,
-            let closingTime = date(forTime: closeTime, onDate: time) else {
+        guard let closingTime = getClosingTime(forDate: time) else {
                 return nil
         }
         return timeString(forDate: closingTime)

        return OpenHours.calendar.dateComponents(timeComponentsSet, from: dateFromTime)
    }

    /** 
    * The logic for isOpen is as follows:
    * Apply opening time and closing time to the current date (provided as an argument)

    * If the current time is after the closing time and before the opening time, the venue is closed
    **/
    func isOpen(atTime time: Date) -> Bool {
        guard let openingTime = getOpeningTime(forDate: time),
            let closingTime = getClosingTime(forDate: time) else {
            return false
        }

        // Is the current time before the opening time and the venue closed after midnight the previous day?
        if time < openingTime,
            let yesterdaysClosingTime = getClosingTime(forDate: time.addingTimeInterval(-AppConstants.ONE_DAY)),
            yesterdaysClosingTime < openingTime {

                // the venue is open if our current time is before yesterdays close time
