         return Int.max
     }
     
+    /**
+     *  The duration of the `TimePeriod` in a time chunk.
+     *  Returns a time chunk with all zeroes if beginning or end are nil.
+     */
     var chunk: TimeChunk {
         if beginning != nil && end != nil {
             return beginning!.chunkBetween(date: end!)
         }
-        return TimeChunk(seconds: seconds, minutes: 0, hours: 0, days: 0, weeks: 0, months: 0, years: 0)
-    }
-    
+        return TimeChunk(seconds: 0, minutes: 0, hours: 0, days: 0, weeks: 0, months: 0, years: 0)
+    }
+    
+    /**
+     *  The length of time between the beginning and end dates of the
+     * `TimePeriod` as a `TimeInterval`.
+     */
     var duration: TimeInterval {
         if self.beginning != nil && self.end != nil {
             return abs(self.beginning!.timeIntervalSince(self.end!))

        return Int.max
    }
    
    var hours: Int {
        if self.beginning != nil && self.end != nil {
            return self.beginning!.hoursEarlier(than: self.end!)

    // MARK: - Shifts
    
    //MARK: In Place
    
    /**
     *  # Shift By (Time Interval at Anchor)
     *  In place, shift the `TimePeriod` by a `TimeInterval`
     *
     *  @param timeInterval TimeInterval - The time interval to shift the period by
     */
    mutating func shift(by timeInterval: TimeInterval) {
        self.beginning?.addTimeInterval(timeInterval)
        self.end?.addTimeInterval(timeInterval)
    }
    
    /**
     *  # Shift By (Time Chunk at Anchor)
     *  In place, shift the `TimePeriod` by a `TimeChunk`
     *
     *  @param chunk TimeChunk - The time chunk to shift the period by
     */
    mutating func shift(by chunk: TimeChunk) {
        self.beginning = self.beginning?.add(chunk)
        self.end = self.end?.add(chunk)
