     private func setDepartureTimeAndLiveElements(withRoute route: Route) {
         let isWalkingRoute = route.isRawWalkingRoute()
 
-        if let delayedDepartureTime = getDelayedDepartureTime(fromRoute: route) {
-            if isWalkingRoute {
-                setDepartureTimeToWalking()
-            }
-            else {
-                setDepartureTime(withStartTime: Date(), withDepartureTime: delayedDepartureTime, late: true)
-            }
-            setLiveElementsToLate(withDepartureTime: delayedDepartureTime)
-        }
-        else {
-            let departureTime = getDepartureTime(fromRoute: route)
-            if isWalkingRoute {
-                setDepartureTimeToWalking()
-            }
-            else {
-                setDepartureTime(withStartTime: Date(), withDepartureTime: departureTime, late: false)
-            }
-        }
+        if isWalkingRoute {
+            setDepartureTimeToWalking()
+            return
+        }
+        
+        let delayState = getDelayState(fromRoute: route)
+        setDepartureTime(withStartTime: Date(), withDelayState: delayState)
+        setLiveElements(withDelayState: delayState)
     }
     
     @objc func updateLiveElementsWithDelay() {

    func travelDistanceUpdated(withDistance distance: Double)
}

class RouteTableViewCell: UITableViewCell {

    // MARK: Data vars

        return (departureTime: route.departureTime, arrivalTime: route.arrivalTime)
    }
    
    private func getDelayState(fromRoute route: Route) -> DelayState {
        if let firstDepartDirection = route.getFirstDepartRawDirection() {
            
            let departTime = firstDepartDirection.startTime
            
            if let delay = firstDepartDirection.delay {
                
                let delayedDepartTime = departTime.addingTimeInterval(TimeInterval(delay))
                
                if Time.compare(date1: delayedDepartTime, date2: departTime) != .orderedSame
                {
                    return .late(date: delayedDepartTime)
                }
                else {
                    
                    return .onTime(date: departTime)
                    
                }
                
            }
            else {
                
                return .noDelay(date: departTime)
                
            }
            
        }
        
        return .noDelay(date: route.departureTime)
        
    }

    // MARK: Set Data
