         let initial : Accum = (true, nil, nil, [:])
         let final : Accum -> [(NSDate, Double)] = { acc in
             var byDay = acc.3
-            let (finalFast, finalEvt) = (acc.1, acc.2)
-            if finalFast != finalEvt {
-                let fastStartDay = finalFast.startOf(.Day, inRegion: Region())
-                let duration = finalEvt.timeIntervalSinceDate(finalFast)
-                let currentMax = byDay[fastStartDay] ?? duration
-                byDay.updateValue(currentMax >= duration ? currentMax : duration, forKey: fastStartDay)
+            if let finalFast = acc.1, finalEvt = acc.2 {
+                if finalFast != finalEvt {
+                    let fastStartDay = finalFast.startOf(.Day, inRegion: Region())
+                    let duration = finalEvt.timeIntervalSinceDate(finalFast)
+                    let currentMax = byDay[fastStartDay] ?? duration
+                    byDay.updateValue(currentMax >= duration ? currentMax : duration, forKey: fastStartDay)
+                }
             }
             return byDay.sort { (a,b) in return a.0 < b.0 }
         }

                let currentMax = byDay[fastStartDay] ?? duration
                byDay.updateValue(currentMax >= duration ? currentMax : duration, forKey: fastStartDay)
                nextFast = e.0
            }
            return (!acc.0, nextFast, e.0, byDay)
        }

                                                  aggregator: ((T, (NSDate, CircadianEvent)) -> T), initial: T, final: (T -> [(NSDate, Double)]),
                                                  completion: HMCircadianAggregateBlock)
    {
        fetchCircadianEventIntervals(NSDate.distantPast()) { (intervals, error) in
            guard error == nil else {
                completion(aggregates: [], error: error)
                return
